【问题标题】:Routing traffic between namespace without Istio to namespace with Istio将没有 Istio 的命名空间之间的流量路由到有 Istio 的命名空间
【发布时间】:2022-02-16 06:28:36
【问题描述】:

在我的集群中,我有多个命名空间。我所有的第一方服务都在一个命名空间中运行,所有第三方服务都在它们自己的命名空间中运行。

我在我的第一方命名空间上启用了 Istio(我们称之为 ns-1)。没有为我的任何 3rd 方命名空间启用 Istio。

我有一个第 3 方服务需要连接到我的第 1 方服务。第 3 方服务将使用像 service1.ns-1.svc.cluster.local 这样的 k8s DNS 连接到我的服务。第 3 方服务可以在没有 TLS 的情况下与我的第 1 方服务通信。当我在服务之间启用 TLS 时它会失败并且我不知道如何/在哪里终止 TLS?

是否可以定义一个Gateway 来在命名空间之间路由流量?或者可以通过 Istio IngressGateway 在命名空间之间路由流量

【问题讨论】:

  • 您是否尝试将 mTLS 模式设置为 PERMISSIVE 以用于此特定工作负载,例如在 docs 中?
  • 这不起作用

标签: istio istio-sidecar istio-gateway


【解决方案1】:

在使用 Istio 和 Minikube 进行 echo-server 考试后,我发现了这一点。首先让我定义命名空间和服务,以便于解释

  • ns-1 - 启用 Istio 的命名空间 1
  • ns-2 - 没有 Istio 的命名空间 2
  • service-1 - ns-1 命名空间中的服务 1
  • service-2-ns-2 命名空间中的服务 2

以下是这两个服务之间的连接状态

  • service-1 可以在没有 TLS 的情况下与 service-2.ns-2.svc.cluster.local 通信
  • service-2 可以在没有 TLS 的情况下与 service-1.ns-1.svc.cluster.local 通信
  • service-1 可以通过 TLS 与 service-2.ns-2.svc.cluster.local 通信
  • service-2 无法使用 TLS 与 service-1.ns-1.svc.cluster.local 通信

您可能已经知道在上述第 4 种情况下(service-2 使用 TLS),TLS 不会被任何导致此失败的 Istio 对象终止。

如果 TLS 可以由 sidecar 终止,则可以工作。 added tls to sidecar api 是我正在寻找的,但它不在当前的 Istio 版本中(截至本答案为 1.12.2)

我最终做了什么?

我部署了另一个服务类型为 ClusterIP 的 istio-ingressGateway,将其设置为为我的端口路由流量。这将是我的所有第 3 方服务访问我的第 1 方服务的网关,它将终止传入流量的 TLS 并对 istio 命名空间 (ns-1) 中的服务执行 mTLS。由于这是一个 ClusterIP,它只在集群内可见。然后我配置了 Istio GatewayVirtualService 对象,以根据端口号将流量路由到我的服务。

【讨论】:

    猜你喜欢
    • 2020-11-17
    • 1970-01-01
    • 2021-10-05
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    相关资源
    最近更新 更多