Rota la IP del plano de control


En esta página, se explica cómo realizar una rotación de IP para tu plano de control en los clústeres de Google Kubernetes Engine (GKE) que ejecutan la versión 1.16.10-gke.8 y posteriores.

Descripción general

Puedes realizar una rotación de IP para cambiar la dirección IP que usa tu plano de control a fin de entregar solicitudes desde la API de Kubernetes. La dirección IP del plano de control es estática y no cambia, a menos que realices una rotación de IP.

La rotación de IP cambia el certificado SSL y la autoridad certificadora (CA) del clúster, lo que limita la capacidad de conectar la dirección anterior con la nueva.

La rotación de IP también se produce como parte de la rotación de credenciales.

Antes de comenzar

Antes de comenzar, asegúrate de haber realizado las siguientes tareas:

  • Habilita la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa la CLI de gcloud. Si ya instalaste la CLI de gcloud, ejecuta gcloud components update para obtener la versión más reciente.

Realiza una rotación de IP

La rotación de IP es un proceso de varios pasos:

  1. Cuando inicias una rotación de IP, el plano de control comienza a entregar en la nueva dirección IP, además de hacerlo en la dirección IP original.
  2. GKE vuelve a crear tus grupos de nodos para usar la dirección IP nueva.
  3. Después de iniciar una rotación, debes actualizar los clientes de la API del clúster (como las máquinas de desarrollo que usan la interfaz de línea de comandos de kubectl) para comenzar a comunicarte con el plano de control en la nueva dirección IP.
  4. Cuando completas la rotación, el plano de control deja de entregar tráfico en la dirección IP anterior.

Inicia la rotación

  1. Para iniciar una rotación de IP, ejecuta el siguiente comando:

    gcloud container clusters update CLUSTER_NAME \
        --start-ip-rotation
    

    Reemplaza CLUSTER_NAME por el nombre del clúster.

    El resultado es similar a este:

    This will start an IP Rotation on cluster CLUSTER_NAME.
    The master will be updated to serve on a new IP address in addition to
    the current IP address. Google Kubernetes Engine will then schedule recreation of all nodes
    to point to the new IP address.  If maintenance window is
    used, nodes are not recreated until a maintenance window occurs. See
    documentation on how to manually update nodes. This operation is
    long-running and will block other operations on the cluster (including
    delete) until it has run to completion.
    Do you want to continue (Y/n)?
    

    Este comando configura el plano de control para entregar en dos direcciones IP: la dirección original y una dirección nueva.

  2. Confirma la rotación y deja la shell abierta para que se complete la operación.

Vuelve a crear los nodos

Después de configurar el servidor de API para entregar en una dirección IP nueva, GKE actualiza tus nodos automáticamente a fin de usar la dirección IP nueva. GKE actualiza todos los nodos a la versión de nodo compatible más cercana, que vuelve a crear los nodos. Para obtener más información, consulta Actualizaciones del grupo de nodos.

De forma predeterminada, GKE completa automáticamente las rotaciones de direcciones IP siete días después de iniciar la operación. Si un período de mantenimiento o una exclusión activos en tu clúster impiden que GKE vuelva a crear algunos nodos durante este período de siete días, la rotación de direcciones IP no se completará.

  • Si usas exclusiones de mantenimiento o períodos de mantenimiento que podrían provocar una rotación con errores, actualiza el clúster de forma manual para forzar la recreación de nodos:

    gcloud container clusters upgrade CLUSTER_NAME \
        --location=LOCATION \
        --cluster-version=VERSION
    

    Reemplaza VERSION por la misma versión de GKE que el clúster ya usa.

    Si deseas obtener más información, consulta Advertencias para los períodos de mantenimiento.

Comprueba el progreso de la recreación del grupo de nodos

  1. Para supervisar la operación de rotación, ejecuta el siguiente comando:

    gcloud container operations list \
        --filter="operationType=UPGRADE_NODES AND status=RUNNING" \
        --format="value(name)"
    

    Este comando muestra el ID de la operación de la operación de actualización del nodo.

  2. Para sondear la operación, pasa el ID de la operación al siguiente comando:

    gcloud container operations wait OPERATION_ID
    

Los grupos de nodos se recrean uno a uno, y cada cual tiene su propia operación. Si tienes varios grupos de nodos, usa estas instrucciones para sondear cada operación.

Actualiza clientes de la API

Después de iniciar la rotación de IP, debes actualizar todos los clientes de la API fuera del clúster (como kubectl en máquinas de desarrollador) para apuntar a la dirección IP nueva.

A fin de actualizar los clientes de API, ejecuta el siguiente comando para cada cliente:

gcloud container clusters get-credentials CLUSTER_NAME

Completa la rotación

Después de actualizar los clientes de la API fuera del clúster, completa la rotación a fin de configurar el plano de control para que solo entregue en la dirección IP nueva.

Para finalizar la rotación, ejecuta el siguiente comando:

gcloud container clusters update CLUSTER_NAME \
    --complete-ip-rotation

El resultado es similar a este:

This will complete the in-progress IP Rotation on cluster CLUSTER_NAME.
The master will be updated to stop serving on the old IP address and only
serve on the new IP address. Make sure all API clients have been updated
to communicate with the new IP address (e.g. by running `gcloud container
clusters get-credentials --project PROJECT_ID --region COMPUTE_REGION
CLUSTER_NAME`). This operation is long-running and will
block other operations on the cluster (including delete) until it has
run to completion.

Si la rotación de direcciones IP no se completa y muestra un mensaje de error similar al siguiente, consulta solución de problemas:

ERROR: (gcloud.container.clusters.update) ResponseError: code=400, message=Node pool "test-pool-1" requires recreation.

¿Qué sigue?