Estás viendo la documentación de Anthos Service Mesh 1.7. Consulta la documentación más reciente o selecciona otra versión disponible:

Instala en clústeres de Anthos alojados en AWS

En esta guía, se explica cómo realizar una instalación limpia de la versión de Anthos Service Mesh 1.7.6-asm.1 en clústeres de Anthos alojados en AWS.

Con Anthos Service Mesh, la puerta de enlace de Istio Ingress queda preinstalada. Sin embargo, si prefieres usar un controlador de Ingress, puedes usar Anthos Service Mesh para configurar un recurso de Kubernetes Ingress. En esta guía, se muestra cómo instalar Anthos Service Mesh y, de forma opcional, configurar un recurso Ingress de Kubernetes.

Antes de comenzar

Antes de comenzar la instalación de Anthos Service Mesh, asegúrate de haber realizado las siguientes tareas:

Requisitos

  • Asegúrate de que el clúster de usuario en el que instales Anthos Service Mesh tenga al menos 4 CPU virtuales, 15 GB de memoria y 4 réplicas.

  • Revisa la página sobre cómo asignar nombres a puertos de servicio antes de implementar cargas de trabajo.

  • Asegúrate de que la versión de tu clúster sea un entorno compatible.

Restricciones

Un proyecto de Google Cloud solo puede tener una malla asociada.

Configure su entorno

Necesitas tener las siguientes herramientas en la máquina en la que deseas instalar Anthos Service Mesh. Ten en cuenta que solo puedes instalar Anthos Service Mesh en un clúster de usuario, no en uno de administrador.

  • La herramienta de línea de comandos de curl
  • El SDK de Cloud (la herramienta de línea de comandos de gcloud)

Después de instalar el SDK de Cloud, haz lo siguiente:

  1. Autentica con el SDK de Cloud:

    gcloud auth login
    
  2. Actualiza los componentes:

    gcloud components update
    
  3. Instala kubectl:

    gcloud components install kubectl
    
  4. Si deseas implementar y probar tu instalación con la aplicación de muestra de Boutique en línea, instala kpt:

    gcloud components install kpt
    
  5. Cambia el contexto del clúster de usuario:

    kubectl config use-context CLUSTER_NAME
  6. Otorga permisos de administrador de clúster a tu cuenta de usuario (tu dirección de correo electrónico de acceso de Google Cloud). Estos permisos son obligatorios a fin de crear las reglas de control de acceso basado en funciones (RBAC) necesarias para Anthos Service Mesh:

    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole=cluster-admin \
      --user=USER_ACCOUNT

Descarga el archivo de instalación

  1. Descarga el archivo de instalación de Anthos Service Mesh en el directorio de trabajo actual:

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.6-asm.1-linux-amd64.tar.gz
  2. Descarga el archivo de firma y usa openssl para verificar la firma:

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.6-asm.1-linux-amd64.tar.gz.1.sig
    openssl dgst -verify - -signature istio-1.7.6-asm.1-linux-amd64.tar.gz.1.sig istio-1.7.6-asm.1-linux-amd64.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    El resultado esperado es: Verified OK.

  3. Extrae el contenido del archivo a cualquier ubicación en tu sistema de archivos. Por ejemplo, para extraer el contenido en el directorio de trabajo actual, ingresa este comando:

    tar xzf istio-1.7.6-asm.1-linux-amd64.tar.gz

    El comando crea un directorio de instalación en el directorio de trabajo actual llamado istio-1.7.6-asm.1. El directorio istio-1.7.6-asm.1/bin contiene la herramienta de línea de comandos de istioctl que usas para instalar Anthos Service Mesh.

  4. Asegúrate de estar en el directorio raíz de la instalación de Anthos Service Mesh.

    cd istio-1.7.6-asm.1
  5. Para mayor comodidad, agrega el directorio /bin a tu ruta de acceso (PATH):

    export PATH=$PWD/bin:$PATH

Crea el espacio de nombres istio-system

Crea un espacio de nombres llamado istio-system para los componentes del plano de control:

kubectl create namespace istio-system

Configura el webhook de validación

Cuando instales Anthos Service Mesh, configura una etiqueta de revisión en istiod. Debes configurar la misma revisión en el webhook de validación.

Guarda el siguiente YAML en un archivo llamado istiod-service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: istiod
  namespace: istio-system
  labels:
    istio.io/rev: asm-176-1
    app: istiod
    istio: pilot
    release: istio
spec:
  ports:
    - port: 15010
      name: grpc-xds # plaintext
      protocol: TCP
    - port: 15012
      name: https-dns # mTLS with k8s-signed cert
      protocol: TCP
    - port: 443
      name: https-webhook # validation and injection
      targetPort: 15017
      protocol: TCP
    - port: 15014
      name: http-monitoring # prometheus stats
      protocol: TCP
  selector:
    app: istiod
    istio.io/rev: asm-176-1

Instala Anthos Service Mesh

En esta sección, se explica cómo instalar Anthos Service Mesh en tu clúster de usuario, lo que habilita las funciones predeterminadas admitidas que aparecen en la página Funciones admitidas para el perfil asm-multicloud. Puedes optar por habilitar Ingress para la subred pública o privada.

Pública

  1. Instala Anthos Service Mesh:

    istioctl install \
      --set profile=asm-multicloud \
      --set revision=asm-176-1
    

    El argumento --set revision agrega una etiqueta de revisión con el formato istio.io/rev=asm-176-1 a istiod. El webhook automático de inyector de sidecar usa la etiqueta de revisión para asociar los sidecars insertados con una revisión istiod particular. Para habilitar la inserción automática del sidecar para un espacio de nombres, debes etiquetarlo con una revisión que coincida con la etiqueta en istiod.

  2. Configura el webhook de validación para que pueda encontrar el servicio istiod con la etiqueta de revisión:

    kubectl apply -f istiod-service.yaml
    

    Este comando crea una entrada de servicio que permite que el webhook de validación verifique de manera automática las configuraciones antes de que se apliquen.

Privada

A continuación, agregas la anotación service.beta.kubernetes.io/aws-load-balancer-internal a todos los servicios que crea Anthos Service Mesh. Cuando se encuentra esta anotación, los clústeres de Anthos alojados en AWS crean servicios de Ingress privados.

  1. Guarda el siguiente YAML en un archivo llamado istio-operator-internal-lb.yaml:

    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      components:
        ingressGateways:
        - enabled: true
          k8s:
            serviceAnnotations:
              service.beta.kubernetes.io/aws-load-balancer-internal: "true"
    
  2. Instala Anthos Service Mesh:

    istioctl install \
     --set profile=asm-multicloud \
     --set revision=asm-176-1 \
     -f istio-operator-internal-lb.yaml
    

    El argumento --set revision agrega una etiqueta de revisión con el formato istio.io/rev=asm-176-1 a istiod. El webhook automático de inyector de sidecar usa la etiqueta de revisión para asociar los sidecars insertados con una revisión istiod particular. Para habilitar la inserción automática del sidecar para un espacio de nombres, debes etiquetarlo con una revisión que coincida con la etiqueta en istiod.

  3. Configura el webhook de validación para que pueda encontrar el servicio istiod con la etiqueta de revisión:

    kubectl apply -f istiod-service.yaml
    

    Este comando crea una entrada de servicio que permite que el webhook de validación verifique de manera automática las configuraciones antes de que se apliquen.

Instala sin Prometheus ni Kiali

De forma predeterminada, en Anthos Service Mesh 1.7 y versiones anteriores, Anthos Service Mesh instala Prometheus y Kiali desde sus repositorios de paquetes originales en docker.io y quay.io. Si no deseas instalar estas herramientas ni permitir conexiones a estos repositorios, pasa -set addonComponents.prometheus.enabled=false y --set addonComponents.kiali.enabled=false a istioctl install. Por ejemplo, usa el siguiente comando para excluir Prometheus y Kiali de la instalación de la subred pública.

  istioctl install \
    --set profile=asm-multicloud \
    --set addonComponents.prometheus.enabled=false \
    --set addonComponents.kiali.enabled=false \
    --revision=asm-176-1

Verifica los componentes del plano de control

Verifica que los Pods del plano de control en istio-system estén activos:

kubectl get pod -n istio-system

El resultado esperado es similar al siguiente:

NAME                                      READY   STATUS      RESTARTS   AGE
istio-ingressgateway-74cc894bfd-786rg     1/1     Running     0          7m19s
istiod-78cdbbbdb-d7tps                    1/1     Running     0          7m36s
promsd-576b8db4d6-lqf64                   2/2     Running     1          7m19s

Inserta proxies de sidecar

Anthos Service Mesh usa proxies de sidecar para mejorar la seguridad, confiabilidad y observabilidad de la red. Con Anthos Service Mesh, estas funciones se abstraen del contenedor principal de la aplicación y se implementan en un proxy común fuera del proceso, que se entrega como un contenedor separado en el mismo pod. Para incorporar tus Pods con el proxy de sidecar, debes configurar la inserción automática de proxy de sidecar (inserción automática) mediante el etiquetado de tus espacios de nombres con la misma etiqueta de revisión que configuraste en istiod cuando instalaste Anthos Service Mesh.

  • Debes habilitar la inserción automática en cualquier espacio de nombres con cargas de trabajo que se estaban ejecutando en tu clúster antes de instalar Anthos Service Mesh.

  • Antes de implementar las cargas de trabajo nuevas, asegúrate de configurar la incorporación automática del proxy de sidecar para que Anthos Service Mesh pueda supervisar y asegurar el tráfico.

Para habilitarla, usa este comando:

  1. Usa el siguiente comando para encontrar la etiqueta de revisión en istiod:

    kubectl -n istio-system get pods -l app=istiod --show-labels
    

    El resultado es similar al siguiente:

    NAME                                READY   STATUS    RESTARTS   AGE   LABELS
    istiod-asm-176-1-5788d57586-bljj4   1/1     Running   0          23h   app=istiod,istio.io/rev=asm-176-1,istio=istiod,pod-template-hash=5788d57586
    istiod-asm-176-1-5788d57586-vsklm   1/1     Running   1          23h   app=istiod,istio.io/rev=asm-176-1,istio=istiod,pod-template-hash=5788d57586

    En el resultado, en la columna LABELS, observa el valor de la etiqueta de revisión istiod, que está después del prefijo istio.io/rev=. En este ejemplo, el valor es asm-176-1.

  2. Aplica la etiqueta de revisión y quita la etiqueta istio-injection si existe. En el siguiente comando, NAMESPACE es el nombre del espacio de nombres en el que deseas habilitar la inserción automática y REVISION es la etiqueta de revisión que anotaste en el paso anterior.

    kubectl label namespace NAMESPACE  istio-injection- istio.io/rev=REVISION --overwrite
    

    Puedes ignorar el mensaje "istio-injection not found" en el resultado. Esto significa que el espacio de nombres no tenía la etiqueta istio-injection, que debería aparecer en las nuevas instalaciones de Anthos Service Mesh o en implementaciones nuevas. Debido a que la inserción automática falla si un espacio de nombres tiene tanto la istio-injection como la etiqueta de revisión, todos los comandos kubectl label de la documentación de Anthos Service Mesh incluyen la acción de quitar la etiqueta istio-injection.

  3. Si las cargas de trabajo se estaban ejecutando en tu clúster antes de instalar Anthos Service Mesh, reinicia los Pods para activar la reinserción.

    La forma de reiniciar los pods depende de tu aplicación y del entorno en el que se encuentra el clúster. Por ejemplo, en el entorno de etapa de pruebas, puedes borrar todos los pods, lo que hace que se reinicien. Sin embargo, en tu entorno de producción, es posible que tengas un proceso que implemente una implementación azul-verde para que puedas reiniciar los pods de forma segura y evitar la interrupción del tráfico.

    Puedes usar kubectl para realizar un reinicio progresivo:

    kubectl rollout restart deployment -n NAMESPACE
    
  4. Verifica que tus pods estén configurados para apuntar a la nueva versión de istiod.

    kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
    

Accede a la puerta de enlace de Ingress

Anthos Service Mesh proporciona una puerta de enlace de entrada preconfigurada, istio-ingressgateway, que puedes usar para administrar el tráfico entrante a las aplicaciones que se ejecutan en tu malla de servicios. Para que las aplicaciones sean accesibles desde el exterior del clúster (por ejemplo, desde un navegador), necesitas lo siguiente:

  • Debes obtener la dirección IP externa o el nombre de host y el puerto del balanceador de cargas externo que está configurado para usar istio-ingressgateway.

  • Que la aplicación defina un recurso de puerta de enlace y VirtualService, similar a frontend-gateway.yaml de la aplicación de muestra de Online Boutique.

Para obtener la dirección externa del istio-ingressgateway, sigue estos pasos:

  1. Crea la variable de entorno INGRESS_HOST:

    export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
    
  2. Crea la variable de entorno INGRESS_PORT:

    export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
    
  3. Para probarlo, implementa una aplicación de muestra, como Online Boutique.

  4. Para acceder a la aplicación en tu navegador, usa el valor de $INGRESS_HOST:$INGRESS_PORT en la URL.

Soluciona problemas

Los clústeres de Anthos alojados en AWS requieren etiquetas en las subredes que contienen extremos del balanceador de cargas. Los clústeres de Anthos alojados en AWS etiquetan de forma automática todas las subredes especificadas en el campo spec.Networking.ServiceLoadBalancerSubnetIDs del recurso AWSCluster.

Si deseas agregar subredes adicionales a tu clúster de usuario o si necesitas volver a aplicar etiquetas a las subredes existentes, sigue estos pasos.

  1. Desde tu directorio de anthos-aws, usa anthos-gke para cambiar el contexto a tu servicio administrado.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. Obtén el ID de la VPC de AWS de tu clúster con kubectl y almacénalo como una variable.

     export VPC_ID=$(\
     env HTTP_PROXY=http://localhost:8118 \
     kubectl get awscluster cluster-0 -o jsonpath='{.spec.networking.vpcID}')
    
  3. Comprueba el contenido de las variables mediante echo. La salida es similar a vpc-12345678abcdef0.

    echo $VPC_ID
    
  4. Guarda el ID de tu clúster en una variable de entorno.

    export CLUSTER_ID=$(\
    env HTTP_PROXY=http://localhost:8118 \
    kubectl get awscluster cluster-0 -o jsonpath='{.status.clusterID}')
    

    Puedes verificar la variable con echo:

    echo $CLUSTER_ID
    

    La respuesta incluye el ID de tu clúster.

    gke-12345678
    
  5. De forma predeterminada, los clústeres de Anthos alojados en AWS configuran una VPC con subredes privadas y públicas. Para recuperar el ID de la subred, usa la herramienta de línea de comandos de aws.

    Selecciona una de las siguientes opciones:

    • Público, si deseas exponer Services en tu subred pública.
    • Privado, si deseas exponer Services en tu subred privada.
    • Varias subredes, si deseas exponer Services en varias subredes.

    Público

     export SUBNET_ID=$(aws ec2 describe-subnets \
     --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*public*" \
     --query "Subnets[*].SubnetId" \
     --output text)
    

    El resultado es un objeto que contiene el ID de tu subred. Es similar a subnet-1234abcdefg. Puedes verificar la variable con echo:

    echo $SUBNET_ID
    

    La respuesta incluirá el ID de tu subred.

    subnet-012345678abcdef
    

    Privada

     export SUBNET_ID=$(aws ec2 describe-subnets \
     --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \
     --query "Subnets[*].SubnetId" \
     --output text)
    

    El resultado es un objeto que contiene el ID de tu subred. Es similar a subnet-1234abcdefg. Puedes verificar la variable con echo:

    echo $SUBNET_ID
    

    La respuesta incluirá el ID de tu subred.

    subnet-012345678abcdef
    

    Varias subredes

    Si usas varias subredes para tus AWSNodePools (por ejemplo, si usas varias zonas de disponibilidad), debes etiquetar los ID de tus subredes de forma individual.

    Recupera la lista de ID de subredes mediante aws ec2 describe-subnets.

    Para obtener una lista de todas las subredes públicas, ejecuta el siguiente comando:

    aws ec2 describe-subnets \
     --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*public*" \
     --query "Subnets[*].SubnetId" \
     --output text
    

    Para obtener una lista de todas las subredes privadas, ejecuta el siguiente comando:

    aws ec2 describe-subnets \
     --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \
     --query "Subnets[*].SubnetId" \
     --output text
    

    La respuesta incluirá los ID de las subredes.

    subnet-012345678abcdef
    subnet-abcdef123456789
    subnet-123456789abcdef
    
  6. Etiqueta la subred con el ID de tu clúster. Si tienes varias subredes, selecciona Varias subredes.

    Subred única

    aws ec2 create-tags \
    --resources $SUBNET_ID \
    --tags Key=kubernetes.io/cluster/$CLUSTER_ID,Value=shared
    

    Varias subredes

    Para cada una de tus subredes, ejecuta el siguiente comando:

    aws ec2 create-tags \
    --resources subnet-ids \
    --tags Key=kubernetes.io/cluster/$CLUSTER_ID,Value=shared
    

    Reemplaza subnet-ids por la lista de ID de subredes, separados por espacios. Por ejemplo, subnet-012345678abcdef subnet-abcdef123456789 subnet-123456789abcdef

¿Qué sigue?

Crea una implementación de ejemplo en clústeres de Anthos alojados en AWS.