Cómo migrar del controlador de servicios canónicos en el clúster al controlador de servicios canónicos administrado

Nota: Los servicios canónicos son compatibles de forma automática en Cloud Service Mesh versión 1.6.8 y versiones posteriores.

En esta guía, se describen los pasos para migrar del controlador de servicios canónicos del clúster al controlador de servicios canónicos administrado.

El controlador del servicio canónico en el clúster dejó de estar disponible y ya no recibirá actualizaciones. Si bien las implementaciones existentes del controlador en el clúster seguirán funcionando, te recomendamos que migres al controlador de servicios de Canonical administrado para garantizar la compatibilidad con versiones futuras, el acceso a las funciones más recientes y la asistencia continua. Todas las instalaciones de Cloud Service Mesh con asmcli a partir de la versión 1.25 se aprovisionarán con el controlador de servicios canónicos administrado.

1. Habilita la función de flota de Cloud Service Mesh

El controlador de servicios canónicos administrado se instala como parte de la función de flota de Cloud Service Mesh, que se habilita con el siguiente comando:

  gcloud container fleet mesh enable --project FLEET_PROJECT_ID
  

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

Ten en cuenta que, si planeas registrar varios clústeres, la habilitación de Cloud Service Mesh ocurre a nivel de la flota, por lo que solo tendrás que ejecutar este comando una vez.

Otorga permisos a las cuentas de servicio de Cloud Service Mesh

Si el proyecto de tu clúster difiere del proyecto host de la flota, debes permitir que las cuentas de servicio de Cloud Service Mesh en el proyecto de la flota accedan al proyecto del clúster.

Solo debes hacerlo una vez para cada proyecto de clúster. Si anteriormente configuraste Cloud Service Mesh administrado para esta combinación de proyectos de clúster y flota, estos cambios ya se aplicaron y no tienes que ejecutar los siguientes comandos.

Otorga permiso a las cuentas de servicio del proyecto de flota para acceder al proyecto del clúster:

  gcloud projects add-iam-policy-binding "CLUSTER_PROJECT_ID" \
    --member "serviceAccount:service-FLEET_PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com" \
    --role roles/anthosservicemesh.serviceAgent

Reemplaza CLUSTER_PROJECT_ID por el ID de tu clúster y FLEET_PROJECT_NUMBER por el número de tu flota.

Para determinar el número de proyecto de tu flota, consulta las instrucciones en el documento sobre proyectos de Google Cloud.

2. Inhabilita el controlador de servicios canónicos en el clúster

El controlador del servicio canónico administrado no puede funcionar junto con el controlador del servicio canónico en el clúster. Por lo tanto, debes inhabilitar el controlador dentro del clúster.

  1. Verifica si hay un controlador en el clúster: Verifica si el controlador canónico en el clúster está presente.

    kubectl get deployment canonical-service-controller-manager -n asm-system
    
  2. Borra el controlador en el clúster: Si se encuentra la implementación, puedes borrarla (y todo el espacio de nombres asm-system) ejecutando el siguiente comando:

    kubectl delete namespace asm-system
    

3. Verifica que el controlador canónico administrado esté en funcionamiento

El controlador del servicio canónico administrado informa su estado en el estado de la función, por lo que puedes confirmar que la instalación funciona correctamente verificando el estado de la función:

  1. Verifica el estado de la función: Recupera el estado de la función con el siguiente comando:

    gcloud container fleet mesh describe --project FLEET_PROJECT_ID
    
  2. Verifica el estado: Verifica el estado de tu clúster y comprueba que state.code sea OK.

    Resultado de ejemplo:

    membershipStates:
        projects/<project-number>/locations/<location>/memberships/<membership-name>:
          state:
            code: OK
            description:
              Revision(s) ready for use: istiod-asm-183-2.
    
  3. Comprueba que el controlador de servicio canónico administrado funcione: Para verificar que el controlador de servicio canónico administrado funcione correctamente, implementa un pod con un contenedor lateral insertado y comprueba si el controlador crea automáticamente el servicio canónico correspondiente.

    1. Crea un espacio de nombres con la inserción automática de sidecar habilitada:

      kubectl create namespace NAMESPACE_NAME
      

      Sigue la sección Habilita la inserción automática de sidecar para habilitar la inserción automática de sidecar en el espacio de nombres creado recientemente.

    2. Crea un archivo YAML llamado simple_pod.yaml con el siguiente contenido:

          apiVersion: v1
          kind: Pod
          metadata:
            name: simple-pod
            labels:
              app: my-app
          spec:
            containers:
            - name: my-container
              image: nginx:latest
              ports:
              - containerPort: 80
      

      La etiqueta app determina el nombre del servicio canónico. Para obtener más información, consulta Define un servicio canónico.

    3. Implementa el pod con el siguiente comando. Reemplaza NAMESPACE_NAME por el nombre del espacio de nombres en el que habilitaste la inserción automática de sidecar.

      kubectl apply -f simple_pod.yaml -n NAMESPACE_NAME
      
    4. Confirma que se haya creado el pod:

      kubectl get pods -n NAMESPACE_NAME
      

      Resultado de ejemplo:

      NAME                             READY   STATUS    RESTARTS   AGE
      simple-pod                       2/2     Running   0          9s
      

      Note: Confirma que la columna READY muestre 2/2. Esto indica que tanto el contenedor principal como el proxy del sidecar se ejecutan correctamente. Si ves un valor diferente, es probable que la inserción automática de sidecar no esté habilitada para el espacio de nombres.

    5. Verifica la creación del servicio canónico: Ejecuta el siguiente comando para enumerar todos los servicios canónicos del espacio de nombres. Verifica que se haya creado el servicio canónico my-app.

      kubectl get canonicalservices -n NAMESPACE_NAME
      

      Resultado de ejemplo:

        NAME          AGE
        my-app        3s
      
    6. Limpieza: Borra el pod, el servicio canónico y el espacio de nombres:

      kubectl delete -f simple_pod.yaml -n NAMESPACE_NAME
      kubectl delete canonicalservices my-app -n NAMESPACE_NAME
      kubectl delete namespace NAMESPACE_NAME
      

    Solución de problemas:

Regresa al controlador de servicios canónicos en el clúster

Si tienes problemas con el controlador de servicios canónicos administrado, puedes reinstalar el controlador en el clúster con el siguiente comando:

  kubectl apply -f \
  https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-service-mesh-packages/release-1.25/asm/canonical-service/controller.yaml

¿Qué sigue?

Obtén más información acerca de los siguientes temas: