Expón una puerta de enlace de entrada mediante un balanceador de cargas externo
Descripción general
Con Anthos Service Mesh, puedes implementar y administrar puertas de enlace de entrada como parte de la malla de servicios. Además, puedes configurar el balanceo de cargas de tu clúster con Anthos Service Mesh mediante balanceadores de cargas externos (balanceadores de cargas físicos o de software fuera del clúster) para enviar tráfico a la puerta de enlace de entrada.
En esta página, se muestra cómo configurar un balanceador de cargas externo con Anthos Service Mesh. Como alternativa, puedes configurar la entrada con varios parámetros de configuración de backend.
Antes de comenzar
Para completar los pasos de este documento, necesitas los siguientes recursos:
Un clúster de Kubernetes con Anthos Service Mesh instalado.
Un balanceador de cargas externo que pueda acceder a los nodos en los que se ejecuta tu clúster. Configura este balanceador de cargas externo para que esté frente a la puerta de enlace de entrada de tu clúster a través de
External IP Address
.
Configura tu entorno
Ejecuta los siguientes comandos desde una estación de trabajo que pueda acceder al clúster que deseas usar. Asegúrate de que la herramienta kubectl
esté configurada para usar el contexto específico de tu clúster.
Configura las variables de entorno.
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
Configura la
IP address
específica del balanceador de cargas externo.export EXTERNAL_LB_IP_ADDRESS=EXTERNAL_LB_IP_ADDRESS
[Opcional] Etiqueta los nodos de puerta de enlace de entrada. Esto garantiza que la puerta de enlace se implemente en nodos específicos del clúster.
kubectl label nodes INGRESSGATEWAY_NODE_IP ${ASM_INGRESSGATEWAY_NODE_LABEL}=
- INGRESSGATEWAY_NODE_IP: Son los nodos del clúster de Kubernetes que aloja la puerta de enlace de entrada. Ejecuta este comando
kubectl
para todos los nodos de entrada que tengas.
- INGRESSGATEWAY_NODE_IP: Son los nodos del clúster de Kubernetes que aloja la puerta de enlace de entrada. Ejecuta este comando
Crea la puerta de enlace de entrada
Crea el espacio de nombres. Este espacio de nombres se usará para implementar la puerta de enlace de entrada.
kubectl create namespace ${ASM_INGRESSGATEWAY_NAMESPACE}
Habilita el espacio de nombres para la inserción. Los pasos dependen del tipo de Anthos Service Mesh (administrado o en el clúster).
Administrado
Usa el siguiente comando para ubicar los canales de versiones disponibles:
kubectl -n istio-system get controlplanerevision
El resultado es similar al siguiente:
NAME AGE asm-managed 6d7h asm-managed-rapid 6d7h
En el resultado, el valor en la columna
NAME
es la etiqueta de revisión que corresponde al canal de versiones disponible para la versión de Anthos Service Mesh.Aplica la etiqueta de revisión al espacio de nombres:
kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
En el clúster
Usa el siguiente comando para encontrar la etiqueta de revisión en
istiod
:kubectl get deploy -n istio-system -l app=istiod -o \ jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
Aplica la etiqueta de revisión a los espacios de nombres. En el siguiente comando,
REVISION
es el valor de la etiqueta de revisiónistiod
que anotaste en el paso anterior.kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio-injection- istio.io/rev=REVISION --overwrite
Aplica el archivo de manifiesto de la puerta de enlace de entrada.
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
Resultado esperado:
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
Aplica un parche al servicio
ingressgateway
con la dirección IP del balanceador de cargas externo.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)"
[Opcional] Aplica un parche en la implementación de
ingressgateway
para la afinidad de etiqueta de los nodos de la puerta de enlace de entrada.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 el balanceador de cargas externo
En esta sección, configurarás el balanceador de cargas externo para que se conecte con la puerta de enlace de entrada desde el clúster.
Recupera la información del puerto Service
de la puerta de enlace de entrada
Obtén los
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}')
Muestra los
NodePorts
.echo HTTP_INGRESS_PORT=${HTTP_INGRESS_PORT} echo HTTPS_INGRESS_PORT=${HTTPS_INGRESS_PORT} echo STATUS_PORT=${STATUS_PORT}
Configura el balanceador de cargas externo
Usa el NodePorts
que se mostró en el paso anterior para configurar la conectividad entre el balanceador de cargas externo y la puerta de enlace de entrada.
Configura la verificación de estado en la configuración del balanceador de cargas.
hosts: CLUSTER_NODE_IP Protocol: HTTP Port: STATUS_PORT Path: /healthz/ready
CLUSTER_NODE_IP: Es la dirección IP de los nodos en tu clúster de Kubernetes que aloja la puerta de enlace de entrada. Se debe poder acceder a esta dirección IP desde el balanceador de cargas externo. Es posible que debas establecer esta configuración varias veces, una vez por nodo de clúster.
STATUS_PORT: Es el
NodePort
a través del cual se expone la API de estado de la puerta de enlace de entrada. Puedes copiar esta información del paso anterior. Será la misma para todos los nodos del clúster.
Configura los grupos de nodos en el balanceador de cargas para enrutar el tráfico
HTTP
yHTTPS
. Usa la siguiente configuración deIP:PORT
para el tráfico en el puerto 80 (HTTP
) y el puerto 443 (HTTPS
).80 -> CLUSTER_NODE_IP:HTTP_INGRESS_PORT 443 -> CLUSTER_NODE_IP:HTTPS_INGRESS_PORT
CLUSTER_NODE_IP: Es la dirección IP de los nodos en tu clúster de Kubernetes que aloja la puerta de enlace de entrada. Se debe poder acceder a esta dirección IP desde el balanceador de cargas externo. Es posible que debas establecer esta configuración varias veces, una vez por nodo de clúster.
HTTP_INGRESS_PORT: Es el
NodePort
a través del cual se expone el tráfico HTTP de la puerta de enlace de entrada. Puedes copiar esta información del paso anterior. Será la misma para todos los nodos del clúster.HTTPS_INGRESS_PORT: Es el
NodePort
a través del cual se expone el tráfico HTTPS de la puerta de enlace de entrada. Puedes copiar esta información del paso anterior. Será la misma para todos los nodos del clúster.
Para verificar la configuración, asegúrate de que las verificaciones de estado del balanceador de cargas estén aprobadas.
¿Qué sigue?
- Obtén más información sobre cómo instalar y actualizar puertas de enlace.