All Products
Search
Document Center

Alibaba Cloud Service Mesh:Mengatasi Pod yang Gagal Mengakses Alamat IP CLB dari Gerbang Masuk

Last Updated:Aug 30, 2026

Ketika layanan gerbang masuk menggunakan externalTrafficPolicy: Local, pod pada beberapa node dapat mengakses alamat IP Classic Load Balancer (CLB), sedangkan pod pada node lain tidak dapat. Topik ini menjelaskan penyebab dan solusi masalah tersebut.

Gejala

Setelah Anda menambahkan kluster Kubernetes ke instans Service Mesh (ASM) dan mengonfigurasi instans CLB untuk gerbang masuk dengan externalTrafficPolicy: Local, gejala berikut muncul saat pod aplikasi mengakses alamat IP CLB yang diekspos oleh gerbang masuk:

  • Pod pada beberapa node dapat mengakses alamat IP CLB dari gerbang masuk.

  • Pod pada node lain tidak dapat mengakses alamat IP CLB yang sama.

Diagnosis Masalah

Sebelum menerapkan perbaikan, pastikan bahwa pengaturan externalTrafficPolicy: Local merupakan penyebab masalah.

  1. Periksa pengaturan externalTrafficPolicy pada layanan gerbang masuk. Jika output-nya adalah Local, maka masalah ini berlaku.

    kubectl get svc istio-ingressgateway -n istio-system -o jsonpath='{.spec.externalTrafficPolicy}'
  2. Daftar node yang menjalankan pod gerbang masuk dan catat kolom NODE.

    kubectl get pods -n istio-system -l app=istio-ingressgateway -o wide
  3. Identifikasi node tempat pod yang gagal berjalan. Jika pod tersebut berada pada node yang tidak muncul dalam output langkah 2, maka akar penyebab telah dikonfirmasi.

    kubectl get pod <failing-pod-name> -n <namespace> -o wide

Akar Penyebab

Ketika externalTrafficPolicy diatur ke Local, kube-proxy menambahkan aturan iptables (atau IP Virtual Server/IPVS) yang hanya mengarahkan lalu lintas ke titik akhir pada node lokal. Urutan berikut menggambarkan cara kube-proxy memproses permintaan dalam kluster ke alamat IP CLB:

  1. Sebuah pod mengirim permintaan ke alamat IP eksternal CLB.

  2. kube-proxy mengenali alamat IP CLB sebagai alamat IP eksternal layanan gerbang masuk dan mencegat permintaan tersebut alih-alih meneruskannya ke CLB.

  3. kube-proxy mencari titik akhir gerbang masuk pada node yang sama dengan pod yang melakukan permintaan.

  4. Jika terdapat pod gerbang masuk pada node tersebut, kube-proxy meneruskan permintaan ke pod tersebut sehingga permintaan berhasil.

  5. Jika tidak ada pod gerbang masuk pada node tersebut, kube-proxy tidak menemukan titik akhir lokal sehingga permintaan gagal.

Ini merupakan perilaku Kubernetes yang diharapkan untuk externalTrafficPolicy: Local. Untuk informasi lebih lanjut, lihat Why kube-proxy add external-lb's address to node local iptables rule?.

Solusi

Pilih solusi berdasarkan kebutuhan Anda untuk mempertahankan alamat IP sumber dan jenis plugin CNI yang digunakan oleh kluster.

Solusi

Mempertahankan IP sumber

Prasyarat

Perubahan konfigurasi

Gunakan nama DNS layanan

Ya (untuk traffic eksternal)

Tidak ada

Tidak ada

Atur externalTrafficPolicy ke Cluster

Tidak

Tidak ada

Ubah CRD IstioGateway

Gunakan koneksi langsung ENI

Ya

CNI Terway dengan mode ENI

Ubah CRD IstioGateway dan tambahkan anotasi

Gunakan Nama DNS Layanan (Direkomendasikan)

Alih-alih menggunakan alamat IP eksternal CLB dari dalam kluster, akses gerbang masuk melalui ClusterIP atau nama DNS-nya. Lalu lintas ClusterIP menggunakan jalur perutean kube-proxy terpisah yang meneruskan ke semua titik akhir di seluruh kluster, sehingga melewati batasan externalTrafficPolicy: Local.

Gunakan nama DNS layanan berikut untuk akses dalam kluster:

istio-ingressgateway.istio-system

Sebagai contoh, untuk mengirim permintaan dari sebuah pod:

curl http://istio-ingressgateway.istio-system
Catatan

Catatan: Pendekatan ini tidak memerlukan perubahan konfigurasi, kompatibel dengan semua plugin CNI, dan tetap mempertahankan alamat IP sumber untuk lalu lintas eksternal yang masuk melalui CLB.

Atur externalTrafficPolicy ke Cluster

Jika Anda tidak perlu mempertahankan alamat IP sumber, atur externalTrafficPolicy ke Cluster. Pengaturan ini menginstruksikan kube-proxy untuk meneruskan lalu lintas ke pod gerbang masuk pada node mana pun, bukan hanya node lokal.

Perbarui Custom Resource Definition (CRD) IstioGateway:

apiVersion: istio.alibabacloud.com/v1beta1
kind: IstioGateway
metadata:
  name: ingressgateway
  namespace: istio-system
  ....
spec:
  externalTrafficPolicy: Cluster
....

Untuk detail tentang bidang CRD, lihat Bidang CRD untuk gerbang.

Catatan

Catatan: Dengan externalTrafficPolicy: Cluster, permintaan masuk akan menjalani Translasi Alamat IP Sumber (SNAT), yang mengganti alamat IP sumber klien dengan alamat IP internal node. Jika aplikasi Anda bergantung pada alamat IP sumber klien, gunakan solusi lain.

Gunakan Koneksi Langsung ENI

Jika kluster Anda menggunakan elastic network interfaces (ENIs) melalui Terway atau berjalan dalam mode ENI inklusif, atur externalTrafficPolicy ke Cluster sekaligus mempertahankan alamat IP sumber melalui koneksi langsung ENI.

Perbarui CRD IstioGateway untuk mengatur externalTrafficPolicy: Cluster dan tambahkan anotasi service.beta.kubernetes.io/backend-type: eni:

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

Untuk detail tentang bidang CRD, lihat Bidang CRD untuk gerbang.

Verifikasi Perbaikan

Setelah menerapkan solusi pilihan Anda, verifikasi bahwa pod yang sebelumnya gagal kini dapat mengakses gerbang masuk:

kubectl exec <failing-pod-name> -n <namespace> -- curl -s -o /dev/null -w "%{http_code}" http://istio-ingressgateway.istio-system

Kode respons 200 (atau respons HTTP valid lainnya) mengonfirmasi bahwa pod dapat mengakses gerbang masuk.