Instala Anthos Service Mesh de forma local con HSM y Vault

En esta guía, se explica cómo instalar Anthos Service Mesh en GKE en VMware existente y usar Thales Luna HSM 7+ y Hashicorp Vault para generar de forma segura la clave de firma de la CA de Istiod y protegerla.

Si tienes instalada una versión anterior de Anthos Service Mesh, consulta Actualiza Anthos Service Mesh de GKE en VMware. Esta instalación habilita las funciones admitidas en el clúster.

Antes de comenzar

Revisa los siguientes requisitos antes de comenzar la configuración.

Requisitos

  • Debes tener una suscripción a Anthos. Como alternativa, la opción de facturación prepaga está disponible solo para GKE Enterprise en Google Cloud. Para obtener más información, consulta la guía de precios de GKE Enterprise.

  • Debes comunicarte con el equipo de asistencia a fin de que te otorguen los permisos para acceder a las imágenes. El equipo de asistencia al cliente también te brindará más ayuda.

  • Verifica que el clúster en el que instales Anthos Service Mesh tenga al menos 4 CPU virtuales, 15 GB de memoria y 4 nodos.

  • Debes asignar un nombre a los puertos de servicio con la siguiente sintaxis: name: protocol[-suffix], en la que los corchetes indican un sufijo opcional que debe comenzar con un guion. Para obtener más información, consulta Asigna nombres a puertos de servicio.

  • Verifica que la versión del clúster se enumere en los entornos compatibles. Para verificar la versión del clúster, puedes usar la herramienta de línea de comandos de gkectl. Si no tienes gkectl instalado, consulta Descargas de GKE On-Prem.

    gkectl version
  • Debes tener Thales Luna HSM 7+ en tu infraestructura. HSM debe tener configurado el servicio de red y se debe poder acceder a él desde el clúster de Anthos Service Mesh.

  • Debes tener servidores Hashicorp Vault en tu infraestructura a fin de almacenar las credenciales para acceder a HSM. Se debe poder acceder a los servidores de Vault desde el clúster de Anthos Service Mesh a través de la red.

Configure su entorno

Instala las siguientes herramientas en la máquina desde la que controlas el proceso de instalación de Anthos Service Mesh.

Después de instalar las herramientas de requisitos previos, sigue estos pasos:

  1. Autentica con Google Cloud CLI

    gcloud auth login
    
  2. Actualiza los componentes:

    gcloud components update
    
  3. Instala kubectl:

    gcloud components install kubectl
    
  4. A fin de implementar y probar tu instalación con la aplicación de muestra de Online Boutique, instala kpt:

    gcloud components install kpt
    
  5. Cambia el contexto al clúster de usuario (si es necesario):

    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

Implementa dependencias

  • Implementa Thales Luna HSM 7+ en tu infraestructura para administrar de manera segura las claves de firma de CA de Istio. Asegúrate de que HSM tenga un servicio de red y conectividad con el clúster de Anthos Service Mesh.
  • Implementa servidores de Hashicorp Vault en tu infraestructura a fin de almacenar las credenciales para acceder a HSM. Asegúrate de que los servidores de Vault tengan conectividad de red con el clúster de Anthos Service Mesh.
  • Cuenta con una estación de trabajo que tenga acceso al servidor de Vault, HSM y al clúster de Kubernetes en el que instalas Anthos Service Mesh.

Configura el módulo de seguridad de hardware (HSM)

En esta sección, se muestran los pasos para configurar el módulo de seguridad de hardware (HSM) y generar claves de encriptación.

Aprovisiona las credenciales y la ranura de HSM

Sigue la guía de instalación de HSM para realizar los siguientes pasos.

  1. Configura HSM como un HSM de red.

  2. Aprovisiona archivos PEM para conexiones mTLS con HSM, incluidos el archivo de claves del cliente, el archivo del certificado de cliente y el archivo del certificado del servidor.

  3. Aprovisiona una ranura HSM para Anthos Service Mesh y registra la etiqueta y el PIN de la ranura.

Genera una clave de encriptación de claves de HSM (KEK)

  1. En la máquina con acceso a HSM, descarga la herramienta HSM (disponible solo para Linux amd-64).

    gsutil cp gs://artifacts.thalescpl-io-k8s-kms-plugin.appspot.com/binary/k8s-kms-plugin .
  2. Configura las variables de entorno antes de ejecutar la herramienta HSM como un servidor local, el cual se conecta a HSM y entrega en el socket de dominio Unix (UDS) local.

    export P11_TOKEN=HSM slot label
    export ChrystokiConfigurationPath=path to the Thales HSM Chrystoki configuration file
    export P11_LIB=path to the libCryptoki2.so file for accessing the Thales HSM
    export P11_PIN_FILE=path to the file that stores the HSM slot PIN
    export SOCKET=/tmp/.hsm-sock
    ./k8s-kms-plugin serve &

    Espera un resultado similar al siguiente:

    The token has been initialized and is reassigned to slot 412789065
    INFO Loaded P11 PIN from file: /home/hsm/hsm-credential/pin  line="cmd/serve.go:93"
    INFO KMS Plugin Listening on : /var/.hsm-sock  line="cmd/serve.go:119"
    INFO Serving on socket: /tmp/.hsm-sock  line="cmd/serve.go:198"
  3. Si no tienes una clave de encriptación de claves (KEK) en HSM, sigue estos pasos para generar una. Usa k8s-kms-plugin como cliente para comunicarte con el servidor de herramientas de HSM. Si deseas especificar explícitamente un ID de KEK, puedes pasar la marca --kek-id en el comando. De lo contrario, se generará automáticamente un ID de KEK aleatorio.

    ./k8s-kms-plugin generate-kek --kek-id KEK ID

    Registra el ID de KEK. Lo usarás en los siguientes pasos.

  4. HSM usa el certificado raíz importado para verificar el certificado de CA firmado de Istiod. Puedes seguir este paso para importar el certificado raíz a HSM. Usa k8s-kms-plugin como cliente para comunicarse con el servidor de herramientas de HSM. Importa el certificado raíz con el siguiente comando.

    ./k8s-kms-plugin import-ca -f root cert PEM file

Configura Kubernetes para la autenticación de Vault

  1. En el clúster de Kubernetes, crea una cuenta de servicio específica y una política de RBAC para que Vault llame a la API de TokenReview. Crea un espacio de nombres dedicado para este propósito.

  2. Crea la cuenta de servicio predeterminada en el espacio de nombres vault, establece los permisos y extrae el token web JSON (JWT) asociado para que el servidor de Vault llame a la API de TokenReview de Kubernetes. Nota: Puedes usar cualquier cuenta de servicio de Kubernetes y espacios de nombres si tienen permisos suficientes.

  3. Configura tu sufijo del clúster para el clúster que deseas configurar. Usa un directorio dedicado para la configuración.

    export CLUSTER_SUFFIX="c1"
    mkdir ${CLUSTER_SUFFIX}
    cd ${CLUSTER_SUFFIX}
    
  4. Cambia al clúster que deseas administrar y crea el espacio de nombres vault. kubectl crea la cuenta de servicio predeterminada de forma automática.

    kubectl create ns vault
    
  5. Para otorgar permisos, vincula la cuenta de servicio default.vault a la función auth-delegator.

    kubectl apply -f -<< EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
     name: role-tokenreview-binding
     namespace: vault
    roleRef:
     apiGroup: rbac.authorization.k8s.io
     kind: ClusterRole
     name: system:auth-delegator
    subjects:
     - kind: ServiceAccount
       name: default
       namespace: vault
    EOF
    
  6. Crea un secreto para guardar la credencial del token.

    VAULT_SA_SECRET=default-token
    kubectl apply -n vault -f - << EOF
    apiVersion: v1
    kind: Secret
    metadata:
     name: "${VAULT_SA_SECRET}"
     annotations:
       kubernetes.io/service-account.name: default
    type: kubernetes.io/service-account-token
    EOF
    
  7. Obtén el JWT de la cuenta de servicio default.vault.

    VAULT_SA_JWT_TOKEN=$(kubectl get -n vault secret $VAULT_SA_SECRET -o jsonpath="{.data.token}" | base64 --decode)
    echo $VAULT_SA_JWT_TOKEN > ${CLUSTER_SUFFIX}-tokenreview_jwt
    cat ${CLUSTER_SUFFIX}-tokenreview_jwt
    
  8. Recupera la dirección y el certificado de CA del servidor de la API de Kubernetes. Más adelante, configura el servidor de Vault para que llame al servidor de la API de Kubernetes.

  9. Obtén los valores de IP:Port públicos de Kubernetes.

    K8S_ADDR=$(kubectl config  view -o jsonpath="{.clusters[?(@.name == '$(kubectl config current-context)')].cluster.server}")
    echo $K8S_ADDR > ${CLUSTER_SUFFIX}-k8s_addr
    cat ${CLUSTER_SUFFIX}-k8s_addr
    
  10. Obtén el certificado para autenticar el servidor de la API de Kubernetes.

    VAULT_SA_CA_CRT=$(kubectl get -n vault secret $VAULT_SA_SECRET -o jsonpath="{.data['ca\.crt']}" | base64 --decode)
    echo $VAULT_SA_CA_CRT > "${CLUSTER_SUFFIX}-k8s_cert"
    cat "${CLUSTER_SUFFIX}-k8s_cert"
    
  11. Convierte el archivo de certificado en el formato de archivo PEM y valídalo.

    sed -i 's/ CERTIFICATE/CERTIFICATE/g' ${CLUSTER_SUFFIX}-k8s_cert
    sed -i 's/ /\n/g' ${CLUSTER_SUFFIX}-k8s_cert
    sed -i 's/CERTIFICATE/ CERTIFICATE/g' ${CLUSTER_SUFFIX}-k8s_cert
    
  12. Verifica que el certificado sea válido.

    openssl x509 -in ${CLUSTER_SUFFIX}-k8s_cert -noout -text
    
  13. Regresa al directorio anterior.

    cd ..
    

Ahora usa los tres archivos del directorio del clúster para configurar Vault en el siguiente paso.

Configura Vault para almacenar credenciales de HSM

Cuando el servidor de Vault entregue tráfico TLS con un certificado válido, configura el PKI de Vault y configura la autenticación de Kubernetes. A continuación, se muestra un ejemplo para configurar una CA raíz única y una CA intermedia por clúster.

  1. Accede a Vault con permisos de administrador.

    vault login
    
  2. Almacena el secreto para HSM.

    SECRET_PATH=asm-$CLUSTER_SUFFIX
    vault secrets enable -path=$SECRET_PATH  kv
    vault secrets tune -max-lease-ttl=87600h $SECRET_PATH
    export HSM_SECRET_PATH="$SECRET_PATH/hsm"
    vault kv put ${HSM_SECRET_PATH} clientcert=HSM_CLIENT_CERT clientkey=HSM_CLIENT_KEY servercert=HSM_SERVER_CERT PIN=HSM_PIN
    vault kv get ${HSM_SECRET_PATH}
    
  3. Crea una política con permisos para la ruta de acceso de PKI.

    vault policy write asm-$CLUSTER_SUFFIX-hsm-policy -<< EOF
    path "${HSM_SECRET_PATH}" {
    capabilities = ["read"]
    }
    EOF
    
  4. Agrega la autenticación de Kubernetes para el clúster.

    vault auth enable --path="${HSM_SECRET_PATH}"  kubernetes
    
  5. Establece el JWT de Kubernetes, la dirección de Kubernetes y el certificado de CA de Kubernetes en la ruta de autenticación de Vault.

    vault write auth/${HSM_SECRET_PATH}/config \
    token_reviewer_jwt=cat "${CLUSTER_SUFFIX}"-tokenreview_jwt \
    kubernetes_host=cat "${CLUSTER_SUFFIX}"-k8s_addr \
    kubernetes_ca_cert=@"${CLUSTER_SUFFIX}"-k8s_cert
    
  6. Permite que istiod-service-account.istio-system se autentique como función demo y usa la política creada.

    vault write auth/${HSM_SECRET_PATH}/role/istiod \
    bound_service_account_names=istiod-service-account \
    bound_service_account_namespaces=istio-system \
    policies=asm-$CLUSTER_SUFFIX-hsm-policy \
    ttl=768h
    
  7. Vuelve a la carpeta superior.

    cd ..
    

Descarga el archivo de instalación

Linux

  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.9.8-asm.6-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.9.8-asm.6-linux-amd64.tar.gz.1.sig
    openssl dgst -verify /dev/stdin -signature istio-1.9.8-asm.6-linux-amd64.tar.gz.1.sig istio-1.9.8-asm.6-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.9.8-asm.6-linux-amd64.tar.gz

    El comando crea un directorio de instalación en tu directorio de trabajo actual llamado istio-1.9.8-asm.6 que contiene lo siguiente:

    • Hay aplicaciones de muestra en el directorio samples.
    • La herramienta de línea de comandos de istioctl que usas para instalar Anthos Service Mesh se encuentra en el directorio bin.
    • Los perfiles de configuración de Anthos Service Mesh se encuentran en el directorio manifests/profiles.
  4. Asegúrate de estar en el directorio raíz de la instalación de Anthos Service Mesh.

    cd istio-1.9.8-asm.6

macOS

  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.9.8-asm.6-osx.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.9.8-asm.6-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature istio-1.9.8-asm.6-osx.tar.gz.1.sig istio-1.9.8-asm.6-osx.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.9.8-asm.6-osx.tar.gz

    El comando crea un directorio de instalación en tu directorio de trabajo actual llamado istio-1.9.8-asm.6 que contiene lo siguiente:

    • Hay aplicaciones de muestra en el directorio samples.
    • La herramienta de línea de comandos de istioctl que usas para instalar Anthos Service Mesh se encuentra en el directorio bin.
    • Los perfiles de configuración de Anthos Service Mesh se encuentran en el directorio manifests/profiles.
  4. Asegúrate de estar en el directorio raíz de la instalación de Anthos Service Mesh.

    cd istio-1.9.8-asm.6

Windows

  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.9.8-asm.6-win.zip
  2. Descarga el archivo de firma y usa openssl para verificar la firma:

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.9.8-asm.6-win.zip.1.sig
    openssl dgst -verify - -signature istio-1.9.8-asm.6-win.zip.1.sig istio-1.9.8-asm.6-win.zip <<'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.9.8-asm.6-win.zip

    El comando crea un directorio de instalación en tu directorio de trabajo actual llamado istio-1.9.8-asm.6 que contiene lo siguiente:

    • Hay aplicaciones de muestra en el directorio samples.
    • La herramienta de línea de comandos de istioctl que usas para instalar Anthos Service Mesh se encuentra en el directorio bin.
    • Los perfiles de configuración de Anthos Service Mesh se encuentran en el directorio manifests/profiles.
  4. Asegúrate de estar en el directorio raíz de la instalación de Anthos Service Mesh.

    cd istio-1.9.8-asm.6

Configura el recurso en el plano de control

  1. Configura las variables de entorno.

    export CLUSTER_SUFFIX="c1"
    export VAULT_ADDR="https://VAULT_IP:PORT"
    
  2. Copia el archivo que contiene el certificado para autenticar Vault en un archivo llamado cert. Por ejemplo, el certificado TLS del servidor Vault, ${VAULT_CACERT}.

    cp ${VAULT_CACERT} ./cert
    
  3. Crea un ConfigMap desde el archivo en el espacio de nombres istio-system.

    kubectl create ns istio-system
    kubectl delete configmap vault-tls-cert -n istio-system
    kubectl create configmap vault-tls-cert -n istio-system --from-file=./cert
    

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-198-6
    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-198-6

Instale Anthos Service Mesh

  1. Configura las variables de entorno a fin de configurar ASM para que interactúe con Vault y HSM. Con el siguiente comando, se acorta el tiempo de espera a 10 segundos, ya que Istio no estará completamente listo debido a la operación de importación pendiente por parte del operador.

    export HSM_SLOT_LABEL=the HSM slot label
    export VAULT_ADDR=address of the vault server
    export HSM_SECRET_PATH=the path to the HSM secret on Vault
    export KEK_ID=the HSM slot KEK ID
    export HSM_PLUGIN_IMAGE=gcr.io/thalescpl-io-k8s-kms-plugin/hsm-plugin:asm-1.7-1
    export VAULT_CLIENT_IMAGE=gcr.io/gke-release/asm/vaultclient:latest
    export WAIT_FOR_RESOURCES_TIMEOUT=10s
  2. Ejecuta el siguiente comando para instalar Anthos Service Mesh mediante el perfil asm-multicloud. Si deseas habilitar una función compatible opcional, incluye -f y el nombre del archivo YAML en la siguiente línea de comandos. Consulta Habilita funciones opcionales para obtener más información.

    istioctl install --set profile=asm-multicloud \
       --set revision=asm-198-6 \
       --set values.hsm.enabled=true \
       --set values.hsm.hsmKEKID=${KEK_ID} \
       --set values.hsm.hsmPluginImage=${HSM_PLUGIN_IMAGE} \
       --set values.hsm.hsmSlotLabel=${HSM_SLOT_LABEL} \
       --set values.hsm.vaultClientImage=${VAULT_CLIENT_IMAGE} \
       --set values.hsm.vaultAddr=${VAULT_ADDR} \
       --set values.hsm.vaultAuthPath=auth/${HSM_SECRET_PATH}/login \
       --set values.hsm.vaultAuthRole=istiod \
       --set values.hsm.vaultAuthJwtPath="/var/run/secrets/kubernetes.io/serviceaccount/token" \
       --set values.hsm.vaultSecretPath=${HSM_SECRET_PATH} \
       --set values.global.jwtPolicy="first-party-jwt"
    
  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.

  4. Verifica que Istiod se inicialice correctamente y esté en espera.

    kubectl get pod -l app=istiod -n istio-system

    Espera un resultado similar al siguiente:

    NAME                      READY   STATUS    RESTARTS   AGE
    istiod-66ff56d76c-f9p5l   2/3     Running   2          1m27s

    Verás que Istio no está completamente listo porque el contenedor discovery está bloqueado y a la espera del certificado.

  5. Verifica el registro de los contenedores de Istio para asegurarte de que estén en el estado correcto.

    kubectl logs -c hsm-plugin -l app=istiod -n istio-system

    Espera un resultado similar al siguiente:

    The token has been initialized and is reassigned to slot 412789065
    INFO Loaded P11 PIN from file: /var/run/hsm-credential/pin  line="cmd/serve.go:93"
    INFO KMS Plugin Listening on : /var/run/hsm-socket/.sock  line="cmd/serve.go:119"
    INFO Serving on socket: /var/run/hsm-socket/.sock  line="cmd/serve.go:198"
    KEK ID: 7651a4ea-eeb7-4c1f-927b-8c871c2127aa
    kubectl logs -c discovery -l app=istiod -n istio-system

    Espera la última línea del resultado como la siguiente:

    ...
    2020-10-15T21:56:56.918931Z info    pkica   Wait until the CA certificate secret istio-system.istio-ca-cert can be loaded...

Firma del certificado para Istio

  1. Descarga la CSR encriptada desde el secreto de Kubernetes.

    kubectl get secret istio-ca-cert-csr -n istio-system -o jsonpath={.data} > encrypted_csr.json
    
  2. Desencripta el CSR.

    kubectl get secret istio-ca-cert-csr -n istio-system -o jsonpath={.data} > encrypted_csr.json
    ./k8s-kms-plugin decrypt-csr -f encrypted_csr.json -o csr.pem
    
  3. El administrador de seguridad debe tomar el archivo csr.pem y firmarlo con la CA raíz.

  4. Coloca la cadena de certificados en la raíz del archivo llamado cert-chain.pem y, luego, ejecuta el siguiente comando.

    kubectl create secret generic istio-ca-cert --from-file=cert-chain.pem -n istio-system
    
  5. Verifica que Istio cargue la nueva cadena de certificados correctamente mediante la inspección en el registro de Istio.

    kubectl logs ISTIOD_POD -c discovery -n istio-system | grep "CA cert\:" -A 60
    

    Espera a que el resultado sea similar al siguiente:

    2020-10-24T18:58:14.354254Z info    pkica   CA cert:
    -----BEGIN CERTIFICATE-----
    ...
    -----END CERTIFICATE-----

certificados intermedios: -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----

certificado raíz: -----BEGIN CERTIFICATE----- … -----END CERTIFICATE-----

Verifique la instalación:

Sigue estos pasos para verificar que la instalación de Anthos Service Mesh funcione correctamente.

Verifica los componentes del plano de control

  1. Comprueba que los pods del plano de control en istio-system se encuentren en ejecución:

    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                    3/3     Running     0          7m36s
    promsd-576b8db4d6-lqf64                   2/2     Running     1          7m19s
  2. Activa una llamada TLS a un servicio desde el sidecar y, luego, inspecciona el certificado que usa el servicio con Bookinfo como ejemplo.

    kubectl exec POD -c istio-proxy -- openssl s_client -alpn istio -showcerts -connect details:9080
    

    Inspecciona los certificados en el resultado y espera ver la cadena de certificado del servidor en el resultado.

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.

La instalación no se completará hasta que habilites la inserción automática de proxy de sidecar y reinicies los Pods para las cargas de trabajo que se estaban ejecutando en tu clúster antes de instalar Anthos Service Mesh.

Para habilitar la inserción automática, debes etiquetar tus espacios de nombres con la etiqueta de revisión que se estableció en istiod cuando instalaste Anthos Service Mesh. El webhook de inyector de sidecar usa la etiqueta de revisión para asociar los sidecars insertados con una revisión istiod particular. Después de agregar la etiqueta, los Pods existentes al espacio de nombres deben reiniciarse para que se incorporen los archivos adicionales.

Antes de implementar cargas de trabajo nuevas en un espacio de nombres nuevo, asegúrate de configurar la inserción automática para que Anthos Service Mesh pueda supervisar y proteger 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-198-6-5788d57586-bljj4   1/1     Running   0          23h   app=istiod,istio.io/rev=asm-198-6,istio=istiod,pod-template-hash=5788d57586
    istiod-asm-198-6-5788d57586-vsklm   1/1     Running   1          23h   app=istiod,istio.io/rev=asm-198-6,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-198-6.

  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
    

Configura una dirección IP externa

La instalación predeterminada de Anthos Service Mesh supone que se asigna una dirección IP externa a los servicios LoadBalancer de forma automática. Esto no es así en GKE en VMware. Debido a esto, debes asignar una dirección IP de forma manual para el recurso de entrada de puerta de enlace de entrada de Anthos.

Para configurar una dirección IP externa, sigue una de las secciones que se encuentran a continuación, según el modo de balanceo de cargas de tu clúster:

Configura el modo de balanceo de cargas integrado

  1. Abre la configuración del servicio istio-ingressgateway:

    kubectl edit svc -n istio-system istio-ingressgateway
    

    La configuración del servicio istio-ingressgateway se abre en el editor de texto predeterminado de tu shell.

  2. En el archivo, agrega la siguiente línea debajo del bloque de especificación (spec):

    loadBalancerIP: <your static external IP address>
    

    Por ejemplo:

    spec:
     loadBalancerIP: 203.0.113.1
    
  3. Guarda el archivo.

Configura el modo de balanceo de cargas manual

Para exponer un servicio del tipo NodePort con una dirección IP virtual (VIP) en tu balanceador de cargas, primero obtén los valores de nodePort:

  1. Visualiza la configuración del servicio istio-ingressgateway en tu shell:

    kubectl get svc -n istio-system istio-ingressgateway -o yaml
    

    Se muestran cada uno de los puertos para las puertas de enlace de Anthos Service Mesh. El resultado del comando es similar al siguiente:

     ...
     ports:
     - name: status-port
       nodePort: 30391
       port: 15020
       protocol: TCP
       targetPort: 15020
     - name: http2
       nodePort: 31380
       port: 80
       protocol: TCP
       targetPort: 80
     - name: https
       nodePort: 31390
       port: 443
       protocol: TCP
       targetPort: 443
     - name: tcp
       nodePort: 31400
       port: 31400
       protocol: TCP
       targetPort: 31400
     - name: https-kiali
       nodePort: 31073
       port: 15029
       protocol: TCP
       targetPort: 15029
     - name: https-prometheus
       nodePort: 30253
       port: 15030
       protocol: TCP
       targetPort: 15030
     - name: https-grafana
       nodePort: 30050
       port: 15031
       protocol: TCP
       targetPort: 15031
     - name: https-tracing
       nodePort: 31204
       port: 15032
       protocol: TCP
       targetPort: 15032
     - name: tls
       nodePort: 30158
       port: 15443
       protocol: TCP
       targetPort: 15443
     ...
    
  2. Expón estos puertos a través del balanceador de cargas.

    Por ejemplo, el puerto de servicio llamado http2 tiene port 80 y nodePort 31380. Supongamos que las direcciones de nodos de tu clúster de usuario son 192.168.0.10, 192.168.0.11 y 192.168.0.12, y la VIP del balanceador de cargas es 203.0.113.1.

    Configura el balanceador de cargas para que el tráfico enviado a 203.0.113.1:80 se reenvíe a 192.168.0.10:31380, 192.168.0.11:31380 o 192.168.0.12:31380. Puedes seleccionar los puertos de servicio que deseas exponer en esta VIP determinada.

Próximos pasos