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.
CatatanKami merekomendasikan agar Anda menggunakan solusi ini.
Jika Anda tidak memerlukan alamat IP sumber, gunakan solusi berikut:
Ubah nilai parameter
externalTrafficPolicydari gateway masuk menjadiCluster. 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
externalTrafficPolicydari gateway masuk menjadiClusterdan tambahkan anotasi, sepertiserviceAnnotations: 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