Información sobre la compatibilidad de Cloud Service Mesh

La implementación del plano de control de ISTIOD está obsoleta, por lo que debes evaluar la compatibilidad, resolver las condiciones de bloqueo en todas tus flotas y modernizar antes de la fecha límite de fin de la asistencia.

En esta guía, se detalla cómo evaluar la compatibilidad de una flota para la modernización del plano de control. Para ello, se confirma que su configuración, infraestructura y escala sean compatibles con la implementación del plano de control de TRAFFIC_DIRECTOR.

Cómo habilitar o inhabilitar las verificaciones de compatibilidad

Para iniciar las verificaciones de compatibilidad, habilita el modo de validación para la flota, lo que activará una auditoría continua de todos los parámetros de configuración de Istio, de infraestructura y de escala. Habilitar estas verificaciones no realiza ningún cambio en tu flota ni en tus clústeres, solo habilita la generación de informes de compatibilidad.

Habilita las verificaciones

Para comenzar la auditoría de compatibilidad, ejecuta el siguiente comando gcloud:

gcloud alpha container fleet mesh update --modernization-compatibility validation-enabled --project FLEET_PROJECT_ID

Reemplaza FLEET_PROJECT_ID por el ID de tu proyecto host de flota. Por lo general, el FLEET_PROJECT_ID tiene el mismo nombre que el proyecto.

Una vez habilitado, Cloud Service Mesh comienza a evaluar la flota y todos los clústeres aprovisionados de Cloud Service Mesh en la flota para determinar la compatibilidad con la modernización.

Inhabilita las verificaciones

Para detener el envío de informes sobre los resultados de compatibilidad, ejecuta el siguiente comando:

gcloud alpha container fleet mesh update --modernization-compatibility validation-disabled --project FLEET_PROJECT_ID

Este comando quita las condiciones de compatibilidad de modernización de los estados de membresía, así como el estado ModernizationCompatible de los CR de Istio individuales.

Comprende la compatibilidad

La compatibilidad con la modernización se informa con condiciones a nivel de la flota y de la membresía (clúster). El sistema realiza varias verificaciones en diferentes momentos, y todas se ejecutan al menos una vez al día. Espera hasta un día para que se actualice el estado después de habilitar las verificaciones o aplicar las correcciones.

Para ver estos resultados, recupera el estado de malla más reciente con el siguiente comando:

gcloud container fleet mesh describe --project FLEET_PROJECT_ID

Compatibilidad a nivel de la flota

Consulta el estado general de modernización de tu flota en state.servicemesh.conditions.

  • La flota es compatible: Si tu flota es compatible, verás una condición con el código MODERNIZATION_COMPATIBLE:

    name: projects/project_id/locations/global/features/servicemesh
    state:
      servicemesh:
        conditions:
        - code: MODERNIZATION_COMPATIBLE
          details: 'Fleet is eligible for modernization.'
          documentationLink: https://cloud.google.com/service-mesh/...
          severity: INFO
    
  • La flota no es compatible: Si tu flota aún no es compatible con la modernización, verás una condición con el código MODERNIZATION_INCOMPATIBLE:

    name: projects/project_id/locations/global/features/servicemesh
    state:
      servicemesh:
        conditions:
        - code: MODERNIZATION_INCOMPATIBLE
          details: 'Fleet is not yet eligible for modernization.'
          documentationLink: https://cloud.google.com/service-mesh/...
          severity: INFO
    

    Si tu flota es incompatible, revisa las condiciones para las brechas específicas. Verifica si hay condiciones adicionales a nivel de la flota con gravedad WARNING o ERROR, así como condiciones a nivel del clúster en membershipStates.servicemesh para resolver cualquier bloqueo.

Compatibilidad a nivel del clúster

Busca condiciones con gravedad WARNING o ERROR en membershipStates.servicemesh para cada clúster aprovisionado de Cloud Service Mesh en la flota. Si existen incompatibilidades, el resultado es similar al siguiente:

membershipSpecs:
 projects/project_id/locations/global/memberships/cluster-a:
   mesh:
     management:MANAGEMENT_AUTOMATIC
membershipStates:
  projects/project_id/locations/global/memberships/cluster-a:
    servicemesh:
      conditions:
     - code: MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION
       details: 'Pod pod-a in namespace test-namespace: invalid annotations: ["status.sidecar.istio.io/port": failed to parse port - "invalid", port must be a number and should be in the range 1..65535]; unsupported annotations: ["ambient.istio.io/redirection"] .'
       documentationLink: https://cloud.google.com/service-mesh/...
       severity: WARNING
     - code: WORKLOAD_IDENTITY_REQUIRED
       details: 'Workload Identity is not enabled for the cluster or at least one of the node pools.'
       documentationLink: https://cloud.google.com/...
       severity: ERROR
...

Sigue las documentationLinkinstrucciones que se proporcionan en cada condición para comprender y resolver la incompatibilidad específica.

Cómo resolver problemas de compatibilidad

Cómo resolver anotaciones de Pod incompatibles

El código MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION indica que el clúster no se puede modernizar al plano de control TRAFFIC_DIRECTOR porque ciertos Pods tienen anotaciones de Istio no admitidas o no válidas.

Ejemplo de resultado del comando gcloud container fleet mesh describe con la condición MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION establecida para la membresía:

membershipStates:
  projects/project_id/locations/global/memberships/membership-a:
    servicemesh:
      conditions:
     - code: MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION
       details: 'Pod pod-a in namespace test-namespace: invalid annotations: ["status.sidecar.istio.io/port": failed to parse port - "invalid", port must be a number and should be in the range 1..65535]; unsupported annotations: ["ambient.istio.io/redirection"] .'
       documentationLink: https://cloud.google.com/service-mesh/...
       severity: WARNING

Para resolver estas anotaciones de Pod, haz lo siguiente:

  1. Identifica las anotaciones problemáticas: Verifica el campo details de la condición de estado para encontrar las claves de anotación no admitidas o no válidas. Busca todos los Pods con las claves de anotación problemáticas.

  2. Corrige y verifica:

    1. Modifica las especificaciones YAML de tus Deployments o Pods para asegurarte de que solo usen anotaciones compatibles (todas las demás anotaciones no son compatibles). Quita las anotaciones no admitidas, corrige los valores no válidos y vuelve a aplicar el archivo YAML actualizado a tu clúster.
    2. Una vez que se corrijan todas las anotaciones del Pod, la condición MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION dejará de aparecer para esa membresía.

Cómo resolver configuraciones incompatibles

El código MODERNIZATION_INCOMPATIBLE_CONFIG indica que el clúster no se puede modernizar al plano de control TRAFFIC_DIRECTOR debido a configuraciones incompatibles. Estas incompatibilidades pueden deberse a los siguientes motivos:

  • Recursos personalizados (CR) específicos de Istio que usan funciones o campos no admitidos, o que contienen valores no válidos
  • La configuración de Istio MeshConfig no es válida o no se admite.
  • Se superaron los límites de escalabilidad.
  • Uso de anotaciones de espacio de nombres o servicio no admitidas

Ejemplo de resultado del comando gcloud container fleet mesh describe con la condición MODERNIZATION_INCOMPATIBLE_CONFIG establecida para la membresía:

membershipSpecs:
 projects/project_id/locations/global/memberships/membership-a:
   mesh:
     management:MANAGEMENT_AUTOMATIC
membershipStates:
  projects/project_id/locations/global/memberships/membership-a:
    servicemesh:
      conditions:
     - code: MODERNIZATION_INCOMPATIBLE_CONFIG
       details: 'One or more configs have warnings. Due to the following reason(s): Istio sidecar scale exceeds limit, MeshConfig "accessLogFile" is unsupported. Invalid Config Types: [Gateway, ServiceEntry], where more details are shown on individual config resources.See documentation link for more detail.'
       documentationLink: https://cloud.google.com/service-mesh/...
       severity: WARNING

Para resolver estos problemas de configuración, haz lo siguiente:

  1. Analiza los detalles de la condición: Verifica el campo details de la condición de estado. Resume los errores individuales y, luego, identifica los tipos de recursos con problemas de configuración. En el ejemplo de detalles proporcionados, deberás abordar los problemas de escala y MeshConfig, y revisar los recursos Gateway y ServiceEntry para detectar errores.

  2. Identifica y analiza los recursos incompatibles: Usa el siguiente ejemplo de secuencia de comandos para enumerar los recursos personalizados (CR) de Istio que no superan las verificaciones de compatibilidad. Esta secuencia de comandos se proporciona como ejemplo. Revísala y analízala para asegurarte de que cumpla con los requisitos operativos y de tu entorno antes de ejecutarla en tu clúster. La secuencia de comandos requiere que se instalen kubectl y jq. El resultado incluye los detalles específicos del error que se encuentran en status.conditions (tipo: ModernizationCompatible, estado: "False") de cada recurso.

    for resource in authorizationpolicies destinationrules envoyfilters gateways peerauthentications proxyconfigs requestauthentications serviceentries sidecars telemetries virtualservices wasmplugins workloadentries workloadgroups; do
      echo "--- Checking $resource ---"
      kubectl get $resource --all-namespaces -o json | \
      jq -r '.items[] | select(.status.conditions != null and any(.status.conditions[]; .type == "ModernizationCompatible" and .status == "False")) | {"kind": .kind, "name": .metadata.name, "namespace": .metadata.namespace, "message": [.status.conditions[] | select(.type == "ModernizationCompatible").message]}'
    done
    

    Resultado de ejemplo:

    --- Checking serviceentries ---
    {
      "kind": "ServiceEntry",
      "name": "demo-service-entry",
      "namespace": "se",
      "message": [
        "WARNING: unsupported resolution type: DNS_ROUND_ROBIN"
      ]
    }
    ..
    --- Checking workloadentries ---
    {
      "kind": "WorkloadEntry",
      "name": "demo-we",
      "namespace": "default",
      "message": [
        "WARNING: This API is not supported"
      ]
    }
    
  3. Corrige y aplica la configuración: Modifica tu archivo YAML quitando los campos no admitidos o reemplazando los valores no válidos por otros compatibles. Para obtener ayuda, consulta la documentación sobre las funciones admitidas de Cloud Service Mesh administrado y las APIs de Istio no admitidas. (Por ejemplo, en el ejemplo proporcionado, actualiza la resolución ServiceEntry de DNS_ROUND_ROBIN a DNS).

  4. Verifica las correcciones: Después de aplicar las correcciones, espera hasta 24 horas para que las verificaciones periódicas actualicen el estado.

    • La condición ModernizationCompatible en los recursos fijos debería cambiar al estado: "True". Verifica el estado del recurso con el siguiente comando:

      kubectl get resource name -n namespace -o yaml
      

      Resultado de ejemplo:

      status:
        conditions:
        - lastTransitionTime: "2026-06-05T06:12:52.219963391Z"
          message: Resource is compatible for modernization
          reason: Compatible
          status: "True"
          type: ModernizationCompatible
      
    • Vuelve a ejecutar el comando gcloud container fleet mesh describe. Una vez que se resuelvan todos los problemas relacionados, la condición MODERNIZATION_INCOMPATIBLE_CONFIG ya no aparecerá para esa membresía.

Cómo resolver problemas de escala de flota incompatible

El código MODERNIZATION_INCOMPATIBLE_FLEET_SCALE indica que la flota no se puede modernizar al plano de control TRAFFIC_DIRECTOR porque la escala de recursos en toda la flota supera los límites admitidos para la modernización.

En esta fase, admitimos la modernización de flotas con los siguientes límites: