将不带 Istio 的命名空间之间的流量路由到带 Istio 的命名空间
Routing traffic between namespace without Istio to namespace with Istio
在我的集群中,我有多个命名空间。我所有的第一方服务都 运行 在一个命名空间中,所有第 3 方服务都在它们自己的命名空间中 运行。
我在我的第一方命名空间上启用了 Istio(我们称之为 ns-1
)。我的任何第 3 方命名空间均未启用 Istio。
我有一个第 3 方服务需要连接到我的第 1 方服务。 3rd 方服务将使用像 service1.ns-1.svc.cluster.local
这样的 k8s DNS 来连接到我的服务。第 3 方服务可以在没有 TLS 的情况下与我的第 1 方服务通信。当我在服务之间启用 TLS 失败时,我不知道 how/where 终止 TLS?
是否可以定义一个可以在命名空间之间路由流量的 Gateway
?或者可以通过 Istio IngressGateway
在命名空间之间路由流量
在通过 echo-server 考试使用 Istio 和 Minikube 之后,这就是我的发现。首先让我定义名称空间和服务,以便于解释
ns-1
- 启用 Istio 的命名空间 1
ns-2
- 命名空间 2 没有 Istio
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 作为这个答案)
我最后做了什么?
我部署了另一个 istio-ingressGateway,服务类型为 ClusterIP,将其设置为为我的端口路由流量。这将是我所有第 3 方服务到达我的第 1 方服务的网关,它将终止传入流量的 TLS,并对 istio 命名空间 (ns-1
) 中的服务执行 mTLS。由于这是一个 ClusterIP,因此它仅在集群内部可见。然后,我配置了 Istio Gateway
和 VirtualService
对象,以根据端口号将流量路由到我的服务。
在我的集群中,我有多个命名空间。我所有的第一方服务都 运行 在一个命名空间中,所有第 3 方服务都在它们自己的命名空间中 运行。
我在我的第一方命名空间上启用了 Istio(我们称之为 ns-1
)。我的任何第 3 方命名空间均未启用 Istio。
我有一个第 3 方服务需要连接到我的第 1 方服务。 3rd 方服务将使用像 service1.ns-1.svc.cluster.local
这样的 k8s DNS 来连接到我的服务。第 3 方服务可以在没有 TLS 的情况下与我的第 1 方服务通信。当我在服务之间启用 TLS 失败时,我不知道 how/where 终止 TLS?
是否可以定义一个可以在命名空间之间路由流量的 Gateway
?或者可以通过 Istio IngressGateway
在通过 echo-server 考试使用 Istio 和 Minikube 之后,这就是我的发现。首先让我定义名称空间和服务,以便于解释
ns-1
- 启用 Istio 的命名空间 1ns-2
- 命名空间 2 没有 Istioservice-1
-ns-1
命名空间中的服务 1service-2
-ns-2
命名空间中的服务 2
以下是这两个服务之间的连接状态
service-1
可以在没有 TLS 的情况下与 service-2
可以在没有 TLS 的情况下与 service-1
可以使用 TLS 与 service-2
无法 使用 TLS 与
service-2.ns-2.svc.cluster.local
通信
service-1.ns-1.svc.cluster.local
通信
service-2.ns-2.svc.cluster.local
通信
service-1.ns-1.svc.cluster.local
通信
您可能已经知道在上面的第 4 种情况下(service-2
使用 TLS)TLS 没有被任何导致失败的 Istio 对象终止。
如果 TLS 可以被 sidecar 终止,这就可以工作。 added tls to sidecar api 是我要找的东西,但它不在当前的 Istio 版本中(1.12.2 作为这个答案)
我最后做了什么?
我部署了另一个 istio-ingressGateway,服务类型为 ClusterIP,将其设置为为我的端口路由流量。这将是我所有第 3 方服务到达我的第 1 方服务的网关,它将终止传入流量的 TLS,并对 istio 命名空间 (ns-1
) 中的服务执行 mTLS。由于这是一个 ClusterIP,因此它仅在集群内部可见。然后,我配置了 Istio Gateway
和 VirtualService
对象,以根据端口号将流量路由到我的服务。