Esponi un gateway in entrata utilizzando un bilanciatore del carico esterno
Panoramica
Con Cloud Service Mesh puoi eseguire il deployment e gestire i gateway in entrata nell'ambito del mesh di servizi. Puoi configurare ulteriormente il bilanciamento del carico per il tuo cluster con Cloud Service Mesh utilizzando bilanciatori del carico esterni (fisici o software al di fuori del cluster) per inviare traffico al gateway in entrata.
Questa pagina mostra come configurare un bilanciatore del carico esterno con Cloud Service Mesh. In alternativa, puoi configurare il traffico in entrata con più configurazioni di backend.
Prima di iniziare
Per completare i passaggi descritti in questo documento, hai bisogno delle seguenti risorse:
Un cluster Kubernetes con Cloud Service Mesh installato.
Un bilanciatore del carico esterno che può accedere ai nodi in cui è in esecuzione il cluster. Configura questo bilanciatore del carico esterno in modo che si trovi davanti al gateway in entrata 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 per il 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-ingressgatewayImposta
IP addressdel bilanciatore del carico esterno.export EXTERNAL_LB_IP_ADDRESS=EXTERNAL_LB_IP_ADDRESS(Facoltativo) Etichetta i nodi del gateway in entrata. In questo modo, il deployment del gateway viene eseguito su nodi specifici del cluster.
kubectl label nodes INGRESSGATEWAY_NODE_IP ${ASM_INGRESSGATEWAY_NODE_LABEL}=- INGRESSGATEWAY_NODE_IP: indica il nodo o i nodi del cluster Kubernetes che ospitano il gateway in entrata. Esegui questo comando
kubectlper tutti i tuoi nodi in entrata.
- INGRESSGATEWAY_NODE_IP: indica il nodo o i nodi del cluster Kubernetes che ospitano il gateway in entrata. Esegui questo comando
Crea il gateway in entrata
Prima di completare le istruzioni in questa sezione, devi determinare l'implementazione del control plane. Per farlo, segui le istruzioni riportate in Identifica l'implementazione del control plane.
Crea lo spazio dei nomi. Questo spazio dei nomi viene utilizzato per eseguire il deployment del gateway in entrata.
kubectl create namespace ${ASM_INGRESSGATEWAY_NAMESPACE}
Abilita lo spazio dei nomi per l'inserimento. I passaggi dipendono dall'implementazione del control plane.
Gestito (TD)
- Applica l'etichetta di inserimento predefinita allo spazio dei nomi:
kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio.io/rev- istio-injection=enabled --overwriteGestito (Istiod)
Consigliato: esegui questo comando per applicare l'etichetta di inserimento predefinita allo spazio dei nomi:
kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio.io/rev- istio-injection=enabled --overwriteSe sei un utente esistente con il control plane Istiod gestito: ti consigliamo di utilizzare l'inserimento predefinito, ma è supportato anche l'inserimento basato sulla revisione. Segui queste istruzioni:
Esegui questo comando per individuare i canali di rilascio disponibili:
kubectl -n istio-system get controlplanerevisionL'output è simile al seguente:
NAME AGE asm-managed-rapid 6d7hNOTA: se nell'elenco precedente sono presenti due revisioni del control plane, rimuovine una. L'utilizzo di più canali del control plane nel cluster non è supportato.
Nell'output, il valore nella colonna
NAMEè l'etichetta della revisione che corrisponde 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
Interno al cluster
Consigliato: esegui questo comando per applicare l'etichetta di inserimento predefinita allo spazio dei nomi:
kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio.io/rev- istio-injection=enabled --overwriteTi consigliamo di utilizzare l'inserimento predefinito, ma è supportato anche l'inserimento basato sulla revisione: Segui queste istruzioni:
Utilizza il comando seguente per individuare l'etichetta della 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 comando seguente,
REVISION_LABELè il valore dell'etichetta di revisioneistiodche 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 in entrata.
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 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 createdApplica una patch al servizio
ingressgatewaycon 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) Applica una patch al deployment di
ingressgatewayper l'affinità delle etichette dei nodi del gateway in entrata.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, configurerai il bilanciatore del carico esterno in modo che si connetta al gateway in entrata dal cluster.
Recupera le informazioni sulla porta Service del gateway in entrata
Recupera la risorsa
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 la risorsa
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 la risorsa NodePorts visualizzata nel passaggio precedente per configurare la connettività tra il bilanciatore del carico esterno e il gateway in entrata.
Configura il controllo di integrità nella configurazione del bilanciatore del carico.
hosts: CLUSTER_NODE_IP Protocol: HTTP Port: STATUS_PORT Path: /healthz/readyCLUSTER_NODE_IP: è l'indirizzo IP dei nodi del cluster Kubernetes che ospita il gateway in entrata. Questo indirizzo IP deve essere raggiungibile dal bilanciatore del carico esterno. Potresti dover impostare questa configurazione più volte, una per ogni nodo del cluster.
STATUS_PORT: è la risorsa
NodePorttramite cui viene esposta l'API dello stato di integrità del gateway in entrata. Puoi copiare queste informazioni dal passaggio precedente. Il valore è lo stesso per ogni nodo del cluster.
Configura i node pool nel bilanciatore del carico per il routing del traffico
HTTPeHTTPS. Utilizza la configurazioneIP:PORTseguente 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_PORTCLUSTER_NODE_IP: è l'indirizzo IP dei nodi del cluster Kubernetes che ospita il gateway in entrata. Questo indirizzo IP deve essere raggiungibile dal bilanciatore del carico esterno. Potresti dover impostare questa configurazione più volte, una per ogni nodo del cluster.
HTTP_INGRESS_PORT: è la risorsa
NodePorttramite cui viene esposto il traffico HTTP del gateway in entrata. Puoi copiare queste informazioni dal passaggio precedente. Il valore è lo stesso per ogni nodo del cluster.HTTPS_INGRESS_PORT: è la risorsa
NodePorttramite cui viene esposto il traffico HTTPS del gateway in entrata. 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 vengano superati.
Passaggi successivi
- Scopri di più su installazione e upgrade dei gateway