全部产品
Search
文档中心

Alibaba Cloud Service Mesh:Apa yang dapat saya lakukan jika pod dari klaster Kubernetes pada data plane tidak dapat mengakses alamat IP dari instance CLB yang dikonfigurasi di dalam gateway masuk?

更新时间:Jul 02, 2025

Topik ini menjelaskan cara menyelesaikan masalah di mana pod dari klaster Kubernetes pada data plane tidak dapat mengakses alamat IP dari instance Classic Load Balancer (CLB) yang dikonfigurasi di dalam gateway masuk.

Deskripsi Masalah

Sebuah klaster Kubernetes telah ditambahkan ke instance Service Mesh (ASM) Anda. Sebuah instance CLB dengan parameter externalTrafficPolicy disetel ke Local dikonfigurasikan di dalam gateway masuk untuk instance ASM tersebut. Ketika pod dari klaster Kubernetes mencoba mengakses alamat IP dari instance CLB yang dikonfigurasikan di dalam gateway masuk, terjadi masalah berikut:

  • Pod pada beberapa node tertentu dapat mengakses alamat CLB yang diekspos oleh gateway masuk.

  • Pod pada beberapa node tertentu tidak dapat mengakses alamat CLB yang diekspos oleh gateway masuk.

Penyebab

Jika instance CLB dengan parameter externalTrafficPolicy disetel ke Local digunakan untuk layanan gateway masuk dari klaster Kubernetes, hanya pod backend tempat layanan diterapkan yang dapat mengakses alamat IP dari instance CLB. Hal ini karena alamat IP dari instance CLB dianggap sebagai alamat IP eksternal dari layanan dan digunakan untuk mengakses gateway masuk dari luar klaster Kubernetes. Jika node dan pod dalam klaster Kubernetes tidak dapat langsung mengakses alamat IP dari instance CLB, sistem tidak akan merutekan permintaan ke instance CLB. Sebagai gantinya, permintaan diteruskan oleh kube-proxy dalam mode iptables atau IP Virtual Server (IPVS).

Jika tidak ada pod backend dari layanan yang diterapkan pada node dari klaster Kubernetes atau node tempat pod yang mengirim permintaan berada, alamat IP dari instance CLB tidak dapat diakses. Namun, jika pod backend dari layanan diterapkan, alamat IP dari instance CLB dapat diakses. Untuk informasi lebih lanjut, lihat Mengapa kube-proxy menambahkan alamat external-lb ke aturan iptables lokal node?.

Solusi

  • Gunakan alamat IP dari klaster Kubernetes atau nama layanan gateway masuk untuk mengakses alamat IP dari instance CLB di dalam klaster Kubernetes. Nama layanan gateway masuk adalah istio-ingressgateway.istio-system.

    Catatan

    Kami merekomendasikan agar Anda menggunakan solusi ini.

  • Jika Anda tidak memerlukan alamat IP sumber, gunakan solusi berikut:

    Ubah nilai parameter externalTrafficPolicy dari gateway masuk menjadi Cluster. Dalam hal ini, Anda tidak dapat memperoleh alamat IP sumber ketika mengakses alamat IP dari instance CLB. Untuk informasi lebih lanjut, lihat Bidang CRD untuk gateway.

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: IstioGateway
    metadata:
      name: ingressgateway
      namespace: istio-system
      ....
    spec:
      externalTrafficPolicy: Cluster
    ....
  • Jika Anda menggunakan elastic network interfaces (ENIs) dari Terway atau klaster Anda berada dalam mode ENI inklusif, gunakan solusi berikut: Solusi ini memungkinkan Anda mengakses alamat IP dari instance CLB di dalam klaster Kubernetes tanpa kehilangan alamat IP sumber.

    Ubah nilai parameter externalTrafficPolicy dari gateway masuk menjadi Cluster dan tambahkan anotasi, seperti serviceAnnotations: service.beta.kubernetes.io/backend-type: eni, untuk langsung terhubung ke ENI. Untuk informasi lebih lanjut, lihat Bidang CRD untuk gateway.

    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