Como configurar a entrada de vários clusters

Nesta página, mostramos como configurar a entrada de vários clusters para rotear o tráfego em vários clusters em diferentes regiões. A entrada de vários clusters (MCI) é um controlador de entrada de vários clusters hospedado na nuvem para clusters do Anthos. É um serviço hospedado pelo Google compatível com a implantação de recursos de balanceamento de carga compartilhados entre clusters e regiões.

Saiba mais sobre como funciona a entrada de vários clusters e Como funciona o balanceador de carga HTTP(S) externo.

Requisitos para a Entrada de vários clusters

A Entrada de vários clusters é compatível com:

  • Clusters do GKE no Google Cloud. No momento, os clusters locais do GKE não são compatíveis.
  • Clusters do GKE em todos os canais de lançamento do GKE.
  • Clusters no modo nativo de VPC (IP do alias). Para mais informações, consulte Como criar um cluster nativo de VPC.
  • Clusters com balanceamento de carga HTTP ativado, que é ativado por padrão. Observe que a Entrada de vários clusters é compatível apenas com o balanceador de carga HTTP(S) externo.
  • O MCI faz parte do Anthos no Google Cloud e requer licenciamento do Anthos.

Além disso, a Entrada de vários clusters requer o SDK do Cloud versão 290 ou superior (gcloud --version), para que seja possível registrar seus clusters.

Antes de começar

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

Defina as configurações padrão da gcloud usando um dos métodos a seguir:

  • Use gcloud init se quiser orientações para definir os padrões.
  • Use gcloud config para definir individualmente a região, a zona e o ID do projeto.

Como usar o gcloud init

Se você receber o erro One of [--zone, --region] must be supplied: Please specify location, conclua esta seção.

  1. Execute gcloud init e siga as instruções:

    gcloud init

    Se você estiver usando SSH em um servidor remoto, utilize a sinalização --console-only para impedir que o comando inicie um navegador:

    gcloud init --console-only
  2. Siga as instruções para autorizar a gcloud a usar sua conta do Google Cloud.
  3. Crie uma nova configuração ou selecione uma atual.
  4. Escolha um projeto do Google Cloud.
  5. Escolha uma zona padrão do Compute Engine para clusters zonais ou uma região para clusters regionais ou do Autopilot.

Como usar o gcloud config

  • Defina o ID do projeto padrão:
    gcloud config set project PROJECT_ID
  • Se você estiver trabalhando com clusters zonais, defina a zona do Compute padrão:
    gcloud config set compute/zone COMPUTE_ZONE
  • Se você estiver trabalhando com clusters do Autopilot ou regionais, defina a região do Compute padrão:
    gcloud config set compute/region COMPUTE_REGION
  • Atualize gcloud para a versão mais recente:
    gcloud components update
  • Ative a API environ no projeto:

    gcloud services enable gkehub.googleapis.com
    
  • Ative a API Anthos no seu projeto:

    gcloud services enable anthos.googleapis.com
    
  • Ative a API da entrada de vários clusters no seu projeto:

    gcloud services enable multiclusteringress.googleapis.com
    
  • Para usar a Entrada de vários clusters, os clusters precisam estar no modo nativo de VPC. A entrada de vários clusters usa grupos de endpoint da rede (NEGs, na sigla em inglês) para criar back-ends para o balanceador de carga HTTP(S). Se os clusters atuais não estiverem no modo nativo de VPC, exclua e recrie os clusters, garantindo que eles sejam ativados usando a sinalização --enable-ip-alias.

Como preparar o ambiente

Como criar os clusters

Este exemplo usa os três clusters a seguir:

NAME      LOCATION
gke-eu    europe-west1-c
gke-us    us-central1-a
  1. Crie o cluster gke-eu:

    gcloud container clusters create gke-eu --zone europe-west1-c \
      --release-channel stable --enable-ip-alias
    
  2. Crie o cluster gke-us:

    gcloud container clusters create gke-us --zone us-central1-a \
      --release-channel stable --enable-ip-alias
    

Como registrar seus clusters

O Connect permite que você opere seus clusters do Kubernetes em ambientes híbridos. Cada cluster precisa ser registrado como membro de um ambiente. Para mais informações, consulte Arquitetura de Entrada de vários clusters.

  1. Verifique se você concluiu os Pré-requisitos para registrar um cluster.

  2. Verifique se você criou uma conta de serviço e fez o download da chave particular.

  3. Encontre os URIs para seus clusters:

    gcloud container clusters list --uri
    
  4. Registre o cluster gke-eu:

    gcloud container hub memberships register gke-eu \
        --project=project-id \
        --gke-uri=uri \
        --service-account-key-file=service-account-key-path
    

    em que:

    • project-id é o ID do projeto;
    • uri é o URI do cluster do GKE.
    • service-account-key-path é o caminho do arquivo local para o arquivo JSON da chave privada da conta de serviço transferido por download como parte dos pré-requisitos de registro. Essa chave de conta de serviço é armazenada como uma secret chamado creds-gcp no namespace gke-Connect.
  5. Registre o cluster gke-us:

    gcloud container hub memberships register gke-us \
        --project=project-id \
        --gke-uri=uri \
        --service-account-key-file=service-account-key-path
    
  6. Verifique se os clusters estão registrados:

    gcloud container hub memberships list
    

    A saída será semelhante a esta:

    NAME                                  EXTERNAL_ID
    gke-us                                0375c958-38af-11ea-abe9-42010a800191
    gke-eu                                d3278b78-38ad-11ea-a846-42010a840114
    

Como especificar um cluster de configuração

O cluster de configuração é um cluster do GKE que você escolhe como o ponto central de controle do Ingress entre os clusters de membros. Ao contrário do Ingress do GKE, o controlador do Anthos Ingress não fica em um único cluster, mas é um serviço gerenciado pelo Google que monitora recursos no cluster de configuração. Esse cluster do GKE é usado como um servidor de API de vários clusters para armazenar recursos como MultiClusterIngress e MultiClusterService. Qualquer cluster membro pode se tornar um cluster de configuração, mas só pode haver um cluster de configuração por vez.

Para mais informações sobre clusters de configuração, consulte Projeto do cluster de configuração.

Se o cluster de configuração estiver inativo ou inacessível, os objetos MultiClusterIngress e MultiClusterService não poderão ser atualizados nos clusters de membros. Os balanceadores de carga e o tráfego podem continuar funcionando independentemente do cluster de configuração em caso de interrupção.

A ativação da entrada de vários clusters e a seleção do cluster de configuração ocorrem na mesma etapa. O cluster do GKE escolhido como o cluster de configuração já precisa estar registrado em um ambiente.

  1. Identifique o URI do cluster que você quer especificar como o cluster de configuração:

    gcloud container hub memberships list
    

    A saída é semelhante a esta:

    NAME                                  EXTERNAL_ID
    gke-us                                0375c958-38af-11ea-abe9-42010a800191
    gke-eu                                d3278b78-38ad-11ea-a846-42010a840114
    
  2. Ative a Entrada de vários clusters e selecione gke-us como o cluster de configuração:

    gcloud alpha container hub ingress enable \
      --config-membership=projects/project_id/locations/global/memberships/gke-us
    

    A saída é semelhante a esta:

    Waiting for Feature to be created...done.
    

    Esse processo pode levar alguns minutos durante a execução do controlador. Se for bem-sucedido, a saída será semelhante a esta:

    Waiting for Feature to be created...done.
    Waiting for controller to start...done.
    

    Se falhar, o comando atingirá o tempo limite conforme abaixo:

    Waiting for controller to start...failed.
    ERROR: (gcloud.alpha.container.hub.ingress.enable) Controller did not start in 2 minutes. Please use the `describe` command to check Feature state for debugging information.
    

    Se nenhuma falha ocorreu na etapa anterior, prossiga com as próximas etapas. Se ocorreu uma falha na etapa anterior, verifique o estado do recurso. Ele precisa indicar exatamente o que deu errado:

    gcloud alpha container hub ingress describe
    

    Veja abaixo um exemplo de estado de falha:

    featureState:
      detailsByMembership:
        projects/393818921412/locations/global/memberships/0375c958-38af-11ea-abe9-42010a800191:
          code: FAILED,
          description: "... is not a VPC-native cluster..."
    lifecycleState: ENABLED
    multiclusteringressFeatureSpec:
      configMembership: projects/project_id/locations/global/memberships/0375c958-38af-11ea-abe9-42010a800191
    name: projects/project_id/locations/global/features/multiclusteringress
    updateTime: '2020-01-22T19:16:51.172840703Z'
    

    Para saber mais sobre essas mensagens de erro, consulte Solução de problemas e operações.

Implantação de VPC compartilhada

A entrada de vários clusters pode ser implantada para clusters em uma rede VPC compartilhada, mas todos os clusters participantes do GKE de back-end precisam estar no mesmo projeto. Não há suporte para clusters do GKE em projetos diferentes que usam o mesmo VIP do Cloud Load Balancing.

Em redes VPC não compartilhadas, o controlador da entrada de vários clusters gerencia regras de firewall para permitir que as verificações de integridade passem do Cloud Load Balancing para cargas de trabalho de contêineres.

Em uma rede VPC compartilhada, a entrada de vários clusters não é capaz de gerenciar essas regras de firewall porque o firewall é gerenciado pelo projeto host, a que os administradores do projeto de serviço não têm acesso. O modelo de segurança centralizado das redes VPC compartilhadas centraliza intencionalmente o controle de rede. Em redes VPC compartilhadas, um administrador de projeto de host precisa criar manualmente as regras de firewall necessárias para o tráfego do Cloud Load Balancing em nome da entrada de vários clusters.

O comando a seguir mostra a regra de firewall que você precisa criar se os clusters estiverem em uma rede VPC compartilhada. Os intervalos de origem são aqueles que o Cloud Load Balancing usa para enviar tráfego para back-ends no Google Cloud. Essa regra precisa existir durante o ciclo de vida operacional da entrada de vários clusters e só poderá ser removida se a entrada ou o Cloud Load Balancing para o balanceamento de carga do GKE não forem mais usados.

  • Se os clusters estiverem em uma rede VPC compartilhada, crie a regra de firewall:

    gcloud compute firewall-rules create firewall-rule-name \
        --project host-project \
        --network shared-vpc \
        --direction INGRESS \
        --allow tcp:0-65535 \
        --source-ranges 130.211.0.0/22,35.191.0.0/16
    

A seguir