【问题标题】:control headers and routing depcrecated in istio 1.6Istio 1.6 中弃用了控制标头和路由
【发布时间】:2020-08-18 05:46:14
【问题描述】:

我需要使用 istio 根据标头路由我的流量,但此选项在 istio1.6 版本中已弃用。为什么在 istio 中不推荐使用控制标头和路由?

【问题讨论】:

标签: kubernetes istio


【解决方案1】:

正如 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 在虚拟服务中具有基于标头的路由。


如果您还有其他问题,请告诉我。

【讨论】:

    猜你喜欢
    • 2020-04-01
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2019-04-10
    • 2015-05-08
    • 2023-03-27
    • 2017-03-05
    相关资源
    最近更新 更多