Esporre un gateway di ingresso utilizzando un bilanciatore del carico esterno
Panoramica
Con Cloud Service Mesh puoi eseguire il deployment e gestire i gateway di ingresso nell'ambito del tuo mesh di servizi. Puoi configurare ulteriormente il bilanciamento del carico per il tuo cluster con Cloud Service Mesh utilizzando bilanciatori del carico esterni (bilanciatori del carico fisici o software esterni al cluster) per inviare il traffico al gateway di ingresso.
Questa pagina mostra come configurare un bilanciatore del carico esterno con Cloud Service Mesh. In alternativa, puoi configurare l'ingresso con più configurazioni di backend.
Prima di iniziare
Per completare i passaggi descritti in questo documento, sono necessarie le seguenti risorse:
Un cluster Kubernetes con Cloud Service Mesh installato.
Un bilanciatore del carico esterno che può accedere ai nodi su cui è eseguito il cluster. Configura questo bilanciatore del carico esterno per posizionarsi davanti al gateway di ingresso del cluster utilizzando l'indirizzo IP esterno del bilanciatore del carico.
Configura l'ambiente
Esegui i seguenti comandi da una workstation che può accedere al cluster che intendi utilizzare. Assicurati che lo strumento kubectl
sia configurato per utilizzare il
contesto del cluster specifico del tuo cluster.
Imposta le variabili di ambiente.
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
Imposta
IP address
del bilanciatore del carico esterno.export EXTERNAL_LB_IP_ADDRESS=EXTERNAL_LB_IP_ADDRESS
[\Facoltativo/] Etichetta i nodi del gateway di ingresso. In questo modo, il gateway viene disegnato su nodi specifici del cluster.
kubectl label nodes INGRESSGATEWAY_NODE_IP ${ASM_INGRESSGATEWAY_NODE_LABEL}=
- INGRESSGATEWAY_NODE_IP: sono i nodi del tuo cluster Kubernetes che ospitano il gateway di ingresso. Esegui questo comando
kubectl
per tutti i nodi di ingresso di cui disponi.
- INGRESSGATEWAY_NODE_IP: sono i nodi del tuo cluster Kubernetes che ospitano il gateway di ingresso. Esegui questo comando
Crea il gateway di ingresso
Prima di completare le istruzioni in questa sezione, devi determinare l'implementazione del control plane. Per farlo, segui le istruzioni riportate in Identificare l'implementazione del control plane.
Crea lo spazio dei nomi. Questo spazio dei nomi viene utilizzato per eseguire il deployment del gateway di ingresso.
kubectl create namespace ${ASM_INGRESSGATEWAY_NAMESPACE}
Attiva lo spazio dei nomi per l'iniezione. I passaggi dipendono dall'implementazione del piano di controllo.
Gestito (TD)
- Applica l'etichetta di inserimento predefinita allo spazio dei nomi:
kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio.io/rev- istio-injection=enabled --overwrite
Gestito (Istiod)
Consigliato:esegui il seguente comando per applicare l'etichetta di inserimento predefinita allo spazio dei nomi:
kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio.io/rev- istio-injection=enabled --overwrite
Se sei già un utente con il piano di controllo Istiod gestito: consigliamo di utilizzare l'iniezione predefinita, ma è supportata anche l'iniezione basata su revisione. Segui le istruzioni riportate di seguito:
Esegui il comando seguente per individuare i canali di rilascio disponibili:
kubectl -n istio-system get controlplanerevision
L'output è simile al seguente:
NAME AGE asm-managed-rapid 6d7h
NOTA: se nell'elenco riportato sopra sono presenti due revisioni del piano di controllo, rimuovine una. La presenza di più canali del control plane nel cluster non è supportata.
Nell'output, il valore nella colonna
NAME
è l'etichetta di revisione corrispondente al canale di rilascio disponibile per la versione di Cloud Service Mesh.Applica l'etichetta di revisione allo spazio dei nomi:
kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
All'interno del cluster
Consigliato:esegui il seguente comando per applicare l'etichetta di inserimento predefinita allo spazio dei nomi:
kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio.io/rev- istio-injection=enabled --overwrite
Ti consigliamo di utilizzare l'inserimento predefinito, ma è supportato anche l'inserimento basato sulle revisioni: segui le istruzioni riportate di seguito:
Utilizza il seguente comando per individuare l'etichetta di revisione su
istiod
:kubectl get deploy -n istio-system -l app=istiod -o \ jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
Applica l'etichetta di revisione allo spazio dei nomi. Nel seguente comando,
REVISION_LABEL
è il valore dell'etichetta della revisioneistiod
che hai annotato nel passaggio precedente.kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
Applica il file manifest del gateway di ingresso.
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
Risultato previsto:
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
Esegui la patch del servizio
ingressgateway
con l'indirizzo IP del bilanciatore del carico esterno.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)"
[Facoltativo] Esegui la patch del deployment di
ingressgateway
per l'affinità delle etichette dei nodi del gateway di ingresso.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)"
Configura il bilanciatore del carico esterno
In questa sezione, configuri il bilanciatore del carico esterno in modo che si connetta al gateway in entrata dal cluster.
Recupera le informazioni sulla porta Service
del gateway di ingresso
Ricevi
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}')
Visualizza
NodePorts
.echo HTTP_INGRESS_PORT=${HTTP_INGRESS_PORT} echo HTTPS_INGRESS_PORT=${HTTPS_INGRESS_PORT} echo STATUS_PORT=${STATUS_PORT}
Configura il bilanciatore del carico esterno
Utilizza il NodePorts
visualizzato nel passaggio precedente per configurare la connettività tra il bilanciatore del carico esterno e il gateway di ingresso.
Configura il controllo di integrità nella configurazione del bilanciatore del carico.
hosts: CLUSTER_NODE_IP Protocol: HTTP Port: STATUS_PORT Path: /healthz/ready
CLUSTER_NODE_IP: è l'indirizzo IP dei nodi del cluster Kubernetes che ospita il gateway di ingresso. Questo indirizzo IP deve essere accessibile dal bilanciatore del carico esterno. Potresti dover configurare questa configurazione più volte, una volta per nodo del cluster.
STATUS_PORT: è il
NodePort
tramite il quale è esposta l'API dello stato di salute del gateway di ingresso. Puoi copiare queste informazioni dal passaggio precedente. Il valore è lo stesso per ogni nodo del cluster.
Configura i pool di nodi nel bilanciatore del carico per instradare il traffico
HTTP
eHTTPS
. Utilizza la seguente configurazioneIP:PORT
per il traffico sulla porta 80 (HTTP
) e sulla porta 443 (HTTPS
).80 -> CLUSTER_NODE_IP:HTTP_INGRESS_PORT 443 -> CLUSTER_NODE_IP:HTTPS_INGRESS_PORT
CLUSTER_NODE_IP: è l'indirizzo IP dei nodi del cluster Kubernetes che ospita il gateway di ingresso. Questo indirizzo IP deve essere accessibile dal bilanciatore del carico esterno. Potresti dover configurare questa configurazione più volte, una volta per nodo del cluster.
HTTP_INGRESS_PORT: è il
NodePort
attraverso il quale viene esposto il traffico HTTP del gateway di ingresso. Puoi copiare queste informazioni dal passaggio precedente. Il valore è lo stesso per ogni nodo del cluster.HTTPS_INGRESS_PORT: è il
NodePort
attraverso il quale viene esposto il traffico HTTPS del gateway di ingresso. Puoi copiare queste informazioni dal passaggio precedente. Il valore è lo stesso per ogni nodo del cluster.
Per verificare la configurazione, assicurati che i controlli di integrità sul bilanciatore del carico superino.
Passaggi successivi
- Scopri di più sull'installazione e sull'upgrade dei gateway