Istio Multicluster:在非代理服务的 Ingress Gateway 处终止 mTLS

Istio Multicluster:在非代理服务的 Ingress Gateway 处终止 mTLS

我正在编写一个服务来协调“复制控制平面”配置中的 Istio 控制平面。我已经设法以编程方式创建了ServiceEntry在集群之间正确路由的对象 - 多集群路由效果很好!甚至无需任何额外配置即可在集群之间正确进行故障转移。我的应用程序创建的服务条目示例如下:

apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: httpbin-no-proxy.httpbin
  namespace: my-app
spec:
  addresses:
  - 245.0.0.1
  endpoints:
  # Some remote cluster ingress
  - address: 172.18.0.3
    labels:
      app: httpbin
      my-app/managed: cluster-1
      identity: httpbin
    ports:
      http: 15443
  - address: httpbin-no-proxy.httpbin.svc.cluster.local
    labels:
      app: httpbin-no-proxy
      my-app/managed: cluster-2
      identity: httpbin
    ports:
      http: 8000
  hosts:
  - httpbin-no-proxy.httpbin.global
  location: MESH_INTERNAL
  ports:
  - name: http
    number: 8000
    protocol: http
  resolution: DNS

但是...为了更容易地加入服务,我想为客户端/服务器位于不同集群中且服务器尚未注入 istio 的服务对启用此功能。

这并不是开箱即用的(无论是集群内还是集群外),因为ServiceEntry在服务器集群中满足必要条件的情况下,Istio 不会在入口网关处终止 mTLS——服务接收加密流量!

在我的集群中,我可以配置终止边车使用目标规则,如下所示:

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: httpbin-no-proxy.httpbin
spec:
  host: httpbin-no-proxy.httpbin.global
  trafficPolicy:
    outlierDetection:
      baseEjectionTime: 120s
      consecutiveErrors: 10
      interval: 5s
      minHealthPercent: 49
    tls:
      mode: DISABLE

这使得.global工作在服务器集群内部进行——来自服务器集群中带有 sidecar 的 pod 的流量在到达服务器时不再加密。但这在遍历入口网关时不会生效,即使我DestinationRuleistio-systemistio-config命名空间中创建。

是什么让入口代理实例变得特殊,以及如何让入口网关以纯文本形式连接到上游(服务器)?

相关内容