Fazer a rotação do IP do plano de controle


Nesta página, explicamos como executar uma rotação de IP para seu plano de controle em clusters do Google Kubernetes Engine (GKE) executando a versão 1.16.10-gke.8 e posterior.

Visão geral

Você pode executar uma rotação de IP para alterar o endereço IP que seu plano de controle usa para exibir solicitações da API Kubernetes. O endereço IP do plano de controle é estático e não é alterado, a menos que você execute uma rotação de IP.

A rotação de IP também altera o certificado SSL e a autoridade de certificação do cluster, o que limita a capacidade de conectar o endereço anterior ao novo.

A rotação de IP também ocorre como parte da rotação de credenciais.

Antes de começar

Antes de começar, verifique se você realizou as tarefas a seguir:

  • Ativar a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Se você quiser usar a Google Cloud CLI para essa tarefa, instale e, em seguida, inicialize a CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão mais recente executando gcloud components update.

Fazer uma rotação de IP

Uma rotação de IP é um processo de várias etapas.

  1. Quando você inicia uma rotação de IP, o plano de controle começa a veicular o novo endereço IP, além do endereço IP original.
  2. O GKE recria os pools de nós para usar o novo endereço IP.
  3. Depois de iniciar uma rotação, atualize os clientes de API do cluster, como máquinas de desenvolvimento que usam a interface de linha de comando kubectl, para começar a se comunicar com o plano de controle no novo endereço IP.
  4. Quando você completa a rotação, o plano de controle deixa de veicular o tráfego no endereço IP anterior.

Iniciar a rotação

  1. Para iniciar uma rotação de IP, execute o seguinte comando:

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

    Substitua CLUSTER_NAME pelo nome do cluster.

    A saída será assim:

    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)?
    

    Esse comando configura o plano de controle para ser exibido em dois endereços IP: o original e o novo.

  2. Confirme a rotação e deixe o shell aberto para que a operação seja concluída.

Recriar nós

Depois de reconfigurar o servidor da API para ser exibido em um novo endereço IP, o GKE atualiza automaticamente seus nós para usar o novo endereço IP. O GKE faz upgrade de todos os nós para a versão de nó compatível mais próxima, que os recria. Para mais informações, consulte Upgrades do pool de nós.

Por padrão, o GKE conclui as rotações de endereço IP automaticamente sete dias após o início da operação. Se uma janela de manutenção ativa ou exclusão no cluster impedir que o GKE recrie alguns nós durante esse período de sete dias, a rotação de endereço IP não será concluída.

  • Se você usar exclusões de manutenção ou janelas de manutenção que possam resultar em uma rotação com falha, faça upgrade do cluster manualmente para forçar a recriação do nó:

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

    Substitua VERSION pela mesma versão do GKE que o cluster já usa.

    Para mais informações, consulte avisos sobre janelas de manutenção.

Verificar o progresso da recriação do pool de nós

  1. Para monitorar a operação de rotação, execute o seguinte comando:

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

    Esse comando retorna o ID da operação de upgrade do nó.

  2. Para pesquisar a operação, passe o código da operação para o seguinte comando:

    gcloud container operations wait OPERATION_ID
    

Os pools de nós são recriados um a um, e cada um tem uma operação própria. Se você tiver vários pools de nós, use estas instruções para pesquisar cada operação.

Atualizar clientes da API

Depois de iniciar a rotação de IP, é necessário atualizar todos os clientes da API fora do cluster (como kubectl nas máquinas do desenvolvedor) para apontar para o novo endereço IP.

Para atualizar os clientes de API, execute o seguinte comando para cada um deles:

gcloud container clusters get-credentials CLUSTER_NAME

Atualizar endereços IP fixados no código e regras de firewall

Se você fixou no código o endereço IP do plano de controle no ambiente ou se tem regras de firewall que segmentam o endereço IP do plano de controle, atualize os endereços para o novo endereço IP. Se você concluir a rotação sem atualizar endereços IP nos aplicativos e nas regras de firewall, esses recursos poderão sofrer interrupções quando o GKE parar de atender ao endereço IP do plano de controle anterior.

Completar a rotação

Depois de atualizar os clientes da API fora do cluster, conclua a rotação para configurar o plano de controle para ser exibido apenas no novo endereço IP.

Para concluir a rotação, execute o seguinte comando:

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

A saída será assim:

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.

Se a rotação de endereços IP não for concluída e retornar uma mensagem de erro semelhante a esta, consulte a solução de problemas:

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

A seguir