【发布时间】:2020-08-18 05:46:14
【问题描述】:
我需要使用 istio 根据标头路由我的流量,但此选项在 istio1.6 版本中已弃用。为什么在 istio 中不推荐使用控制标头和路由?
【问题讨论】:
-
您可以使用过滤器/策略适配器来处理标头和路由。 istio.io/latest/docs/tasks/policy-enforcement/control-headers/…你查了吗?
标签: kubernetes istio
我需要使用 istio 根据标头路由我的流量,但此选项在 istio1.6 版本中已弃用。为什么在 istio 中不推荐使用控制标头和路由?
【问题讨论】:
标签: kubernetes istio
正如 istio 中提到的documentation
混合器策略在 Istio 1.5 中已弃用,不推荐用于生产环境。
考虑使用 Envoy ext_authz 过滤器、lua 过滤器,或使用 Envoy-wasm sandbox 编写过滤器。
不推荐使用控制标头和路由,它只是用于执行此操作的混音器。如上所述,现在有不同的方法可以做到这一点。
我不确定你到底想做什么,但是看看 envoy 过滤器和虚拟服务。
有 envoy 过滤器可以为所有出站响应添加一些自定义标头
kind: EnvoyFilter
metadata:
name: lua-filter
namespace: istio-system
spec:
workloadSelector:
labels:
istio: ingressgateway
configPatches:
- applyTo: HTTP_FILTER
match:
context: GATEWAY
listener:
filterChain:
filter:
name: "envoy.http_connection_manager"
subFilter:
name: "envoy.router"
patch:
operation: INSERT_BEFORE
value:
name: envoy.lua
typed_config:
"@type": "type.googleapis.com/envoy.config.filter.http.lua.v2.Lua"
inlineCode: |
function envoy_on_response(response_handle)
response_handle:logInfo(" ========= XXXXX ========== ")
response_handle:headers():add("X-User-Header", "worked")
end
以及来自 curl 的测试
$ curl -s -I -X HEAD x.x.x.x/
HTTP/1.1 200 OK
server: istio-envoy
date: Mon, 06 Jul 2020 08:35:37 GMT
content-type: text/html
content-length: 13
last-modified: Thu, 02 Jul 2020 12:11:16 GMT
etag: "5efdcee4-d"
accept-ranges: bytes
x-envoy-upstream-service-time: 2
x-user-header: worked
几个值得检查的链接:
这里值得检查的另一件事是virtual service,您可以在此处根据匹配进行标头路由。
看看istio documentation的例子
HttpMatchRequest 指定要满足的一组标准,以便将规则应用于 HTTP 请求。例如,以下内容将规则限制为仅匹配 URL 路径以 /ratings/v2/ 开头并且请求包含值为 jason 的自定义最终用户标头的请求。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ratings-route
spec:
hosts:
- ratings.prod.svc.cluster.local
http:
- match:
- headers:
end-user:
exact: jason
uri:
prefix: "/ratings/v2/"
ignoreUriCase: true
route:
- destination:
host: ratings.prod.svc.cluster.local
此外,我的旧 example 在虚拟服务中具有基于标头的路由。
如果您还有其他问题,请告诉我。
【讨论】: