Mengekspos gateway ingress menggunakan load balancer eksternal
Ringkasan
Dengan Cloud Service Mesh, Anda dapat men-deploy dan mengelola gateway ingress sebagai bagian dari mesh layanan. Anda dapat mengonfigurasi lebih lanjut load balancing untuk cluster dengan Cloud Service Mesh menggunakan load balancer eksternal (load balancer fisik atau software di luar cluster) untuk mengirim traffic ke gateway ingress.
Halaman ini menunjukkan cara mengonfigurasi load balancer eksternal dengan Cloud Service Mesh. Atau, Anda dapat menyiapkan ingress dengan beberapa konfigurasi backend.
Sebelum memulai
Untuk menyelesaikan langkah-langkah dalam dokumen ini, Anda memerlukan resource berikut:
Cluster Kubernetes dengan Cloud Service Mesh terinstal.
Load balancer eksternal yang dapat mengakses node tempat cluster Anda berjalan. Anda mengonfigurasi load balancer eksternal ini untuk berada di depan gateway ingress cluster menggunakan alamat IP eksternal load balancer.
Menyiapkan lingkungan Anda
Jalankan perintah berikut dari workstation yang dapat mengakses cluster yang ingin Anda gunakan. Pastikan alat kubectl dikonfigurasi untuk menggunakan konteks cluster yang khusus untuk cluster Anda.
Tetapkan variabel lingkungan.
export ASM_INGRESSGATEWAY_NAMESPACE=asm-ingressgateway export ASM_INGRESSGATEWAY_DEPLOYMENT_NAME=asm-ingressgateway export ASM_INGRESSGATEWAY_SERVICE_NAME=asm-ingressgateway export ASM_INGRESSGATEWAY_NODE_LABEL=asm-ingressgatewayTetapkan
IP addressload balancer eksternal.export EXTERNAL_LB_IP_ADDRESS=EXTERNAL_LB_IP_ADDRESS[\Optional/] Beri label pada node gateway masuk. Tindakan ini memastikan bahwa gateway di-deploy ke node tertentu di cluster.
kubectl label nodes INGRESSGATEWAY_NODE_IP ${ASM_INGRESSGATEWAY_NODE_LABEL}=- INGRESSGATEWAY_NODE_IP: adalah node di cluster Kubernetes yang menghosting gateway ingress. Jalankan perintah
kubectlini untuk sebanyak mungkin node ingress yang Anda miliki.
- INGRESSGATEWAY_NODE_IP: adalah node di cluster Kubernetes yang menghosting gateway ingress. Jalankan perintah
Buat gateway masuk
Sebelum menyelesaikan petunjuk di bagian ini, Anda harus menentukan penerapan bidang kontrol. Gunakan petunjuk di Mengidentifikasi penerapan bidang kontrol untuk melakukannya.
Buat namespace. Namespace ini digunakan untuk men-deploy gateway ingress.
kubectl create namespace ${ASM_INGRESSGATEWAY_NAMESPACE}
Aktifkan namespace untuk injeksi. Langkah-langkahnya bergantung pada implementasi bidang kontrol Anda.
Terkelola (TD)
- Terapkan label injeksi default ke namespace:
kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio.io/rev- istio-injection=enabled --overwriteDikelola (Istiod)
Direkomendasikan: Jalankan perintah berikut untuk menerapkan label injeksi default ke namespace:
kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio.io/rev- istio-injection=enabled --overwriteJika Anda adalah pengguna lama dengan Managed Istiod control plane: Sebaiknya gunakan injeksi default, tetapi injeksi berbasis revisi didukung. Gunakan petunjuk berikut:
Jalankan perintah berikut untuk menemukan saluran rilis yang tersedia:
kubectl -n istio-system get controlplanerevisionOutputnya mirip dengan hal berikut ini:
NAME AGE asm-managed-rapid 6d7hCATATAN: Jika dua revisi bidang kontrol muncul dalam daftar di atas, hapus salah satunya. Memiliki beberapa saluran bidang kontrol di cluster tidak didukung.
Dalam output, nilai di kolom
NAMEadalah label revisi yang sesuai dengan saluran rilis yang tersedia untuk versi Cloud Service Mesh.Terapkan label revisi ke namespace:
kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
Dalam cluster
Direkomendasikan: Jalankan perintah berikut untuk menerapkan label injeksi default ke namespace:
kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio.io/rev- istio-injection=enabled --overwriteSebaiknya gunakan penyisipan default, tetapi penyisipan berbasis revisi didukung: Gunakan petunjuk berikut:
Gunakan perintah berikut untuk menemukan label revisi di
istiod:kubectl get deploy -n istio-system -l app=istiod -o \ jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'Terapkan label revisi ke namespace. Dalam perintah berikut,
REVISION_LABELadalah nilai label revisiistiodyang Anda catat di langkah sebelumnya.kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
Terapkan file manifes gateway ingress.
kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} apply --filename https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-service-mesh-samples/main/docs/ingress-gateway-external-lb/ingress-gateway.yamlOutput yang diharapkan:
serviceaccount/asm-ingressgateway created role.rbac.authorization.k8s.io/asm-ingressgateway created rolebinding.rbac.authorization.k8s.io/asm-ingressgateway created deployment.apps/asm-ingressgateway created service/asm-ingressgateway created poddisruptionbudget.policy/asm-ingressgateway created horizontalpodautoscaler.autoscaling/asm-ingressgateway createdPatch layanan
ingressgatewaydengan alamat IP load balancer eksternal.cat <<EOF > asm-external-ip-patch.yaml spec: externalIPs: - ${EXTERNAL_LB_IP_ADDRESS} loadBalancerIP: ${EXTERNAL_LB_IP_ADDRESS} EOF kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} patch service/${ASM_INGRESSGATEWAY_SERVICE_NAME} --patch "$(cat asm-external-ip-patch.yaml)"[Opsional] Beri patch pada deployment
ingressgatewayuntuk afinitas label node gateway traffic masuk.cat <<EOF > asm-ingress-node-label-patch.yaml spec: template: spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: ${ASM_INGRESSGATEWAY_NODE_LABEL} operator: Exists EOF kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} patch deployment/${ASM_INGRESSGATEWAY_DEPLOYMENT_NAME} --patch "$(cat asm-ingress-node-label-patch.yaml)"
Menyiapkan load balancer eksternal
Di bagian ini, Anda akan mengonfigurasi load balancer eksternal untuk terhubung dengan gateway traffic masuk dari cluster.
Mengambil informasi port Service gateway masuk
Dapatkan
NodePorts.export HTTP_INGRESS_PORT=$(kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} get service/${ASM_INGRESSGATEWAY_SERVICE_NAME} --output jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}') export HTTPS_INGRESS_PORT=$(kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} get service/${ASM_INGRESSGATEWAY_SERVICE_NAME} --output jsonpath='{.spec.ports[?(@.name=="https")].nodePort}') export STATUS_PORT=$(kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} get service/${ASM_INGRESSGATEWAY_SERVICE_NAME} --output jsonpath='{.spec.ports[?(@.name=="status-port")].nodePort}')Tampilkan
NodePorts.echo HTTP_INGRESS_PORT=${HTTP_INGRESS_PORT} echo HTTPS_INGRESS_PORT=${HTTPS_INGRESS_PORT} echo STATUS_PORT=${STATUS_PORT}
Mengonfigurasi load balancer eksternal
Gunakan NodePorts yang ditampilkan pada langkah sebelumnya untuk mengonfigurasi konektivitas antara load balancer eksternal dan gateway traffic masuk.
Konfigurasi health check di konfigurasi load balancer Anda.
hosts: CLUSTER_NODE_IP Protocol: HTTP Port: STATUS_PORT Path: /healthz/readyCLUSTER_NODE_IP: adalah alamat IP node di cluster Kubernetes yang menghosting gateway ingress. Alamat IP ini harus dapat dijangkau dari load balancer eksternal Anda. Anda mungkin harus menyiapkan konfigurasi ini beberapa kali, sekali per node cluster.
STATUS_PORT: adalah
NodePortyang digunakan untuk mengekspos API status kesehatan gateway ingress. Anda dapat menyalin informasi ini dari langkah sebelumnya. Nilainya sama untuk setiap node dalam cluster.
Konfigurasi node pool di load balancer Anda untuk merutekan traffic
HTTPdanHTTPS. Gunakan konfigurasiIP:PORTberikut untuk traffic di port 80 (HTTP) dan port 443 (HTTPS).80 -> CLUSTER_NODE_IP:HTTP_INGRESS_PORT 443 -> CLUSTER_NODE_IP:HTTPS_INGRESS_PORTCLUSTER_NODE_IP: adalah alamat IP node di cluster Kubernetes yang menghosting gateway ingress. Alamat IP ini harus dapat dijangkau dari load balancer eksternal Anda. Anda mungkin harus menyiapkan konfigurasi ini beberapa kali, sekali per node cluster.
HTTP_INGRESS_PORT: adalah
NodePortyang digunakan untuk mengekspos traffic HTTP gateway ingress. Anda dapat menyalin informasi ini dari langkah sebelumnya. Nilainya sama untuk setiap node dalam cluster.HTTPS_INGRESS_PORT: adalah
NodePortyang digunakan untuk mengekspos traffic HTTPS gateway ingress. Anda dapat menyalin informasi ini dari langkah sebelumnya. Nilainya sama untuk setiap node dalam cluster.
Untuk memverifikasi penyiapan Anda, pastikan health check di load balancer Anda berhasil.
Langkah berikutnya
- Baca selengkapnya tentang Menginstal dan mengupgrade gateway