Mengekspos gateway masuk menggunakan load balancer eksternal
Ringkasan
Dengan Cloud Service Mesh, Anda dapat men-deploy dan mengelola gateway masuk sebagai bagian dari mesh layanan Anda. Anda dapat mengonfigurasi load balancing untuk cluster lebih lanjut dengan Cloud Service Mesh menggunakan load balancer eksternal (fisik atau load balancer software di luar cluster) untuk mengirim traffic ke traffic masuk gateway.
Halaman ini menunjukkan cara mengonfigurasi load balancer eksternal dengan Cloud Service Mesh. Atau, Anda dapat siapkan traffic masuk dengan beberapa konfigurasi backend.
Sebelum memulai
Untuk menyelesaikan langkah-langkah dalam dokumen ini, Anda memerlukan referensi berikut:
Cluster Kubernetes dengan Cloud Service Mesh terinstal.
Load balancer eksternal yang dapat mengakses node tempat cluster Anda berada sedang berjalan. Anda mengonfigurasi load balancer eksternal ini untuk menangani traffic masuk di gateway cluster Anda menggunakan alamat IP eksternal load balancer.
Menyiapkan lingkungan Anda
Jalankan perintah berikut dari workstation yang dapat mengakses cluster yang Anda
ingin Anda gunakan. Pastikan bahwa alat kubectl
dikonfigurasikan untuk menggunakan
mengelompokkan konteks khusus untuk cluster Anda.
Menetapkan 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-ingressgateway
Tetapkan
IP address
load balancer eksternal.export EXTERNAL_LB_IP_ADDRESS=EXTERNAL_LB_IP_ADDRESS
[\Optional/] Beri label node gateway masuk. Hal ini memastikan bahwa gateway di-deploy ke node tertentu dalam cluster.
kubectl label nodes INGRESSGATEWAY_NODE_IP ${ASM_INGRESSGATEWAY_NODE_LABEL}=
- INGRESSGATEWAY_NODE_IP: adalah node di Kubernetes Anda
yang menghosting gateway masuknya. Jalankan perintah
kubectl
ini sebagai jumlah node masuk yang Anda miliki.
- INGRESSGATEWAY_NODE_IP: adalah node di Kubernetes Anda
yang menghosting gateway masuknya. Jalankan perintah
Membuat gateway masuk
Sebelum menyelesaikan petunjuk di bagian ini, Anda harus menentukan penerapan bidang kontrol. Gunakan petunjuk di Identifikasi penerapan bidang kontrol untuk melakukannya.
Buat namespace. Namespace ini digunakan untuk men-deploy traffic masuk gateway.
kubectl create namespace ${ASM_INGRESSGATEWAY_NAMESPACE}
Mengaktifkan namespace untuk injeksi. Langkah-langkah bergantung pada penerapan bidang kontrol Anda.
Terkelola (TD)
- Terapkan label injeksi default ke namespace:
kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio.io/rev- istio-injection=enabled --overwrite
Terkelola (Istiod)
Direkomendasikan: Jalankan perintah berikut untuk menerapkan label injeksi default ke namespace:
kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio.io/rev- istio-injection=enabled --overwrite
Jika Anda sudah menjadi pengguna dengan bidang kontrol Istio Terkelola: Kami menyarankan agar Anda menggunakan injeksi default, tetapi injeksi berbasis revisi didukung. Gunakan petunjuk berikut:
Jalankan perintah berikut untuk menemukan saluran rilis yang tersedia:
kubectl -n istio-system get controlplanerevision
Outputnya mirip dengan hal berikut ini:
NAME AGE asm-managed-rapid 6d7h
CATATAN: Jika dua revisi bidang kontrol muncul dalam daftar di atas, hapus salah satu. Memiliki beberapa saluran bidang kontrol dalam cluster tidak didukung.
Pada output, nilai pada kolom
NAME
adalah 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 --overwrite
Sebaiknya gunakan injeksi default, tetapi injeksi 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 ini,
REVISION_LABEL
adalah nilai revisiistiod
label yang Anda catat pada langkah sebelumnya.kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
Terapkan file manifes gateway masuk.
kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} apply --filename https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-service-mesh-samples/main/docs/ingress-gateway-external-lb/ingress-gateway.yaml
Output 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 created
Tambahkan patch layanan
ingressgateway
dengan 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] Menambahkan patch deployment
ingressgateway
untuk gateway masuk afinitas label node.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 masuknya 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}')
Menampilkan
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 masuk.
Mengonfigurasi health check di konfigurasi load balancer Anda.
hosts: CLUSTER_NODE_IP Protocol: HTTP Port: STATUS_PORT Path: /healthz/ready
CLUSTER_NODE_IP: adalah alamat IP node di Cluster Kubernetes yang menghosting gateway masuk. Alamat IP ini harus dapat dijangkau dari load balancer eksternal. Anda mungkin harus menyiapkan beberapa kali, sekali per node cluster.
STATUS_PORT: adalah
NodePort
yang digunakan untuk traffic masuk API status kesehatan gateway terekspos. Anda dapat menyalin informasi ini dari langkah sebelumnya. Nilainya sama untuk setiap node dalam cluster.
Mengonfigurasi node pool di load balancer untuk merutekan
HTTP
danHTTPS
kemacetan. Gunakan konfigurasiIP:PORT
berikut untuk traffic di port 80 (HTTP
) dan port 443 (HTTPS
).80 -> CLUSTER_NODE_IP:HTTP_INGRESS_PORT 443 -> CLUSTER_NODE_IP:HTTPS_INGRESS_PORT
CLUSTER_NODE_IP: adalah alamat IP node di Cluster Kubernetes yang menghosting gateway masuk. Alamat IP ini harus dapat dijangkau dari load balancer eksternal. Anda mungkin harus menyiapkan beberapa kali, sekali per node cluster.
HTTP_INGRESS_PORT: adalah
NodePort
yang digunakan traffic HTTP gateway masuk terekspos. Anda dapat menyalin informasi ini dari langkah sebelumnya. Nilainya sama untuk setiap node dalam cluster.HTTPS_INGRESS_PORT: adalah
NodePort
yang digunakan traffic HTTPS gateway masuk terekspos. Anda dapat menyalin informasi ini dari langkah sebelumnya. Nilainya sama untuk setiap node dalam cluster.
Untuk memverifikasi penyiapan, pastikan health check pada load balancer Anda lulus.
Langkah selanjutnya
- Baca selengkapnya tentang Menginstal dan mengupgrade gateway