Integração com a infraestrutura existente

Neste tópico, configura uma nuvem virtual privada (VPC) da AWS existente com sub-redes públicas e privadas e executa anthos-gke para concluir a instalação de um serviço de gestão.

Antes de começar

Para concluir os passos seguintes, precisa do seguinte:

  • Autorizações do AWS IAM, conforme descrito nos requisitos.

  • Um VPC da AWS existente com:

    • Pelo menos, uma sub-rede pública.
    • Pelo menos, uma sub-rede privada.
    • Um gateway de Internet com um trajeto para a sub-rede pública.
    • Um gateway NAT com um encaminhamento para a sub-rede privada.
    • Nomes de anfitrião DNS ativados.
    • Nenhum valor personalizado de domain-name nos seus conjuntos de opções de DHCP. Para mais informações, consulte a secção Resolução de problemas. O GKE on AWS não suporta valores que não sejam os nomes de domínio do EC2 predefinidos.

    Para mais informações sobre a configuração da sua VPC da AWS, consulte o artigo VPC com sub-redes públicas e privadas.

  • Os IDs de sub-redes públicas e privadas da sua VPC existente. Por exemplo, subnet-1234567890abcdefg.

  • Para versões de clusters 1.20 ou inferiores, um grupo de segurança da AWS que permite a entrada de SSH (porta 22) a partir dos grupos de segurança ou dos intervalos de IP onde vai gerir a sua instalação do GKE na AWS.

  • Para versões de clusters 1.21 ou superiores, um grupo de segurança da AWS que permite ligações de saída da Konnectivity (porta 8132) a partir dos intervalos de IP da VPC que alojam os seus node pools do GKE na AWS.

Criar o espaço de trabalho

  1. Crie um ficheiro com o nome anthos-gke.yaml num editor de texto. Cole o seguinte conteúdo no ficheiro.

     apiVersion: multicloud.cluster.gke.io/v1
     kind: AWSManagementService
     metadata:
       name: management
     spec:
       version: aws-1.14.1-gke.0
       region: AWS_REGION
       authentication:
         awsIAM:
           adminIdentityARNs:
           - ADMIN_AWS_IAM_ARN
       kmsKeyARN: KMS_KEY_ARN
       databaseEncryption:
         kmsKeyARN: DATABASE_KMS_KEY_ARN
       securityGroupIDs:
       - SECURITY_GROUP_IDS
       googleCloud:
         projectID: GCP_PROJECT_ID
         serviceAccountKeys:
           managementService: MANAGEMENT_KEY_PATH
           connectAgent: HUB_KEY_PATH
           node: NODE_KEY_PATH
       existingVPC:
         subnetID: VPC_SUBNET_ID
         allowedSSHSecurityGroupIDs:
         - SSH_SECURITY_GROUP
       # Optional fields
       rootVolume:
         sizeGiB: ROOT_VOLUME_SIZE
         volumeType: ROOT_VOLUME_TYPE
         iops: ROOT_VOLUME_IOPS
         kmsKeyARN: ROOT_VOLUME_KEY
       bastionHost:
         subnetID: BASTION_HOST_SUBNET_ID
         allowedSSHCIDRBlocks:
         - SSH_CIDR_BLOCK
         rootVolume: # Optional
           kmsKeyARN: BASTION_VOLUME_KEY
       proxy: PROXY_JSON_FILE
    

    Substitua os seguintes valores:

    • AWS_REGION com a região da AWS para executar o cluster.
    • ADMIN_AWS_IAM_ARN com o nome de recurso da Amazon da chave do AWS IAM do administrador.
    • KMS_KEY_ARN com o nome de recurso da Amazon da chave do AWS KMS que protege os dados do seu serviço de gestão quando o serviço de gestão é criado.
    • DATABASE_KMS_KEY_ARN com o nome de recurso da Amazon da chave do AWS KMS que protege as suas bases de dados etcd.
    • SECURITY_GROUP_IDS com IDs de grupos de segurança adicionais que permitem o acesso às suas VMs de serviço de gestão.
    • GCP_PROJECT_ID com o Google Cloud projeto que aloja o seu ambiente do GKE na AWS.
    • MANAGEMENT_KEY_PATH com a localização da sua Google Cloud conta de serviço de gestão.
    • HUB_KEY_PATH com a localização da sua Google Cloud Associar chave da conta de serviço.
    • NODE_KEY_PATH com a localização da chave da conta de serviço do nó do GKE on AWS.
    • VPC_SUBNET_ID com o ID da sub-rede onde o serviço de gestão é executado.
    • SSH_SECURITY_GROUP com a lista de IDs de grupos de segurança com acesso SSH permitido nas instâncias do serviço de gestão.

    Opcional: se quiser encriptar os volumes do serviço de gestão, substitua os seguintes valores:

    • ROOT_VOLUME_SIZE com o tamanho do volume em gigabytes para o serviço de gestão. Por exemplo, 10.
    • ROOT_VOLUME_TYPE com o tipo de volume EBS. Por exemplo, gp3.
    • ROOT_VOLUME_IOPS com a quantidade de operações de E/S aprovisionadas por segundo (IOPS) para o volume. Só é válido quando volumeType é GP3. Para mais informações, consulte o artigo Volumes SSD de uso geral (gp3).
    • ROOT_VOLUME_KEY com o nome de recurso da Amazon da chave do AWS KMS que encripta os volumes raiz da instância do serviço de gestão. Para mais informações, consulte o artigo Usar uma CMK gerida pelo cliente para encriptar volumes.

    Opcional: se quiser criar um anfitrião de bastião para aceder ao seu ambiente do GKE no AWS com um túnel SSH, substitua os seguintes valores:

    • BASTION_HOST_SUBNET_ID com o ID da sub-rede onde o anfitrião de bastion é executado. Certifique-se de que VPC_SUBNET_ID permite ligações de entrada de BASTION_HOST_SUBNET_ID.
    • SSH_CIDR_BLOCK com o bloco CIDR a partir do qual o seu anfitrião de bastião permite a ligação SSH de entrada. Por exemplo, 203.0.113.0/24. Se quiser permitir o SSH a partir de qualquer endereço IP, use o comando 0.0.0.0/0.
    • BASTION_VOLUME_KEY com o nome do recurso da Amazon da chave do AWS KMS que protege o volume raiz da estação de trabalho.

    Opcional: se quiser tráfego direto através de um proxy HTTP, substitua o seguinte valor:

  2. Execute anthos-gke aws management init para criar ficheiros de configuração:

    anthos-gke aws management init
    
  3. Execute anthos-gke aws management apply para criar o cluster.

    anthos-gke aws management apply
    

    O comando anthos-gke aws management apply pode demorar até dez minutos a ser concluído. Quando a anthos-gke terminar, o seu serviço de gestão é executado na AWS.

Etiquete as suas sub-redes com o nome do cluster

Se estiver a usar sub-redes da AWS existentes com o GKE na AWS e quiser criar equilibradores de carga, tem de etiquetar a sua VPC e sub-redes com o nome do serviço de gestão. Se criou a sua VPC com anthos-gke ou já etiquetou as suas sub-redes, ignore este passo.

Para etiquetar as suas sub-redes, siga estes passos:

  1. Altere para o diretório com a configuração do GKE na AWS. Criou este diretório quando Instalou o serviço de gestão.

    cd anthos-aws

  2. Exporte o ID do cluster como a variável de ambiente $CLUSTER-ID. Escolha a sua versão do Terraform e, de seguida, execute os seguintes comandos:

    Terraform 0.12 e 0.13

    export CLUSTER_ID=$(terraform output cluster_id)
    

    Terraform 0.14.3 ou superior

    export CLUSTER_ID=$(terraform output -raw cluster_id)
    
  3. Exporte o ID da VPC da AWS como a variável de ambiente $VPC_ID. Escolha a sua versão do Terraform e, de seguida, execute os seguintes comandos:

    Terraform 0.12 e 0.13

    export VPC_ID=$(terraform output vpc_id)
    

    Terraform 0.14.3 ou superior

    export VPC_ID=$(terraform output -raw vpc_id)
    
  4. Obtenha os IDs das suas sub-redes privadas com a ferramenta de CLI aws.

      aws ec2 describe-subnets \
          --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \
          --query "Subnets[*].SubnetId" \
          --output text
    
  5. Etiquete as suas sub-redes com o ID do cluster. Execute o seguinte comando para cada uma das suas sub-redes.

      aws ec2 create-tags \
          --resources SUBNET_IDS \
          --tags Key=gke:multicloud:cluster-id,Value=$CLUSTER_ID
    

    Substitua SUBNET_IDS pela lista de IDs de sub-redes, separados por espaços. Por exemplo, subnet-012345678abcdef subnet-abcdef123456789 subnet-123456789abcdef.

A estabelecer ligação ao serviço de gestão

Nesta secção, estabelece uma ligação ao seu serviço de gestão. Pode encaminhar os seus comandos através de um host de bastião. Se tiver uma ligação direta à sua VPC da AWS, avance para a secção Gerar credenciais e estabelecer ligação.

Estabelecer ligação a um anfitrião bastion

Se usar um anfitrião de bastião para configurar o túnel SSH, primeiro configure o anfitrião no seu anthos-gke.yaml. Em seguida, crie um script para abrir o túnel através dos seguintes passos:

  1. Use terraform para gerar um script que abra um túnel SSH para o anfitrião bastion.

    terraform output bastion_tunnel > bastion-tunnel.sh
    chmod 755 bastion-tunnel.sh
    

    O Terraform cria o script bastion-tunnel.sh que usa a chave SSH do host bastion (~/.ssh/anthos-gke).

  2. Para abrir o túnel, execute o script bastion-tunnel.sh. O túnel encaminha de localhost:8118 para o anfitrião de bastião.

    Para abrir um túnel para o anfitrião bastion, execute o seguinte comando:

    ./bastion-tunnel.sh -N
    

    As mensagens do túnel SSH aparecem nesta janela. Quando estiver pronto para fechar a ligação, pare o processo com Control+C ou fechando a janela.

  3. Altere para o diretório com a configuração do GKE na AWS.

    cd anthos-aws

Gere credenciais e estabeleça ligação

A documentação do GKE no AWS pressupõe que usa um túnel SSH na porta localhost 8118 para aceder ao seu cluster. Se usar outro tipo de ligação à sua VPC, como uma interligação direta, uma VPN ou outro método, pode remover a linha env HTTP_PROXY=http://localhost:8118 dos comandos.

  1. Gere um kubeconfig para autenticação. Use anthos-gke para anexar credenciais à sua configuração armazenada em ~/.kube/config.

    anthos-gke aws management get-credentials
    
  2. Verifique se consegue estabelecer ligação ao serviço de gestão com kubectl.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl cluster-info
    

    kubectl imprime o estado do cluster.

O que se segue?