Versión 1.15

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Expón una puerta de enlace de entrada mediante un balanceador de cargas externo

Descripción general

Con Anthos Service Mesh, puede implementar y administrar puertas de enlace de entrada como parte de su malla de servicios. Además, puede configurar el balanceo de cargas de su clúster con Anthos Service Mesh mediante el uso de balanceadores de cargas externos (balanceadores 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.

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 puede acceder a los nodos en los que se ejecuta tu clúster. Configurarás este balanceador de cargas externo para que dirija la puerta de enlace de entrada del 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 de kubectl esté configurada para usar el contexto del clúster específico de tu clúster.

  1. 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
    
  2. Configura el IP address del balanceador de cargas externo.

    export EXTERNAL_LB_IP_ADDRESS=EXTERNAL_LB_IP_ADDRESS
    
  3. Etiqueta los nodos de la puerta de enlace de entrada (opcional). 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 en el clúster de Kubernetes que aloja la puerta de enlace de entrada. Ejecuta este comando kubectl para la cantidad de nodos de entrada que tengas.

Crea la puerta de enlace de entrada

  1. 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}
    
  2. 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

    1. Usa el siguiente comando para ubicar los canales de versiones disponibles:

      kubectl -n istio-system get controlplanerevision
      

      El resultado es similar a este:

      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.

    2. 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

    1. 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"}'
      
    2. Aplica la etiqueta de revisión a los espacios de nombres. En el siguiente comando, REVISION es el valor de la etiqueta de revisión istiod que anotaste en el paso anterior.

      kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \
        istio-injection- istio.io/rev=REVISION --overwrite
      
  3. 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
    
  4. 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)"
    
  5. Aplica un parche a la implementación de ingressgateway para la afinidad de etiqueta de nodos de la puerta de enlace de entrada (opcional).

    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á el balanceador de cargas externo para conectarse con la puerta de enlace de entrada desde el clúster.

Recuperar la información del puerto Service de la puerta de enlace de entrada

  1. Obtén la 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}')
    
  2. Muestra 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 muestra en el paso anterior para configurar la conectividad entre el balanceador de cargas externo y la puerta de enlace de entrada.

  1. Establece 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á lo mismo para cada nodo del clúster.

  2. Configura grupos de nodos en el balanceador de cargas para enrutar el tráfico HTTP y HTTPS. Usa la siguiente configuración de IP: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á lo mismo para cada nodo 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á lo mismo para cada nodo 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?