All Products
Search
Document Center

Alibaba Cloud Service Mesh:Pod di beberapa node tidak dapat mengakses alamat IP CLB gerbang masuk

Last Updated:Mar 11, 2026

Ketika kluster Kubernetes pada bidang data instans Service Mesh (ASM) menggunakan Classic Load Balancer (CLB) dengan externalTrafficPolicy: Local untuk gerbang masuk, pod di beberapa node mungkin gagal mengakses alamat IP CLB. Topik ini menjelaskan penyebabnya dan memberikan tiga solusi.

Gejala

Kluster Kubernetes telah ditambahkan ke instans ASM. Instans CLB dengan externalTrafficPolicy diatur ke Local dikonfigurasi untuk gerbang masuk. Anda mengamati perilaku berikut:

  • Pod di node tertentu dapat mengakses alamat IP CLB gerbang masuk.

  • Pod di node lainnya tidak dapat mengakses alamat IP CLB yang sama.

Penyebab

Ketika externalTrafficPolicy bernilai Local, kube-proxy hanya memprogram aturan pengalihan iptables atau IP Virtual Server (IPVS) pada node yang menjalankan pod backend dari layanan gerbang masuk. Node yang tidak memiliki pod gerbang masuk tidak memiliki aturan pengalihan, sehingga lalu lintas ke alamat IP CLB dibuang.

Alamat IP CLB diperlakukan sebagai IP eksternal layanan. Alih-alih mengarahkan lalu lintas keluar ke load balancer lalu kembali, kube-proxy memperpendek rute permintaan melalui aturan iptables atau IPVS lokal. Dengan externalTrafficPolicy: Local, hanya node dengan titik akhir lokal yang mendapatkan aturan tersebut.

Untuk diskusi Kubernetes hulu terkait, lihat Why kube-proxy add external-lb's address to node local iptables rule?.

Verifikasi masalah

Sebelum menerapkan perbaikan, pastikan akar penyebab ini berlaku dalam situasi Anda.

  1. Periksa node mana yang menjalankan pod gerbang masuk: Perhatikan kolom NODE. Pod di node tersebut dapat mengakses IP CLB, sedangkan pod di node lain tidak dapat.

       kubectl get pods -n istio-system -l app=istio-ingressgateway -o wide
  2. Periksa titik akhir layanan gerbang masuk: Alamat IP yang terdaftar sesuai dengan pod gerbang masuk. Node tanpa pod tersebut tidak memiliki aturan pengalihan lokal yang diperlukan untuk mengakses IP CLB.

       kubectl get endpoints -n istio-system istio-ingressgateway
  3. (Opsional) Pada node tempat akses gagal, verifikasi bahwa tidak ada aturan iptables untuk IP CLB: Ganti <CLB_IP> dengan alamat IP CLB sebenarnya. Jika tidak ada output yang dikembalikan, artinya node tersebut tidak memiliki aturan pengalihan untuk IP tersebut, yang mengonfirmasi masalah ini.

       iptables-save | grep <CLB_IP>

Solusi

Pilih solusi berdasarkan kebutuhan Anda:

SolusiIP sumber dipertahankanMemerlukan ENIKompleksitas
Akses gerbang masuk melalui cluster IP atau nama ServiceYaTidakRendah
Atur externalTrafficPolicy ke ClusterTidakTidakRendah
Gunakan Cluster dengan koneksi langsung ENIYaYaSedang

Solusi 1: Akses gerbang masuk melalui cluster IP atau nama Service (direkomendasikan)

Alih-alih menggunakan alamat IP CLB dari dalam kluster, gunakan alamat cluster IP atau nama Service Kubernetes untuk mengakses gerbang masuk:

istio-ingressgateway.istio-system

Pendekatan ini berfungsi di semua node terlepas dari lokasi pod gerbang masuk, mempertahankan alamat IP sumber, dan tidak memerlukan perubahan konfigurasi.

Solusi 2: Atur externalTrafficPolicy ke Cluster

Ubah externalTrafficPolicy dari Local menjadi Cluster. Hal ini menginstruksikan kube-proxy untuk memprogram aturan pengalihan di semua node, bukan hanya pada node yang menjalankan pod gerbang masuk.

Trade-off: Alamat IP sumber tidak dipertahankan. Semua permintaan tampak berasal dari IP node tempat kube-proxy meneruskan lalu lintas.

Perbarui resource kustom IstioGateway:

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

Untuk detail bidang, lihat Bidang CRD untuk gateway.

Solusi 3: Gunakan Cluster dengan koneksi langsung ENI

Jika kluster Anda menggunakan elastic network interfaces (ENIs) Terway atau berjalan dalam mode ENI inklusif, kombinasikan externalTrafficPolicy: Cluster dengan anotasi service.beta.kubernetes.io/backend-type: eni. Pendekatan ini memulihkan pelestarian IP sumber melalui koneksi langsung ENI sekaligus menjaga aksesibilitas IP CLB dari semua node.

Prasyarat: Kluster harus menggunakan Terway sebagai plugin CNI, dengan mode ENI atau mode ENI inklusif diaktifkan.

Perbarui resource kustom IstioGateway:

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

Bidang serviceAnnotations: service.beta.kubernetes.io/backend-type: eni mengarahkan lalu lintas langsung melalui ENI dan mempertahankan alamat IP sumber.

Untuk detail bidang, lihat Bidang CRD untuk gateway.

Referensi