Actualiza Apigee Hybrid a la versión 1.8

Presentación de la puerta de enlace de entrada de Apigee

A partir de la versión 1.8, Apigee Hybrid ofrece una función nueva para administrar la puerta de enlace de entrada de tu instalación híbrida, la puerta de enlace de entrada de Apigee. Anthos Service Mesh ya no es un requisito para la instalación híbrida. Con la puerta de enlace de entrada de Apigee, Apigee dejará de proporcionar la configuración de enrutamiento a Anthos Service Mesh. Después de la actualización, debes migrar el tráfico a la nueva puerta de enlace de entrada de Apigee antes de poder comenzar a usar la función.

Apigee usa un pequeño subconjunto de funciones de Anthos Service Mesh para la puerta de enlace de entrada. A partir de la versión híbrida 1.8 de Apigee, se incluye una puerta de enlace de entrada que se instala y actualiza como parte de las actualizaciones híbridas de Apigee. Por lo tanto, no necesitas adquirir experiencia en Anthos Service Mesh para instalar, actualizar y administrar Apigee Hybrid. Los problemas relacionados con las versiones de la puerta de enlace de entrada y la compatibilidad con las versiones híbridas de Apigee se controlan automáticamente.

Hay dos situaciones de migración:

  • Migración multiclúster o multirregión (recomendada):

    Antes de cambiar a una nueva entrada para Apigee, desvía todo el tráfico a otro clúster o región del clúster que migras. Esto te dará tiempo para probar si la nueva puerta de enlace de entrada de Apigee funciona como se espera. Luego, vuelve a mover el tráfico al clúster actualizado.

  • Actualización local (no se recomienda en entornos de producción):

    Durante la actualización, Apigee mostrará la puerta de enlace de entrada nueva con una dirección IP que especifiques. A continuación, puedes probar si la nueva puerta de enlace de entrada de Apigee funciona como se espera y, luego, desviar el tráfico a la nueva entrada. Es posible que haya tiempo de inactividad durante esta actualización.

Cuando actualizas Apigee Hybrid a la versión 1.8, debes configurar la puerta de enlace de entrada de Apigee en tu archivo de anulaciones. Después de la actualización, controla qué tipo de puerta de enlace de entrada usarán tus clústeres si diriges los registros A o CNAME en tu registrador a la dirección IP de la puerta de enlace de entrada de Apigee o de Anthos Service Mesh.

Descripción general de la actualización a la versión 1.8.8

Los procedimientos para actualizar Apigee Hybrid se organizan en las siguientes secciones:

  1. Prepárate para la actualización.
  2. Instala la versión 1.8.8 del entorno de ejecución de hybrid.
  3. Para la puerta de enlace de entrada, elige una de las siguientes opciones:

Requisitos

En estas instrucciones de actualización, se supone que tienes la versión 1.7.x de Apigee Hybrid o una versión de parche anterior de la versión 1.8.x instalada y deseas actualizarla a la versión 1.8.8. Si estás actualizando desde una versión anterior, consulta las instrucciones para actualizar Apigee Hybrid 1.7.

Si prefieres continuar usando Anthos Service Mesh, debes asegurarte de que Anthos Service Mesh se actualice a una versión compatible. Consulta la tabla Plataformas compatibles para conocer las versiones compatibles de Anthos Service Mesh.

Prepárate para actualizar a la versión 1.8

  1. En estas instrucciones, se usa la variable de entorno APIGEECTL_HOME para el directorio en tu sistema de archivos en el que instalaste apigeectl. Si es necesario, cambia el directorio a tu directorio apigeectl y define la variable con el siguiente comando:

    Linux

    export APIGEECTL_HOME=$PWD
    echo $APIGEECTL_HOME

    macOS

    export APIGEECTL_HOME=$PWD
    echo $APIGEECTL_HOME

    Windows

    set APIGEECTL_HOME=%CD%
    echo %APIGEECTL_HOME%
  2. Realiza una copia de seguridad de tu directorio $APIGEECTL_HOME/ versión 1.7. Por ejemplo:
    tar -czvf $APIGEECTL_HOME/../apigeectl-v1.7-backup.tar.gz $APIGEECTL_HOME
  3. Realiza una copia de seguridad de tu base de datos de Cassandra según las instrucciones que se indican en Copia de seguridad y recuperación de Cassandra.

Agrega el rol Agente de Cloud Trace a la cuenta de servicio para el entorno de ejecución de Apigee. (Opcional)

Opcional: Si planeas usar Cloud Trace y aún no realizaste este paso en la instalación de Hybrid v1.7, asegúrate de que tu cuenta de servicio para tus servicios del entorno de ejecución de Apigee tenga el rol de Agente de Cloud Trace de Google. (roles/cloudtrace.agent).

Para los entornos de producción, por lo general, es la cuenta de servicio apigee-runtime. En entornos que no son de producción, por lo general, es la cuenta de servicio apigee-non-prod.

Puedes agregar el rol en la IU de la consola de Cloud > IAM y administración > Cuentas de servicio o con los siguientes comandos:

  1. Obtén la dirección de correo electrónico de tu cuenta de servicio con el siguiente comando:

    Producción

    gcloud iam service-accounts list --filter "apigee-runtime"

    Si coincide con el patrón apigee-runtime@$ORG_NAME.iam.gserviceaccount.com, puedes usarlo en el paso siguiente

    No producción

    gcloud iam service-accounts list --filter "apigee-non-prod"

    Si coincide con el patrón apigee-non-prod@$ORG_NAME.iam.gserviceaccount.com, puedes usarlo en el paso siguiente

  2. Asigna el rol Agente de Cloud Trace a la cuenta de servicio:

    Producción

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:apigee-runtime@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/cloudtrace.agent"

    No producción

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/cloudtrace.agent"

    Ejemplo

    gcloud projects add-iam-policy-binding hybrid-example-project \
        --member="serviceAccount:apigee-runtime@hybrid-example-project.iam.gserviceaccount.com" \
        --role="roles/cloudtrace.agent"

    En el ejemplo anterior, $PROJECT_ID es el nombre del proyecto de Google Cloud en el que se instala Apigee Hybrid.

Prepárate para instalar la puerta de enlace de entrada de Apigee

Para instalar la puerta de enlace de entrada de Apigee como parte de la actualización. Debes agregar la siguiente propiedad ingressGateways a tu archivo de anulaciones.

Sintaxis

ingressGateways:
- name: INGRESS_NAME
  replicaCountMin: REPLICAS_MIN
  replicaCountMax: REPLICAS_MAX
  resources:
    requests:
      cpu: CPU_COUNT_REQ
      memory: MEMORY_REQ
    limits:
      cpu: CPU_COUNT_LIMIT
      memory: MEMORY_LIMIT
  svcAnnotations:  # optional. See Known issue 243599452.
    SVC_ANNOTATIONS_KEY: SVC_ANNOTATIONS_VALUE
  svcLoadBalancerIP: SVC_LOAD_BALANCER_IP # optional

Ejemplo

ingressGateways:
- name: prod1
  replicaCountMin: 2
  replicaCountMax: 100
  resources:
    requests:
      cpu: 1
      memory: 1Gi
    limits:
      cpu: 2
      memory: 2Gi 
  • INGRESS_NAME es el nombre de la implementación de entrada. Puede ser cualquier nombre que cumpla con los siguientes requisitos:
    • Tener una longitud máxima de 17 caracteres
    • Contener solo caracteres alfanuméricos en minúscula “.” o “-”.
    • Comenzar con un carácter alfanumérico
    • Terminar con un carácter alfanumérico

    Consulta ingressGateways[].name en la referencia de la propiedad de configuración.

  • REPLICAS_MIN y REPLICAS_MAX son los recuentos de réplicas mínimas y máximas para la puerta de enlace de entrada de Apigee en tu instalación. Para obtener más información y la configuración predeterminada, consulta ingressGateways[].replicaCountMin y ingressGateways[].replicaCountMax en la referencia de la propiedad de configuración.
  • CPU_COUNT_REQ y MEMORY_REQ son la solicitud de CPU y memoria para cada réplica de la puerta de enlace de entrada de Apigee en tu instalación.

    Para obtener más información y la configuración predeterminada, consulta ingressGateways[].resources.requests.cpu y ingressGateways[].resources.requests.memory en la referencia de la propiedad de configuración.

  • CPU_COUNT_LIMIT y MEMORY_LIMIT son los límites máximos de CPU y memoria para cada réplica de la puerta de enlace de entrada de Apigee en tu instalación.

    Para obtener más información y la configuración predeterminada, consulta ingressGateways[].resources.limits.cpu y ingressGateways[].resources.limits.memory en la referencia de la propiedad de configuración.

  • SVC_ANNOTATIONS_KEY y SVC_ANNOTATIONS_VALUE (opcional):

    Este es un par clave-valor que proporciona anotaciones para tu servicio de entrada predeterminado. La plataforma en la nube usa las anotaciones para configurar tu instalación híbrida, por ejemplo, si estableces el tipo de balanceador de cargas como interno o externo. Por ejemplo:

    ingressGateways:
      svcAnnotations:
        networking.gke.io/load-balancer-type: "Internal"

    Las anotaciones varían de una plataforma a otra. Consulta la documentación de tu plataforma para ver las anotaciones obligatorias y sugeridas.

    Consulta ingressGateways[].svcAnnotations en la referencia de la propiedad de configuración.
  • SVC_LOAD_BALANCER_IP (opcional) te permite asignar una dirección IP estática para el balanceador de cargas. En las plataformas que admiten la especificación de la dirección IP del balanceador de cargas, el balanceador de cargas se creará con esta dirección IP. En plataformas que no te permiten especificar la dirección IP del balanceador de cargas, se ignora esta propiedad.

    Si no tienes una dirección IP estática asignada a tu balanceador de cargas, deja esta propiedad fuera de tu archivo de anulaciones.

    Consulta ingressGateways[].svcLoadBalancerIP en la referencia de la propiedad de configuración.

Realizar cambios adicionales en tu archivo de anulaciones para habilitar o inhabilitar las funciones opcionales de la versión 1.8

Agrega las siguientes propiedades a tu archivo overrides.yaml para habilitar funciones nuevas en la versión híbrida 1.8. Estas funciones son opcionales.

  • El UDCA con permiso de organización ahora está activado de forma predeterminada. El uso de una sola implementación de UDCA para manejar el tráfico en todos los entornos evita la falta de uso de Pods de UDCA y aumenta la disponibilidad de los recursos de nodo para otros componentes de Apigee. El UDCA con permiso de la organización usa una sola cuenta de servicio para todos los entornos, apigee-udca.

    Si usas cuentas de servicio diferentes para UDCA en diferentes entornos, ten en cuenta que ahora usará la cuenta de servicio especificada a nivel de la organización en el archivo de anulaciones con udca:serviceAccountPath, en lugar de las que se especifican en el nivel de entorno con envs:udca:serviceAccountPath.

    Apigee Hybrid v.1.8 admite UDCA con alcance de entorno. Para mantener el UDCA por entorno, configura orgScopedUDCA: false.

    Consulta orgScopedUDCA en la referencia de las propiedades de configuración.

  • Habilita validateOrg para requerir una validación estricta de que la organización y el entorno de Apigee están activos y funcionan con el proyecto de Google Cloud Platform especificado en tu archivo overrides.
    validateOrg: true

    Consulta validateOrg en la referencia de las propiedades de configuración.

Instala el entorno de ejecución de hybrid 1.8.8

  1. Asegúrate de estar en el directorio base híbrido (el superior del directorio en el que se encuentra el archivo ejecutable apigeectl):
    cd $APIGEECTL_HOME/..
  2. Descarga el paquete de lanzamientos para tu sistema operativo con el siguiente comando. Asegúrate de seleccionar tu plataforma en la siguiente tabla:

    Linux

    Linux de 64 bits

    curl -LO \
      https://storage.googleapis.com/apigee-release/hybrid/apigee-hybrid-setup/1.8.8/apigeectl_linux_64.tar.gz

    macOS

    Mac (64 bits)

    curl -LO \
      https://storage.googleapis.com/apigee-release/hybrid/apigee-hybrid-setup/1.8.8/apigeectl_mac_64.tar.gz

    Windows

    Windows de 64 bits

    curl -LO ^
      https://storage.googleapis.com/apigee-release/hybrid/apigee-hybrid-setup/1.8.8/apigeectl_windows_64.zip
  3. Cambia el nombre de tu directorio apigeectl/ actual por un nombre de directorio de copia de seguridad. Por ejemplo:

    Linux

    mv $APIGEECTL_HOME/ $APIGEECTL_HOME-v1.7/

    macOS

    mv $APIGEECTL_HOME/ $APIGEECTL_HOME-v1.7/ 

    Windows

    rename %APIGEECTL_HOME% %APIGEECTL_HOME%-v1.7 
  4. Extrae el contenido del archivo gzip descargado en tu directorio base híbrido. El directorio base híbrido es el directorio donde se encuentra el directorio apigeectl-v1.7 al que se le cambió el nombre:

    Linux

    tar xvzf filename.tar.gz -C ./

    macOS

    tar xvzf filename.tar.gz -C ./

    Windows

    tar xvzf filename.zip -C ./
  5. De forma predeterminada, el contenido del archivo tar se expande a un directorio con la versión y la plataforma en su nombre. Por ejemplo: ./apigeectl_1.8.8-xxxxxxx_linux_64. Cambia el nombre de ese directorio a apigeectl con el siguiente comando:

    Linux

    mv apigeectl_1.8.8-xxxxxxx_linux_64 apigeectl

    macOS

    mv apigeectl_1.8.8-xxxxxxx_mac_64 apigeectl

    Windows

    rename apigeectl_1.8.8-xxxxxxx_windows_64 apigeectl
  6. Cambia al directorio apigeectl:
    cd ./apigeectl

    Este directorio es el directorio principal de apigeectl. Es donde se encuentra el comando ejecutable apigeectl.

  7. En estas instrucciones, se usa la variable de entorno $APIGEECTL_HOME para el directorio en tu sistema de archivos en el que está instalada la utilidad apigeectl. Si es necesario, cambia el directorio a tu directorio apigeectl y define la variable con el siguiente comando:

    Linux

    export APIGEECTL_HOME=$PWD
    echo $APIGEECTL_HOME

    macOS

    export APIGEECTL_HOME=$PWD
    echo $APIGEECTL_HOME

    Windows

    set APIGEECTL_HOME=%CD%
    echo %APIGEECTL_HOME%
  8. Verifica la versión de apigeectl con el comando version:
    ./apigeectl version
    Version: 1.8.8
  9. Ve al directorio hybrid-base-directory/hybrid-files. El directorio hybrid-files es donde se encuentran los archivos de configuración, como el archivo de anulación, los certificados y las cuentas de servicio. Por ejemplo:
    cd $APIGEECTL_HOME/../hybrid-files
  10. Verifica que kubectl esté configurado en el contexto correcto con el siguiente comando. El contexto actual debe configurarse en el clúster en el que actualizas Apigee Hybrid.
    kubectl config get-contexts | grep \*
  11. En el directorio hybrid-files:
    1. Actualiza los siguientes vínculos simbólicos a $APIGEECTL_HOME. Estos vínculos te permiten ejecutar el comando apigeectl recién instalado desde el directorio hybrid-files:
      ln -nfs $APIGEECTL_HOME/tools tools
      ln -nfs $APIGEECTL_HOME/config config
      ln -nfs $APIGEECTL_HOME/templates templates
      ln -nfs $APIGEECTL_HOME/plugins plugins
    2. Para verificar que los symlinks se hayan creado correctamente, ejecuta este comando y asegúrate de que las rutas de los vínculos apunten a las ubicaciones correctas:
      ls -l | grep ^l
  12. Realiza una inicialización de prueba de validación para verificar si hay errores:
    ${APIGEECTL_HOME}/apigeectl init -f OVERRIDES_FILE --dry-run=client

    En el ejemplo anterior, OVERRIDES_FILE es el nombre del archivo de anulación, por ejemplo, ./overrides/overrides.yaml.

  13. Si no hay errores, inicializa Hybrid 1.8.8. Con este comando, también se instala y configura la puerta de enlace de entrada de Apigee:
    $APIGEECTL_HOME/apigeectl init -f OVERRIDES_FILE
  14. Comprueba el estado de inicialización:
    $APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE

    Si se realiza de forma correcta, el resultado indica lo siguiente: All containers ready.

    Como verificación adicional, también puedes ejecutar este comando para verificar el estado de ApigeeDataStore:

    kubectl describe apigeeds -n apigee

    En el resultado, busca State: running.

  15. Verifica si hay errores con una prueba de validación del comando apply mediante la marca --dry-run:
    $APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --dry-run=client
  16. Si no hay errores, aplica tus anulaciones. Selecciona y sigue las instrucciones para los entornos de producción o que no sean de producción, según tu instalación.

    Producción

    En los entornos de producción, debes actualizar cada componente Hybrid de forma individual y verificar el estado del componente actualizado antes de continuar con el siguiente.

    1. Asegúrate de que estés en el directorio hybrid-files.
    2. Aplica tus anulaciones para actualizar Cassandra:
      $APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --datastore
    3. Verifica la finalización:
      $APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE

      Continúa con el siguiente paso solo cuando los Pods estén listos.

    4. Aplica tus anulaciones para actualizar los componentes de telemetría y verificar la finalización:
      $APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --telemetry
      $APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE
    5. Abre los componentes de Redis:
      $APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --redis
    6. Aplica tus anulaciones para actualizar los componentes a nivel de la organización (MART, Watcher y Apigee Connect) y verifica la finalización:
      $APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --org
      $APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE
    7. Aplica tus anulaciones para actualizar tus entornos. Tienes dos opciones:
      • Entorno por entorno: Aplica tus anulaciones a un entorno a la vez y verifica la finalización. Repite este paso para cada entorno:
        $APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --env ENV_NAME
        $APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE

        En el comando anterior, ENV_NAME es el nombre del entorno que estás actualizando.

      • Todos los entornos a la vez: Aplica las anulaciones a todos los entornos a la vez y verifica la finalización:
        $APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --all-envs
        $APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE
    8. Aplica tus anulaciones para actualizar los componentes virtualhosts y verificar la finalización:
      $APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE --settings virtualhosts
      $APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE

    No producción

    En la mayoría de los entornos experimentales, de producción o de no producción, puedes aplicar las anulaciones a todos los componentes a la vez. Si tu entorno de no producción es grande y complejo, o imita a un entorno de producción, te recomendamos seguir las instrucciones para actualizar entornos de producción.

    1. Asegúrate de que estés en el directorio hybrid-files.
    2. $APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE
    3. Verifica el estado:
      $APIGEECTL_HOME/apigeectl check-ready -f OVERRIDES_FILE

Actualiza tu versión de Kubernetes

Actualiza tu plataforma de Kubernetes a las versiones compatibles con la versión híbrida 1.8. Si necesitas ayuda, sigue la documentación de la plataforma.

Cambia el tráfico de Anthos Service Mesh a la puerta de enlace de entrada de Apigee

Para cambiar el tráfico a la puerta de enlace de entrada de Apigee, sigue estos pasos:

  1. Expón la puerta de enlace de entrada de Apigee. Sigue los procedimientos que aparecen en Expón la puerta de enlace de entrada de Apigee.
  2. Prueba la nueva puerta de enlace de entrada mediante una llamada a un proxy. Lo ideal es que pruebes todos los proxies fundamentales que tienes implementados actualmente.
  3. A fin de cambiar el tráfico, actualiza tus registros DNS para que apunten a la dirección IP de tu nueva puerta de enlace de entrada de Apigee. Según tu proveedor de DNS, es posible que puedas transferir el tráfico de manera gradual al extremo nuevo. Sugerencia: Puedes encontrar la dirección IP externa de la puerta de enlace de entrada de Apigee con el siguiente comando:
    kubectl get svc -n apigee -l app=apigee-ingressgateway

    Deberías obtener un resultado similar al siguiente:

    NAME                                        TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)                                      AGE
    apigee-ingressgateway-prod-hybrid-37a39bd   LoadBalancer   192.0.2.123   233.252.0.123   15021:32049/TCP,80:31624/TCP,443:30723/TCP   16h
  4. Supervisa los paneles para asegurarte de que todo el tráfico del entorno de ejecución funcione. Continúa con el paso siguiente solo si todo funciona como se espera. Asegúrate de que no haya tráfico que pase por la puerta de enlace de entrada anterior (Anthos Service Mesh), ya que la actualización del DNS puede tardar en propagarse debido al almacenamiento en caché del DNS.
  5. Para evitar que Apigee proporcione una configuración a Anthos Service Mesh, sigue los pasos que se indican en Deja de proporcionar la configuración a ASM en la guía sobre cómo administrar la puerta de enlace de entrada de Apigee.
  6. Vuelve a probar y supervisa el tráfico del proxy de API.
  7. Sigue las instrucciones en la documentación de Anthos Service Mesh para desinstalar Anthos Service Mesh del clúster.

Actualiza Anthos Service Mesh a la versión 1.13

Realiza los procedimientos mediante la documentación de Anthos Service Mesh adecuada para tu plataforma:

Las instrucciones para instalar y configurar Anthos Service Mesh son diferentes según la plataforma. Las plataformas se dividen en las siguientes categorías:

  • GKE: clústeres de Google Kubernetes Engine que se ejecutan en Google Cloud.
  • Fuera de Google Cloud: Clústeres de Anthos que se ejecutan en:
    • Clústeres de Anthos alojados en VMware (GKE On-Prem)
    • Anthos en Bare Metal
    • Clústeres de Anthos en AWS
    • Amazon EKS
  • Otras plataformas de Kubernetes: clústeres que cumplen con las especificaciones que se crean y ejecutan en los siguientes entornos:
    • AKS
    • EKS
    • OpenShift

GKE

La secuencia para actualizar a la versión 1.13.9 de Anthos Service Mesh para tu instalación de Hybrid es la siguiente:

  1. Prepárate para la actualización.
  2. Instala la versión nueva de Anthos Service Mesh.
  3. Borra las implementaciones, los servicios y los webhooks de la versión anterior de Anthos Service Mesh de tu instalación actual.
  4. Actualiza las puertas de enlace y configura los webhooks nuevos.

Prepárate para actualizar Anthos Service Mesh a la versión 1.13.9

  1. Revisa los requisitos de Actualiza Anthos Service Mesh, pero aún no realices la actualización.
  2. Antes de instalar la versión nueva, determina la revisión actual. Necesitarás esta información para borrar las implementaciones, los servicios y los webhooks de la versión anterior de Anthos Service Mesh de tu instalación actual. Usa el siguiente comando para almacenar la revisión actual de istiod en una variable de entorno:
    export DELETE_REV=$(kubectl get deploy -n istio-system -l app=istiod -o jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}')
    echo $DELETE_REV

    Deberías obtener un resultado similar a 1.12.9-asm.2

  3. Crea un archivo overlay.yaml nuevo o verifica que tu overlay.yaml existente tenga el siguiente contenido:
    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      components:
        ingressGateways:
        - name: istio-ingressgateway
          enabled: true
          k8s:
            nodeSelector:
              # default node selector, if different or not using node selectors, change accordingly.
              cloud.google.com/gke-nodepool: apigee-runtime
            resources:
              requests:
                cpu: 1000m
            service:
              type: LoadBalancer
              loadBalancerIP: STATIC_IP # If you do not have a reserved static IP, leave this out.
              ports:
                - name: http-status-port
                  port: 15021
                - name: http2
                  port: 80
                  targetPort: 8080
                - name: https
                  port: 443
                  targetPort: 8443
      meshConfig:
        accessLogFormat:
          '{"start_time":"%START_TIME%","remote_address":"%DOWNSTREAM_DIRECT_REMOTE_ADDRESS%","user_agent":"%REQ(USER-AGENT)%","host":"%REQ(:AUTHORITY)%","request":"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%","request_time":"%DURATION%","status":"%RESPONSE_CODE%","status_details":"%RESPONSE_CODE_DETAILS%","bytes_received":"%BYTES_RECEIVED%","bytes_sent":"%BYTES_SENT%","upstream_address":"%UPSTREAM_HOST%","upstream_response_flags":"%RESPONSE_FLAGS%","upstream_response_time":"%RESPONSE_DURATION%","upstream_service_time":"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%","upstream_cluster":"%UPSTREAM_CLUSTER%","x_forwarded_for":"%REQ(X-FORWARDED-FOR)%","request_method":"%REQ(:METHOD)%","request_path":"%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%","request_protocol":"%PROTOCOL%","tls_protocol":"%DOWNSTREAM_TLS_VERSION%","request_id":"%REQ(X-REQUEST-ID)%","sni_host":"%REQUESTED_SERVER_NAME%","apigee_dynamic_data":"%DYNAMIC_METADATA(envoy.lua)%"}'
  4. Sigue las instrucciones de las siguientes secciones en la documentación de Anthos Service Mesh:
    1. Descarga asmcli
    2. Otorga permisos de administrador del clúster
    3. Valida el proyecto y el clúster.
    4. Actualiza con funciones opcionales. Detente antes de iniciar la “sección Actualiza las puertas de enlace”.
  5. Cambia al nuevo plano de control:
    1. Obtén la etiqueta de revisión que está en istiod:
      kubectl get pod -n istio-system -L istio.io/rev

      El resultado del comando es similar al siguiente:

          NAME                                  READY  STATUS  RESTARTS   AGE  REV
          istiod-asm-1139-10-67998f4b55-lrzpz    1/1    Running  0         68m  asm-1129-0
          istiod-asm-1139-10-67998f4b55-r76kr    1/1    Running  0         68m  asm-1129-0
          istiod-1129-0-1-5cd96f88f6-n7tj9      1/1    Running  0         27s  asm-1139-10
          istiod-1129-0-1-5cd96f88f6-wm68b      1/1    Running  0         27s  asm-1139-10
    2. Asigna la etiqueta de revisión más reciente a una variable de entorno.

      En el resultado, en la columna REV, anota el valor de la etiqueta de revisión de la versión nueva. En este ejemplo, el valor es asm-1139-10.

      export UPGRADE_REV="REVISION_LABEL"
    3. Agrega la etiqueta de revisión al espacio de nombres istio-system y quita la etiqueta istio-injection (si existe) con el siguiente comando.
      kubectl label namespace istio-system istio.io/rev=$UPGRADE_REV istio-injection- --overwrite

      Si ves "istio-injection not found" en el resultado, puedes ignorarlo. Esto significa que el espacio de nombres no tenía la etiqueta istio-injection antes. 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.

    4. Reinicia los Pods para activar la reinserción:
      kubectl rollout restart deployment -n istio-system
    5. Prueba la aplicación para verificar que las cargas de trabajo funcionen de forma correcta.
    6. Si tienes cargas de trabajo en otros espacios de nombres, repite los pasos para etiquetar el espacio de nombres y reiniciar los pods.
  6. Borra las versiones anteriores:
    1. Navega en el directorio en el que instalaste asmcli.
    2. Almacena el directorio de salida para la instalación de Anthos Service Mesh en la variable de entorno DIR_PATH. Este es el mismo directorio que especificaste en el procedimiento Actualiza con funciones opcionales.
      export DIR_PATH=OUTPUT_DIR
    3. Crea una secuencia de comandos de shell que contenga los siguientes comandos:
      #!/bin/bash
      
      set -ex
      
      if [[ "${DELETE_REV}" != "${UPGRADE_REV}" ]]; then
        kubectl apply -f ${DIR_PATH}/asm/istio/istiod-service.yaml
        kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete deploy -l app=istio-ingressgateway-connectors,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete ValidatingWebhookConfiguration -l app=istiod,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete MutatingWebhookConfiguration -l app=sidecar-injector,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete IstioOperator installed-state-${DELETE_REV} -n istio-system --ignore-not-found=true
      fi
      
    4. Ejecuta la secuencia de comandos para borrar las versiones anteriores.

Fuera de Google Cloud

En estas instrucciones, se describe cómo actualizar Anthos Service Mesh en:

  • Clústeres de Anthos alojados en VMware (GKE On-Prem)
  • Anthos en Bare Metal
  • Clústeres de Anthos en AWS
  • Amazon EKS

La secuencia para actualizar a la versión 1.13.9 de Anthos Service Mesh para tu instalación de Hybrid es la siguiente:

  1. Prepárate para la actualización.
  2. Instala la versión nueva de Anthos Service Mesh.
  3. Borra las implementaciones, los servicios y los webhooks de la versión anterior de Anthos Service Mesh de tu instalación actual.
  4. Actualiza las puertas de enlace y configura los webhooks nuevos.

Prepárate para actualizar Anthos Service Mesh a la versión 1.13.9

  1. Revisa los requisitos de Actualiza Anthos Service Mesh, pero aún no realices la actualización.
  2. Antes de instalar la versión nueva, determina la revisión actual. Necesitarás esta información para borrar las implementaciones, los servicios y los webhooks de la versión anterior de Anthos Service Mesh de tu instalación actual. Usa el siguiente comando para almacenar la revisión actual de istiod en una variable de entorno:
    export DELETE_REV=$(kubectl get deploy -n istio-system -l app=istiod -o jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}')
    echo $DELETE_REV

    Deberías obtener un resultado similar a 1.12.9-asm.2

  3. Crea un archivo overlay.yaml nuevo o verifica que tu overlay.yaml existente tenga el siguiente contenido:
    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:  
      components:
        ingressGateways:
        - name: istio-ingressgateway
          enabled: true
          k8s:
            nodeSelector:
              # default node selector, if different or not using node selectors, change accordingly.
              cloud.google.com/gke-nodepool: apigee-runtime
            resources:
              requests:
                cpu: 1000m
            service:
              type: LoadBalancer
              loadBalancerIP: STATIC_IP # If you do not have a reserved static IP, leave this out.
              ports:
                - name: http-status-port
                  port: 15021
                - name: http2
                  port: 80
                  targetPort: 8080
                - name: https
                  port: 443
                  targetPort: 8443
      values:
        gateways:
          istio-ingressgateway:
            runAsRoot: true
    
      meshConfig:
        accessLogFormat:
          '{"start_time":"%START_TIME%","remote_address":"%DOWNSTREAM_DIRECT_REMOTE_ADDRESS%","user_agent":"%REQ(USER-AGENT)%","host":"%REQ(:AUTHORITY)%","request":"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%","request_time":"%DURATION%","status":"%RESPONSE_CODE%","status_details":"%RESPONSE_CODE_DETAILS%","bytes_received":"%BYTES_RECEIVED%","bytes_sent":"%BYTES_SENT%","upstream_address":"%UPSTREAM_HOST%","upstream_response_flags":"%RESPONSE_FLAGS%","upstream_response_time":"%RESPONSE_DURATION%","upstream_service_time":"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%","upstream_cluster":"%UPSTREAM_CLUSTER%","x_forwarded_for":"%REQ(X-FORWARDED-FOR)%","request_method":"%REQ(:METHOD)%","request_path":"%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%","request_protocol":"%PROTOCOL%","tls_protocol":"%DOWNSTREAM_TLS_VERSION%","request_id":"%REQ(X-REQUEST-ID)%","sni_host":"%REQUESTED_SERVER_NAME%","apigee_dynamic_data":"%DYNAMIC_METADATA(envoy.lua)%"}'
  4. Sigue las instrucciones de las siguientes secciones en la documentación de Anthos Service Mesh:
    1. Descarga asmcli
    2. Otorga permisos de administrador del clúster
    3. Valida el proyecto y el clúster.
    4. Actualiza con funciones opcionales. Detente antes de iniciar la “sección Actualiza las puertas de enlace”.
  5. Cambia al nuevo plano de control:
    1. Obtén la etiqueta de revisión que está en istiod:
      kubectl get pod -n istio-system -L istio.io/rev

      El resultado del comando es similar al siguiente:

          NAME                                  READY  STATUS  RESTARTS   AGE  REV
          istiod-asm-1139-10-67998f4b55-lrzpz    1/1    Running  0         68m  asm-1129-0
          istiod-asm-1139-10-67998f4b55-r76kr    1/1    Running  0         68m  asm-1129-0
          istiod-1129-0-1-5cd96f88f6-n7tj9      1/1    Running  0         27s  asm-1139-10
          istiod-1129-0-1-5cd96f88f6-wm68b      1/1    Running  0         27s  asm-1139-10
    2. Asigna la etiqueta de revisión más reciente a una variable de entorno.

      En el resultado, en la columna REV, anota el valor de la etiqueta de revisión de la versión nueva. En este ejemplo, el valor es asm-1139-10.

      export UPGRADE_REV="REVISION_LABEL"
    3. Agrega la etiqueta de revisión al espacio de nombres istio-system y quita la etiqueta istio-injection (si existe) con el siguiente comando.
      kubectl label namespace istio-system istio.io/rev=$UPGRADE_REV istio-injection- --overwrite

      Si ves "istio-injection not found" en el resultado, puedes ignorarlo. Esto significa que el espacio de nombres no tenía la etiqueta istio-injection antes. 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.

    4. Reinicia los Pods para activar la reinserción:
      kubectl rollout restart deployment -n istio-system
    5. Prueba la aplicación para verificar que las cargas de trabajo funcionen de forma correcta.
    6. Si tienes cargas de trabajo en otros espacios de nombres, repite los pasos para etiquetar el espacio de nombres y reiniciar los pods.
  6. Borra las versiones anteriores:
    1. Navega en el directorio en el que instalaste asmcli.
    2. Almacena el directorio de salida para la instalación de Anthos Service Mesh en la variable de entorno DIR_PATH. Este es el mismo directorio que especificaste en el procedimiento Actualiza con funciones opcionales.
      export DIR_PATH=OUTPUT_DIR
    3. Crea una secuencia de comandos de shell que contenga los siguientes comandos:
      #!/bin/bash
      
      set -ex
      
      if [[ "${DELETE_REV}" != "${UPGRADE_REV}" ]]; then
        kubectl apply -f ${DIR_PATH}/asm/istio/istiod-service.yaml
        kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete deploy -l app=istio-ingressgateway-connectors,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete ValidatingWebhookConfiguration -l app=istiod,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete MutatingWebhookConfiguration -l app=sidecar-injector,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete IstioOperator installed-state-${DELETE_REV} -n istio-system --ignore-not-found=true
      fi
      
    4. Ejecuta la secuencia de comandos para borrar las versiones anteriores.

AKS / EKS

En estas instrucciones, el proceso para actualizar la versión istio-1.13.9-asm.10 de Anthos Service Mesh en clústeres conectados de Anthos es igual al de realizar una instalación nueva.

Prepárate para instalar Anthos Service Mesh

  1. Antes de instalar la versión nueva, determina la revisión actual. Necesitarás esta información para borrar el webhook de validación y la webhook de mutación de tu instalación actual de Anthos Service Mesh. Usa el siguiente comando para almacenar la revisión actual de istiod en una variable de entorno:
    export DELETE_REV=$(kubectl get deploy -n istio-system -l app=istiod -o jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}')
    echo $DELETE_REV

    Deberías obtener un resultado similar a 1.12.9-asm.2

  2. Linux

  3. 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.13.9-asm.10-linux-amd64.tar.gz
  4. Descarga el archivo de firma y usa OpenSSL para verificar la firma:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.13.9-asm.10-linux-amd64.tar.gz.1.sig
    openssl dgst -verify /dev/stdin -signature istio-1.13.9-asm.10-linux-amd64.tar.gz.1.sig istio-1.13.9-asm.10.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF
  5. 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.13.9-asm.10-linux-amd64.tar.gz

    El comando crea un directorio de instalación en tu directorio de trabajo actual llamado istio-1.13.9-asm.10 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.
  6. Asegúrate de estar en el directorio raíz de la instalación de Anthos Service Mesh.
    cd istio-1.13.9-asm.10
  7. Para mayor comodidad, agrega las herramientas que contiene el directorio /bin a tu ruta de acceso PATH:
    export PATH=$PWD/bin:$PATH
  8. macOS

  9. 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.13.9-asm.10-osx.tar.gz
  10. Descarga el archivo de firma y usa OpenSSL para verificar la firma:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.13.9-asm.10-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature istio-1.13.9-asm.10-osx.tar.gz.1.sig istio-1.13.9-asm.10.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF
  11. 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.13.9-asm.10-osx.tar.gz

    El comando crea un directorio de instalación en tu directorio de trabajo actual llamado istio-1.13.9-asm.10 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.
  12. Asegúrate de estar en el directorio raíz de la instalación de Anthos Service Mesh.
    cd istio-1.13.9-asm.10
  13. Para mayor comodidad, agrega las herramientas que contiene el directorio /bin a tu ruta de acceso PATH:
    export PATH=$PWD/bin:$PATH
  14. Windows

  15. 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.13.9-asm.10-win.zip
  16. Descarga el archivo de firma y usa OpenSSL para verificar la firma:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.13.9-asm.10-win.zip.1.sig
    openssl dgst -verify - -signature istio-1.13.9-asm.10-win.zip.1.sig istio-1.13.9-asm.10.win.zip <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF
  17. 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.13.9-asm.10-win.zip

    El comando crea un directorio de instalación en tu directorio de trabajo actual llamado istio-1.13.9-asm.10 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.
  18. Asegúrate de estar en el directorio raíz de la instalación de Anthos Service Mesh.
    cd istio-1.13.9-asm.10
  19. Para mayor comodidad, agregue las herramientas que contiene el directorio /bin a su RUTA DE ACCESO.
    set PATH=%CD%\bin:%PATH%
  20. Ahora que instalaste Istio de Anthos Service Mesh, verifica la versión de istioctl:
    istioctl version
  21. Crea un espacio de nombres llamado istio-system para los componentes del plano de control:
    kubectl create namespace istio-system

Instala Anthos Service Mesh

  1. Edita tu archivo overlay.yaml o crea uno nuevo con el siguiente contenido:
    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      meshConfig:
        accessLogFile: /dev/stdout
        enableTracing: true
        accessLogFormat:
          '{"start_time":"%START_TIME%","remote_address":"%DOWNSTREAM_DIRECT_REMOTE_ADDRESS%","user_agent":"%REQ(USER-AGENT)%","host":"%REQ(:AUTHORITY)%","request":"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%","request_time":"%DURATION%","status":"%RESPONSE_CODE%","status_details":"%RESPONSE_CODE_DETAILS%","bytes_received":"%BYTES_RECEIVED%","bytes_sent":"%BYTES_SENT%","upstream_address":"%UPSTREAM_HOST%","upstream_response_flags":"%RESPONSE_FLAGS%","upstream_response_time":"%RESPONSE_DURATION%","upstream_service_time":"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%","upstream_cluster":"%UPSTREAM_CLUSTER%","x_forwarded_for":"%REQ(X-FORWARDED-FOR)%","request_method":"%REQ(:METHOD)%","request_path":"%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%","request_protocol":"%PROTOCOL%","tls_protocol":"%DOWNSTREAM_TLS_VERSION%","request_id":"%REQ(X-REQUEST-ID)%","sni_host":"%REQUESTED_SERVER_NAME%","apigee_dynamic_data":"%DYNAMIC_METADATA(envoy.lua)%"}'
      components:
        ingressGateways:
        - name: istio-ingressgateway
          enabled: true
          k8s:
            service:
              type: LoadBalancer
              ports:
              - name: status-port
                port: 15021
                targetPort: 15021
              - name: http2
                port: 80
                targetPort: 8080
              - name: https
                port: 443
                targetPort: 8443
    
  2. Instala Anthos Service Mesh con istioctl mediante el perfil asm-multicloud:
    istioctl install \
        --set profile=asm-multicloud \
        --set revision="asm-1139-10" \
        --filename overlay.yaml

    Deberías obtener un resultado similar al siguiente:

    kubectl get pods -n istio-system
    NAME                                   READY   STATUS    RESTARTS   AGE
    istio-ingressgateway-88b6fd976-flgp2   1/1     Running   0          3m13s
    istio-ingressgateway-88b6fd976-p5dl9   1/1     Running   0          2m57s
    istiod-asm-1139-10-798ffb964-2ls88       1/1     Running   0          3m21s
    istiod-asm-1139-10-798ffb964-fnj8c       1/1     Running   1          3m21s

    El argumento --set revision agrega una etiqueta de revisión con el formato istio.io/rev=asm-1139-10 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. Verifica que se haya completado la instalación:
    kubectl get svc -n istio-system

    Deberías obtener un resultado similar al siguiente:

    NAME                   TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                                                                      AGE
    istio-ingressgateway   LoadBalancer   172.200.48.52    34.74.177.168   15021:30479/TCP,80:30030/TCP,443:32200/TCP,15012:32297/TCP,15443:30244/TCP   3m35s
    istiod                 ClusterIP      172.200.18.133   <none>          15010/TCP,15012/TCP,443/TCP,15014/TCP                                        4m46s
    istiod-asm-1139-10       ClusterIP      172.200.63.220   <none>          15010/TCP,15012/TCP,443/TCP,15014/TCP                                        3m43s
  4. Cambia al nuevo plano de control:
    1. Obtén la etiqueta de revisión que está en istiod:
      kubectl get pod -n istio-system -L istio.io/rev

      El resultado del comando es similar al siguiente:

          NAME                                  READY  STATUS  RESTARTS   AGE  REV
          istiod-asm-1139-10-67998f4b55-lrzpz    1/1    Running  0         68m  asm-1129-0
          istiod-asm-1139-10-67998f4b55-r76kr    1/1    Running  0         68m  asm-1129-0
          istiod-1129-0-1-5cd96f88f6-n7tj9      1/1    Running  0         27s  asm-1139-10
          istiod-1129-0-1-5cd96f88f6-wm68b      1/1    Running  0         27s  asm-1139-10
    2. Asigna la etiqueta de revisión más reciente a una variable de entorno.

      En el resultado, en la columna REV, anota el valor de la etiqueta de revisión de la versión nueva. En este ejemplo, el valor es asm-1139-10.

      export UPGRADE_REV="REVISION_LABEL"
    3. Agrega la etiqueta de revisión al espacio de nombres istio-system y quita la etiqueta istio-injection (si existe) con el siguiente comando.
      kubectl label namespace istio-system istio.io/rev=$UPGRADE_REV istio-injection- --overwrite

      Si ves "istio-injection not found" en el resultado, puedes ignorarlo. Esto significa que el espacio de nombres no tenía la etiqueta istio-injection antes. 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.

    4. Reinicia los Pods para activar la reinserción:
      kubectl rollout restart deployment -n istio-system
    5. Prueba la aplicación para verificar que las cargas de trabajo funcionen de forma correcta.
    6. Si tienes cargas de trabajo en otros espacios de nombres, repite los pasos para etiquetar el espacio de nombres y reiniciar los pods.
  5. Borra las versiones anteriores:
    1. Navega en el directorio en el que instalaste asmcli.
    2. Crea una secuencia de comandos de shell que contenga los siguientes comandos:
      #!/bin/bash
      
      set -ex
      
      if [[ "${DELETE_REV}" != "${UPGRADE_REV}" ]]; then
        kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete deploy -l app=istio-ingressgateway-connectors,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete ValidatingWebhookConfiguration -l app=istiod,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete MutatingWebhookConfiguration -l app=sidecar-injector,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete IstioOperator installed-state-${DELETE_REV} -n istio-system --ignore-not-found=true
      fi
      
    3. Ejecuta la secuencia de comandos para borrar las versiones anteriores.

OpenShift

En estas instrucciones, el proceso para actualizar la versión istio-1.13.9-asm.10 de Anthos Service Mesh en clústeres conectados de Anthos es igual al de realizar una instalación nueva.

Prepárate para instalar Anthos Service Mesh

  1. Antes de instalar la versión nueva, determina la revisión actual. Necesitarás esta información para borrar el webhook de validación y la webhook de mutación de tu instalación actual de Anthos Service Mesh. Usa el siguiente comando para almacenar la revisión actual de istiod en una variable de entorno:
    export DELETE_REV=$(kubectl get deploy -n istio-system -l app=istiod -o jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}')
    echo $DELETE_REV

    Deberías obtener un resultado similar a 1.12.9-asm.2

  2. Linux

  3. Otorga la restricción de contexto de seguridad (SCC) anyuid al sistema istio con el siguiente comando de la CLI de OpenShift (oc):
    oc adm policy add-scc-to-group anyuid system:serviceaccounts:istio-system
  4. 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.13.9-asm.10-linux-amd64.tar.gz
  5. Descarga el archivo de firma y usa OpenSSL para verificar la firma:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.13.9-asm.10-linux-amd64.tar.gz.1.sig
    openssl dgst -verify /dev/stdin -signature istio-1.13.9-asm.10-linux-amd64.tar.gz.1.sig istio-1.13.9-asm.10.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF
  6. 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.13.9-asm.10-linux-amd64.tar.gz

    El comando crea un directorio de instalación en tu directorio de trabajo actual llamado istio-1.13.9-asm.10 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.
  7. Asegúrate de estar en el directorio raíz de la instalación de Anthos Service Mesh.
    cd istio-1.13.9-asm.10
  8. Para mayor comodidad, agrega las herramientas que contiene el directorio /bin a tu ruta de acceso PATH:
    export PATH=$PWD/bin:$PATH
  9. macOS

  10. Otorga la restricción de contexto de seguridad (SCC) anyuid al sistema istio con el siguiente comando de la CLI de OpenShift (oc):
    oc adm policy add-scc-to-group anyuid system:serviceaccounts:istio-system
  11. 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.13.9-asm.10-osx.tar.gz
  12. Descarga el archivo de firma y usa OpenSSL para verificar la firma:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.13.9-asm.10-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature istio-1.13.9-asm.10-osx.tar.gz.1.sig istio-1.13.9-asm.10.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF
  13. 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.13.9-asm.10-osx.tar.gz

    El comando crea un directorio de instalación en tu directorio de trabajo actual llamado istio-1.13.9-asm.10 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.
  14. Asegúrate de estar en el directorio raíz de la instalación de Anthos Service Mesh.
    cd istio-1.13.9-asm.10
  15. Para mayor comodidad, agrega las herramientas que contiene el directorio /bin a tu ruta de acceso PATH:
    export PATH=$PWD/bin:$PATH
  16. Windows

  17. Otorga la restricción de contexto de seguridad (SCC) anyuid al sistema istio con el siguiente comando de la CLI de OpenShift (oc):
    oc adm policy add-scc-to-group anyuid system:serviceaccounts:istio-system
  18. 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.13.9-asm.10-win.zip
  19. Descarga el archivo de firma y usa OpenSSL para verificar la firma:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.13.9-asm.10-win.zip.1.sig
    openssl dgst -verify - -signature istio-1.13.9-asm.10-win.zip.1.sig istio-1.13.9-asm.10.win.zip <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF
  20. 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.13.9-asm.10-win.zip

    El comando crea un directorio de instalación en tu directorio de trabajo actual llamado istio-1.13.9-asm.10 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.
  21. Asegúrate de estar en el directorio raíz de la instalación de Anthos Service Mesh.
    cd istio-1.13.9-asm.10
  22. Para mayor comodidad, agregue las herramientas que contiene el directorio /bin a su RUTA DE ACCESO.
    set PATH=%CD%\bin:%PATH%
  23. Ahora que instalaste Istio de Anthos Service Mesh, verifica la versión de istioctl:
    istioctl version
  24. 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.

  1. Crea un archivo istiod-service.yaml con el siguiente contenido:
    apiVersion: v1
    kind: Service
    metadata:
      name: istiod
      namespace: istio-system
      labels:
        istio.io/rev: asm-1139-10
        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-1139-10
      meshConfig:
        accessLogFormat:
          '{"start_time":"%START_TIME%","remote_address":"%DOWNSTREAM_DIRECT_REMOTE_ADDRESS%","user_agent":"%REQ(USER-AGENT)%","host":"%REQ(:AUTHORITY)%","request":"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%","request_time":"%DURATION%","status":"%RESPONSE_CODE%","status_details":"%RESPONSE_CODE_DETAILS%","bytes_received":"%BYTES_RECEIVED%","bytes_sent":"%BYTES_SENT%","upstream_address":"%UPSTREAM_HOST%","upstream_response_flags":"%RESPONSE_FLAGS%","upstream_response_time":"%RESPONSE_DURATION%","upstream_service_time":"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%","upstream_cluster":"%UPSTREAM_CLUSTER%","x_forwarded_for":"%REQ(X-FORWARDED-FOR)%","request_method":"%REQ(:METHOD)%","request_path":"%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%","request_protocol":"%PROTOCOL%","tls_protocol":"%DOWNSTREAM_TLS_VERSION%","request_id":"%REQ(X-REQUEST-ID)%","sni_host":"%REQUESTED_SERVER_NAME%","apigee_dynamic_data":"%DYNAMIC_METADATA(envoy.lua)%"}'
  2. Usa kubectl para aplicar la configuración de webhook de validación:
    kubectl apply -f istiod-service.yaml
  3. Verifica si se aplicó la configuración:
    kubectl get svc -n istio-system

    La respuesta debería ser similar a la siguiente:

    NAME     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                 AGE
    istiod   ClusterIP   172.200.18.133   <none>        15010/TCP,15012/TCP,443/TCP,15014/TCP   22s

Instala Anthos Service Mesh

  1. Edita tu archivo overlay.yaml o crea uno nuevo con el siguiente contenido:
    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      meshConfig:
        accessLogFile: /dev/stdout
        enableTracing: true
        accessLogFormat:
          '{"start_time":"%START_TIME%","remote_address":"%DOWNSTREAM_DIRECT_REMOTE_ADDRESS%","user_agent":"%REQ(USER-AGENT)%","host":"%REQ(:AUTHORITY)%","request":"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%","request_time":"%DURATION%","status":"%RESPONSE_CODE%","status_details":"%RESPONSE_CODE_DETAILS%","bytes_received":"%BYTES_RECEIVED%","bytes_sent":"%BYTES_SENT%","upstream_address":"%UPSTREAM_HOST%","upstream_response_flags":"%RESPONSE_FLAGS%","upstream_response_time":"%RESPONSE_DURATION%","upstream_service_time":"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%","upstream_cluster":"%UPSTREAM_CLUSTER%","x_forwarded_for":"%REQ(X-FORWARDED-FOR)%","request_method":"%REQ(:METHOD)%","request_path":"%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%","request_protocol":"%PROTOCOL%","tls_protocol":"%DOWNSTREAM_TLS_VERSION%","request_id":"%REQ(X-REQUEST-ID)%","sni_host":"%REQUESTED_SERVER_NAME%","apigee_dynamic_data":"%DYNAMIC_METADATA(envoy.lua)%"}'
      components:
        ingressGateways:
          - name: istio-ingressgateway
            enabled: true
            k8s:
              service:
                type: LoadBalancer
                ports:
                - name: status-port
                  port: 15021
                  targetPort: 15021
                - name: http2
                  port: 80
                  targetPort: 8080
                - name: https
                  port: 443
                  targetPort: 8443
    
  2. Instala Anthos Service Mesh con istioctl mediante el perfil asm-multicloud:
    istioctl install \
        --set profile=asm-multicloud \
        --set revision="asm-1139-10" \
        --filename overlayfile.yaml

    Deberías obtener un resultado similar al siguiente:

    kubectl get pods -n istio-system
    NAME                                   READY   STATUS    RESTARTS   AGE
    istio-ingressgateway-88b6fd976-flgp2   1/1     Running   0          3m13s
    istio-ingressgateway-88b6fd976-p5dl9   1/1     Running   0          2m57s
    istiod-asm-1139-10-798ffb964-2ls88       1/1     Running   0          3m21s
    istiod-asm-1139-10-798ffb964-fnj8c       1/1     Running   1          3m21s

    El argumento --set revision agrega una etiqueta de revisión con el formato istio.io/rev=1.6.11-asm.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. Verifica que se haya completado la instalación:
    kubectl get svc -n istio-system

    Deberías obtener un resultado similar al siguiente:

    NAME                   TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                                                                      AGE
    istio-ingressgateway   LoadBalancer   172.200.48.52    34.74.177.168   15021:30479/TCP,80:30030/TCP,443:32200/TCP,15012:32297/TCP,15443:30244/TCP   3m35s
    istiod                 ClusterIP      172.200.18.133   <none>          15010/TCP,15012/TCP,443/TCP,15014/TCP                                        4m46s
    istiod-asm-1139-10       ClusterIP      172.200.63.220   <none>          15010/TCP,15012/TCP,443/TCP,15014/TCP                                        3m43s
  4. Cambia al nuevo plano de control:
    1. Obtén la etiqueta de revisión que está en istiod:
      kubectl get pod -n istio-system -L istio.io/rev

      El resultado del comando es similar al siguiente:

          NAME                                  READY  STATUS  RESTARTS   AGE  REV
          istiod-asm-1139-10-67998f4b55-lrzpz    1/1    Running  0         68m  asm-1129-0
          istiod-asm-1139-10-67998f4b55-r76kr    1/1    Running  0         68m  asm-1129-0
          istiod-1129-0-1-5cd96f88f6-n7tj9      1/1    Running  0         27s  asm-1139-10
          istiod-1129-0-1-5cd96f88f6-wm68b      1/1    Running  0         27s  asm-1139-10
    2. Asigna la etiqueta de revisión más reciente a una variable de entorno.

      En el resultado, en la columna REV, anota el valor de la etiqueta de revisión de la versión nueva. En este ejemplo, el valor es asm-1139-10.

      export UPGRADE_REV="REVISION_LABEL"
    3. Agrega la etiqueta de revisión al espacio de nombres istio-system y quita la etiqueta istio-injection (si existe) con el siguiente comando.
      kubectl label namespace istio-system istio.io/rev=$UPGRADE_REV istio-injection- --overwrite

      Si ves "istio-injection not found" en el resultado, puedes ignorarlo. Esto significa que el espacio de nombres no tenía la etiqueta istio-injection antes. 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.

    4. Reinicia los Pods para activar la reinserción:
      kubectl rollout restart deployment -n istio-system
    5. Prueba la aplicación para verificar que las cargas de trabajo funcionen de forma correcta.
    6. Si tienes cargas de trabajo en otros espacios de nombres, repite los pasos para etiquetar el espacio de nombres y reiniciar los pods.
  5. Borra las versiones anteriores:
    1. Navega en el directorio en el que instalaste asmcli.
    2. Crea una secuencia de comandos de shell que contenga los siguientes comandos:
      #!/bin/bash
      
      set -ex
      
      if [[ "${DELETE_REV}" != "${UPGRADE_REV}" ]]; then
        kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete deploy -l app=istio-ingressgateway-connectors,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete ValidatingWebhookConfiguration -l app=istiod,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete MutatingWebhookConfiguration -l app=sidecar-injector,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete IstioOperator installed-state-${DELETE_REV} -n istio-system --ignore-not-found=true
      fi
      
    3. Ejecuta la secuencia de comandos para borrar las versiones anteriores.

Revierte una actualización

Sigue estos pasos para revertir una actualización anterior:

  1. Limpia los trabajos completados del espacio de nombres del entorno de ejecución híbrido, en el que NAMESPACE es el espacio de nombres especificado en el archivo de anulaciones, si especificaste un espacio de nombres. De lo contrario, el espacio de nombres predeterminado será apigee:
    kubectl delete job -n NAMESPACE \
      $(kubectl get job -n NAMESPACE \
      -o=jsonpath='{.items[?(@.status.succeeded==1)].metadata.name}')
  2. Limpia los trabajos completados del espacio de nombres apigee-system:
    kubectl delete job -n apigee-system \
      $(kubectl get job -n apigee-system \
      -o=jsonpath='{.items[?(@.status.succeeded==1)].metadata.name}')
  3. Cambia la variable APIGEECTL_HOME para que apunte al directorio que contiene la versión previa de apigeectl. Por ejemplo:
    export APIGEECTL_HOME=PATH_TO_PREVIOUS_APIGEECTL_DIRECTORY
  4. Deshace los cambios en tu archivo overrides:
    1. Quita o marca como comentario ingressGateways y todas sus propiedades.
    2. Configura el valor de virtualhosts.selector.app como el valor anterior, por ejemplo:
      virtualhosts:
        - name: my-env-group
          selector:
            app: istio-ingressgateway
    3. Quita o marca como comentario ao.args.disableIstioConfigInAPIServer.
  5. En el directorio raíz de la instalación a la que deseas revertir, ejecuta apigeectl apply, verifica el estado de los Pods y, luego, ejecuta apigeectl init. Asegúrate de usar el archivo de anulaciones original para la versión a la que deseas revertir:
    1. En el directorio archivos híbridos, ejecuta apigeectl apply:
      $APIGEECTL_HOME/apigeectl apply -f ORIGINAL_OVERRIDES_FILE

      En el ejemplo anterior, ORIGINAL_OVERRIDES_FILE es la ruta relativa y el nombre de archivo del archivo de anulación de la instalación híbrida de la versión anterior, por ejemplo, ./overrides/overrides1.7.yaml.

    2. Verifica el estado de los pods:
      kubectl -n NAMESPACE get pods

      En el ejemplo anterior, NAMESPACE es el espacio de nombres híbrido de Apigee.

    3. Verifica el estado de apigeeds:
      kubectl describe apigeeds -n apigee

      Deberías obtener un resultado similar al siguiente:

      Status:
        Cassandra Data Replication:
        Cassandra Pod Ips:
          10.8.2.204
        Cassandra Ready Replicas:  1
        Components:
          Cassandra:
            Last Successfully Released Version:
              Revision:  v1-f8aa9a82b9f69613
              Version:   v1
            Replicas:
              Available:  1
              Ready:      1
              Total:      1
              Updated:    1
            State:        running
        Scaling:
          In Progress:         false
          Operation:
          Requested Replicas:  0
        State:                 running

      Continúa con el siguiente paso solo cuando el Pod apigeeds esté en ejecución.

    4. Ejecuta el siguiente comando para tomar nota de los valores nuevos de cantidad de réplicas del procesador de mensajes después de la actualización. Si estos valores no coinciden con lo que configuraste antes, cambia los valores en el archivo de anulación para que coincidan con tu configuración anterior.
      apigeectl apply -f ORIGINAL_OVERRIDES_FILE --dry-run=client --print-yaml --env ENV_NAME 2>/dev/null |grep "runtime:" -A 25 -B 1| grep "autoScaler" -A 2

      Deberías obtener un resultado similar al siguiente:

            autoScaler:
              minReplicas: 2
              maxReplicas: 10
    5. Si reviertes a la versión 1.8.4 de Hybrid o una anterior, borra la implementación del controlador que usa la versión 1.8.5 de Hybrid y versiones posteriores:
      kubectl -n apigee-system delete deploy apigee-controller-manager
    6. Ejecuta apigeectl init:
      $APIGEECTL_HOME/apigeectl init -f ORIGINAL_OVERRIDES_FILE
  6. Borra la implementación del administrador de puerta de enlace de entrada de Apigee. Este componente solo es relevante para las versiones de Apigee Hybrid 1.8 y posteriores.
    kubectl delete deployment -n NAMESPACE apigee-ingress-gateway-manager

    En el ejemplo anterior, NAMESPACE es el espacio de nombres híbrido de Apigee.