全部產品
Search
文件中心

Alibaba Cloud Service Mesh:如何解決Kubernetes叢集中的Pod無法訪問入口網關的CLB地址的問題?

更新時間:Jun 30, 2024

本文介紹如何解決資料面Kubernetes叢集中的Pod無法訪問入口網關的CLB地址的問題。

問題現象

Service MeshASM已添加Kubernetes叢集,並且使用Local類型的負載平衡CLB部署入口網關。當應用Pod訪問入口網關暴露的CLB地址時,出現以下問題:

  • 部分節點上的Pod能訪問入口網關暴露的CLB地址。

  • 部分節點上的Pod不能訪問入口網關暴露的CLB地址。

問題原因

如果Kubernetes叢集的服務配置了externalTrafficPolicy: Local,則只有部署了服務的後端Pod才能訪問CLB地址。因為CLB地址是叢集外使用,如果叢集節點和Pod不能直接存取CLB地址,請求不會路由到負載平衡,而是被當作服務的擴充IP地址,被kube-proxy的iptables或IPVS轉寄。

如果叢集節點或者Pod所在的節點上沒有相應的後端服務Pod,就會發生網路不通的問題。而如果有相應的後端服務Pod,則可以正常訪問CLB地址。更多資訊,請參見iptables規則

解決方案

  • 您可以在Kubernetes叢集內通過ClusterIP或者服務名訪問CLB地址。其中入口網關的服務名為istio-ingressgateway.istio-system。

    說明

    推薦使用該方法。

  • 如果您不需要源IP,您可以使用以下方法。

    將入口網關服務中的externalTrafficPolicy修改為Cluster,但是在應用中會丟失源IP。關於修改入口網關的更多資訊,請參見ASM網關CRD說明

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: IstioGateway
    metadata:
      name: ingressgateway
      namespace: istio-system
      ....
    spec:
      externalTrafficPolicy: Cluster
    ....
  • 如果您使用的是Terway的ENI或者ENI多IP叢集,您可以使用以下方法。該方法不會丟失源IP,也支援在叢集內訪問CLB地址。

    將入口網關服務中的externalTrafficPolicy修改為Cluster,並且添加ENI直通的Annotation,例如serviceAnnotations: service.beta.kubernetes.io/backend-type: eni。關於修改入口網關的更多資訊,請參見ASM網關CRD說明

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: IstioGateway
    metadata:
      name: ingressgateway
      namespace: istio-system
      ....
    spec:
      externalTrafficPolicy: Cluster
      maxReplicas: 5
      minReplicas: 2
      ports:
        - name: status-port
          port: 15020
          targetPort: 15020
        - name: http2
          port: 80
          targetPort: 80
        - name: https
          port: 443
          targetPort: 443
        - name: tls
          port: 15443
          targetPort: 15443
      replicaCount: 2
      resources:
        limits:
          cpu: '2'
          memory: 2G
        requests:
          cpu: 200m
          memory: 256Mi
      runAsRoot: false
      serviceAnnotations:
        service.beta.kubernetes.io/backend-type: eni
      serviceType: LoadBalancer