Desinstala Cloud Service Mesh administrado

En esta página, se explica cómo desinstalar Cloud Service Mesh administrado. Si desinstalas Cloud Service Mesh en el clúster, sigue la guía de desinstalación en el clúster.

Si usas una configuración heredada con varios planos de control aprovisionados, seguir estas instrucciones quitará todos los planos de control aprovisionados.

No se admiten los planos de control administrados por asmcli para la desinstalación, pero sí los clústeres que tienen planos de control administrados por asmcli --managed o por la API de malla. Si no estás seguro del plano de control, ejecuta el siguiente comando:

kubectl get controlplanerevisions -n istio-system -l 'app.kubernetes.io/created-by!=asmcli'

Se admite la desinstalación si aparece algún elemento en el resultado.

Desinstala Cloud Service Mesh

Usa los siguientes comandos para desinstalar todos los componentes de Cloud Service Mesh.

  1. Para evitar la interrupción del tráfico de la aplicación:

    • Cambia las políticas STRICT de mTLS a PERMISSIVE.
    • Quita cualquier AuthorizationPolicy que pueda bloquear el tráfico.
  2. Inhabilita varios clústeres si hay otros clústeres que ejecutan la detección de extremos en el clúster que desinstalas.

    kubectl patch configmap/asm-options -n istio-system --type merge -p '{"data":{"multicluster_mode":"manual"}}'
    
  3. Busca los secretos que requieran limpieza y, luego, bórralos:

    kubectl get secrets -n istio-system -l istio/multiCluster=true
    
    kubectl delete secret SECRET_NAME
    

    En el ejemplo anterior, SECRET_NAME es el nombre del secreto. Repite este paso para cada secreto que aparece en la lista.

  4. Inhabilita la inserción automática de sidecar en tus espacios de nombres. Si está habilitada: Ejecuta el siguiente comando para mostrar las etiquetas del espacio de nombres:

     kubectl get namespace YOUR_NAMESPACE --show-labels
    

    El resultado es similar a este:

     NAME   STATUS   AGE     LABELS
     demo   Active   4d17h   istio.io/rev=asm-181-5

    1. Si ves istio.io/rev= en el resultado en la columna LABELS, quítalo:

       kubectl label namespace YOUR_NAMESPACE istio.io/rev-
      
    2. Si ves istio-injection en el resultado en la columna LABELS, quítalo:

       kubectl label namespace YOUR_NAMESPACE istio-injection-
      
    3. Si no ves las etiquetas istio.io/rev ni istio-injection, significa que la inserción automática no estaba habilitada en el espacio de nombres.

  5. Reinicia tus cargas de trabajo que tienen incorporados sidecars para quitar los proxies.

  6. Verifica que no haya proxies conectados al plano de control administrado:

      kubectl get pods --all-namespaces -o json | jq -r '
      .items[] |
      select(
         .spec.containers[].env[]? |
         select(.name == "PROXY_CONFIG" and (.value | contains("\"discoveryAddress\":\"meshconfig.googleapis.com:443\"")))
      ) |
      "\(.metadata.namespace)\t\(.metadata.name)"
      '
    
  7. Actualiza la administración de especificaciones de membresía de la función de malla a not-installed:

     gcloud alpha container fleet mesh update \
       --project FLEET_PROJECT_ID \
       --memberships MEMBERSHIP_NAME \
       --location MEMBERSHIP_LOCATION \
       --management not-installed
    

    Reemplaza lo siguiente:

    • MEMBERSHIP_NAME es el nombre de membresía que aparece cuando verificaste que tu clúster estaba registrado en la flota.
    • MEMBERSHIP_LOCATION es la ubicación de tu membresía (una región o global).
  8. Verifica que el estado de la membresía de la función de malla para el estado del plano de control sea DISABLED.

    gcloud container fleet mesh describe --project FLEET_PROJECT_ID
    

    El resultado es similar al siguiente:

     servicemesh:
       controlPlaneManagement:
         details:
         - code: DISABLED
           details: Control Plane Management is not enabled.
         state: DISABLED
       dataPlaneManagement:
         details:
         - code: DISABLED
           details: Data Plane Management is not enabled.
         state: DISABLED
     state:
       description: 'Please see https://cloud.google.com/service-mesh/docs/install for instructions to onboard to Anthos Service Mesh.'
    ...
    

    Si el estado del plano de control es DEPROVISIONING, vuelve a verificarlo después de unos minutos.

    1. Si el estado del plano de control es STALLED, la desinstalación no puede funcionar debido a una condición de error interna. Si el problema persiste, comunícate con el equipo de asistencia.
  9. De manera opcional, quita los CR de Istio, las CRD de Istio, el ConfigMap istio-(revision), el ConfigMap asm-options y el espacio de nombres istio-system para quitar la malla de servicios del clúster o usarlos en otra malla de servicios compatible con la API de Istio.

    1. Quita los CR de Istio:

      kubectl delete gateways,virtualservices,destinationrules,serviceentries,envoyfilters,sidecars,peerauthentications,requestauthentications,authorizationpolicies,telemetries,wasmplugins,proxyconfigs --all --all-namespaces
      
    2. Quita las CRD de Istio:

      kubectl get crds -o name | grep --color=never 'istio.io' | xargs kubectl delete
      
    3. Quita el ConfigMap istio-(revision). Puedes omitir este paso si borras el espacio de nombres istio-system.

      kubectl delete configmap istio-RELEASE_CHANNEL -n istio-system
      

      Reemplaza RELEASE_CHANNEL por tu canal de versiones (asm-managed, asm-managed-stable o asm-managed-rapid).

    4. Quita el ConfigMap asm-options:

      kubectl delete configmap asm-options -n istio-system
      
    5. Quita el espacio de nombres istio-system:

      kubectl delete namespace istio-system --ignore-not-found=true
      
    6. Verifica si las eliminaciones se realizaron de forma correcta:

      kubectl get ns
      

      El resultado debe indicar un estado Terminating y mostrarse como se indica. De lo contrario, es posible que debas borrar de forma manual los recursos restantes en los espacios de nombres y volver a intentarlo.

      NAME                 STATUS       AGE
      istio-system         Terminating  71m
      
  10. Si usas Certificate Authority Service, limpia los permisos y el grupo de AC creados mientras configuras Certificate Authority Service para Cloud Service Mesh administrado.

  11. Si habilitaste la configuración predeterminada de la flota de Cloud Service Mesh administrado y quieres inhabilitarla para clústeres futuros, inhabilítala. Puedes omitir este paso si solo desinstalas desde un solo clúster.

     gcloud container hub mesh disable --fleet-default-member-config --project FLEET_PROJECT_ID
    

    En el ejemplo anterior, FLEET_PROJECT_ID es el ID de tu proyecto host de la flota.

  12. Si planeas dejar de usar Cloud Service Mesh a nivel de la flota, inhabilita la función de malla de servicios para tu proyecto host de la flota.

     gcloud container hub mesh disable --project FLEET_PROJECT_ID
    

    En el ejemplo anterior, FLEET_PROJECT_ID es el ID de tu proyecto host de la flota.

Una vez que se completan estos pasos, todos los componentes de Cloud Service Mesh, incluidos los proxies, las autoridades certificadoras y los roles y vinculaciones de RBAC, se quitan de forma sistemática del clúster. Durante el proceso de instalación, se otorgan los permisos necesarios a una cuenta de servicio propiedad de Google para establecer los recursos de la malla de servicios dentro del clúster. Estas instrucciones de desinstalación no revocan estos permisos, lo que permite una reactivación sin problemas de Cloud Service Mesh en el futuro.