【问题标题】:Route TCP traffic from ingress-nginx to istio service mesh with mTLS mode STRICT使用 mTLS 模式 STRICT 将 TCP 流量从 ingress-nginx 路由到 istio 服务网格
【发布时间】:2022-12-09 20:23:24
【问题描述】:

我正在使用 ingress-nginx v1.3.0(与 Helm chart v4.2.3 一起安装)作为 DigitalOcean 的 Kubernetes 上的负载均衡器。在 Kubernetes 集群中,我正在运行 istio v1.15.0 服务网格。网格在对等身份验证 mTLS 模式设置为“严格”的情况下运行(需要正确加密流量)。

我能够成功地将 nginx 与 istio 服务网格连接起来以获取 HTTP/HTTPS 流量,但我没有找到如何对 TCP 流量执行相同操作的方法。

当 nginx 转发 HTTP 流量时,它可以直接将它发送到 K8s pod(这是默认行为),或者它可以配置为使用 nginx.ingress.kubernetes.io/service-upstream: "true"nginx.ingress.kubernetes.io/upstream-vhost: "..." 对象上的注释 nginx.ingress.kubernetes.io/service-upstream: "true"nginx.ingress.kubernetes.io/upstream-vhost: "..." 对象(如记录here)。

如果没有这些注释,nginx pod 上的 istio 的 Envoy sidecar 会将指向上游 pod 的流量视为网状流量(它将流量发送到PassthroughCluster)并且不会正确加密,因此上游 Envoy sidecar 不会由于 mTLS 模式设置为“严格”而接受流量。通过注释,Envoy 将流量识别为网状流量并对其进行正确加密。

我正在尝试为 TCP 流量解决同样的问题。似乎 nginx 将 TCP 流量直接发送到 pod,与 HTTP/HTTPS 流量的默认行为相同(= 未设置注释时)。但是,TCP 流量转发未在 Ingress 对象中定义,因此无法应用上述注释。如上所述,这会导致 TCP 流量在未加密的情况下通过,并且上游 Envoy 最终将其丢弃。

一种解决方案是指示 nginx 将 TCP 流量发送到服务端点,就像使用 HTTP/HTTPS 流量一样。但是,我找不到任何方法来实现这一目标。

也许另一种解决方案是告诉 istio 将 pod 到 pod 的流量(而不是 pod 到服务到 pod 的流量)也视为网格流量,指示 Envoy 也对其进行加密。

有什么想法可以在将 mTLS 设置保持为 STRICT 的同时实现这一目标吗?更具体地说,加密流量对我来说是必须的,因此我不能接受将更改 mTLS 设置作为解决方案。

谢谢!

【问题讨论】:

  • 我还在ingress-nginx 项目的 Github 问题跟踪器中问了这个问题:github.com/kubernetes/ingress-nginx/issues/9060。如果有人知道如何访问他们的 Slack 以获得更好的支持,我将不胜感激一些提示。谢谢!

标签: kubernetes istio nginx-ingress mtls istio-sidecar


【解决方案1】:

GitHub链接中所述

没有办法配置 ingress-nginx-controller 来做到这一点。

目前该项目处于功能冻结阶段,正在稳定 工作,因此直到 2022 年底或什至 几个月后。您已经知道 TCP/UDP 支持已打开 控制器上的一个端口,你已经知道反向代理 组件是 nginx。所以我什至无法想象不仅这个功能如何 但任何第 7 层行为都可以更改/实施。但我不是一个 开发人员因此请等待这方面的其他 cmet。

【讨论】:

    猜你喜欢
    • 2021-12-03
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    相关资源
    最近更新 更多