すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Service Mesh:データプレーン上の Kubernetes クラスターのポッドが、イングレスゲートウェイで設定されている CLB インスタンスの IP アドレスにアクセスできない場合はどうすればよいですか?

最終更新日:Jan 15, 2025

このトピックでは、データプレーン上の Kubernetes クラスターのポッドが、イングレスゲートウェイで設定されている Classic Load Balancer(CLB)インスタンスの IP アドレスにアクセスできない問題を解決する方法について説明します。

問題の説明

Kubernetes クラスターが Service Mesh(ASM)インスタンスに追加されています。externalTrafficPolicy パラメーターが Local に設定されている CLB インスタンスが、ASM インスタンスのイングレスゲートウェイで設定されています。Kubernetes クラスターのポッドが、イングレスゲートウェイで設定されている CLB インスタンスの IP アドレスにアクセスすると、次の問題が発生します。

  • 特定のノード上のポッドは、エントリゲートウェイによって公開されている CLB アドレスにアクセスできます。

  • 特定のノード上のポッドは、エントリゲートウェイによって公開されている CLB アドレスにアクセスできません。

原因

externalTrafficPolicy パラメーターが Local に設定されている CLB インスタンスが Kubernetes クラスターのイングレスゲートウェイサービスに指定されている場合、サービスがデプロイされているバックエンドポッドのみが CLB インスタンスの IP アドレスにアクセスできます。これは、CLB インスタンスの IP アドレスがサービスの外部 IP アドレスと見なされ、Kubernetes クラスターの外部からイングレスゲートウェイにアクセスするために使用されるためです。Kubernetes クラスター内のノードとポッドが CLB インスタンスの IP アドレスに直接アクセスできない場合、システムは CLB インスタンスへのリクエストをルーティングしません。代わりに、リクエストは iptables モードまたは IP Virtual Server(IPVS)モードの kube-proxy によって転送されます。

サービスのバックエンドポッドが Kubernetes クラスターのノード、またはリクエストを送信するポッドが存在するノードにデプロイされていない場合、CLB インスタンスの IP アドレスにはアクセスできません。サービスのバックエンドポッドがデプロイされている場合、CLB インスタンスの IP アドレスにアクセスできます。詳細については、「Why kube-proxy add external-lb's address to node local iptables rule?」をご参照ください。

解決策

  • Kubernetes クラスターの IP アドレス、またはイングレスゲートウェイサービスの名前を使用して、Kubernetes クラスター内から CLB インスタンスの IP アドレスにアクセスできます。イングレスゲートウェイサービスの名前は istio-ingressgateway.istio-system です。

    説明

    この解決策を使用することをお勧めします。

  • 送信元 IP アドレスが不要な場合は、次の解決策を使用できます。

    イングレスゲートウェイの externalTrafficPolicy パラメーターの値を Cluster に変更します。この場合、CLB インスタンスの IP アドレスにアクセスするときに送信元 IP アドレスを取得できません。詳細については、「ゲートウェイの CRD フィールド」をご参照ください。

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: IstioGateway
    metadata:
      name: ingressgateway
      namespace: istio-system
      ....
    spec:
      externalTrafficPolicy: Cluster
    ....
  • Terway の Elastic Network Interface(ENI)を使用している場合、またはクラスターが包括的 ENI モードになっている場合は、次の解決策を使用できます。この解決策では、送信元 IP アドレスを失うことなく、Kubernetes クラスター内から CLB インスタンスの IP アドレスにアクセスできます。

    イングレスゲートウェイの externalTrafficPolicy パラメーターの値を Cluster に変更し、serviceAnnotations: service.beta.kubernetes.io/backend-type: eni などのアノテーションを追加して、ENI に直接接続します。詳細については、「ゲートウェイの 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