Pré-requisitos para clusters do GKE em Google Cloud

Se estiver a registar um cluster do GKE no Google Cloud, pode ter de fazer um ou mais dos seguintes passos antes de registar o cluster, consoante a opção de registo que escolher. Este guia pressupõe que já concluiu os pré-requisitos gerais para o registo de clusters.

Ative a federação de identidades da carga de trabalho para o GKE

Recomendamos que registe os seus clusters do GKE com a Workload Identity Federation da frota ativada, o que oferece uma forma consistente para as aplicações nos clusters se autenticarem em Google Cloud APIs e serviços. Pode saber mais sobre as vantagens de ativar a federação de identidade da força de trabalho da frota em Use fleet Workload Identity Federation (Use a federação de identidade da força de trabalho da frota).

Para usar esta funcionalidade, tem de garantir que a Federação de identidades de cargas de trabalho para o GKE está ativada no cluster antes do registo. O registo de um cluster do GKE com a federação de identidade da força de trabalho da frota sem ter a federação de identidade da força de trabalho para o GKE ativada no cluster pode levar a inconsistências na forma como a identidade é afirmada pelas cargas de trabalho no cluster e não é uma configuração suportada. Os clusters do Autopilot têm a federação de identidade da carga de trabalho para o GKE ativada por predefinição.

gcloud

Para verificar se o cluster tem a Workload Identity Federation para o GKE ativada, execute o seguinte comando para listar o grupo do Workload Identity do cluster. Se ainda não tiver especificado uma zona ou uma região predefinida para gcloud, tem de especificar uma flag --region ou --zone quando executar este comando.

gcloud container clusters describe CLUSTER_NAME --format="value(workloadIdentityConfig.workloadPool)"

Substitua o seguinte:

  • CLUSTER_NAME: o name do cluster do GKE.

Se vir um resultado semelhante ao seguinte, significa que a Workload Identity Federation para o GKE já está ativada no seu cluster:

GKE_PROJECT_ID.svc.id.goog

Se não houver resultados, significa que a federação de identidades da carga de trabalho para o GKE não está ativada. Siga as instruções em Ativar a Federação de identidades de cargas de trabalho para o GKE.

Consola

Para verificar se o seu cluster tem a Workload Identity Federation para o GKE ativada:

  1. Aceda à página do Google Kubernetes Engine na Google Cloud consola.

    Aceda ao Google Kubernetes Engine

  2. Na lista de clusters, clique no nome do cluster.

  3. Na página de detalhes do cluster, na secção Segurança, confirme que a identidade de carga de trabalho está listada como Ativada.

Se o Workload Identity estiver desativado e quiser ativar esta funcionalidade:

  1. Na página de detalhes do cluster, clique em Editar identidade da carga de trabalho.
  2. Na caixa de diálogo Editar Workload Identity, selecione a caixa de verificação Ativar Workload Identity.
  3. Clique em Guardar alterações.

Conceda autorizações para registar um cluster num projeto diferente

O registo de um cluster do GKE na frota no respetivo projeto não requer autorizações especiais além das descritas em Conceda autorizações de acesso. No entanto, se quiser registar um cluster do GKE a partir do respetivo projeto (GKE_PROJECT) numa frota num projeto diferente (FLEET_HOST_PROJECT), a FLEET_HOST_PROJECT conta do agente de serviço gcp-sa-gkehub tem de ter a função gkehub.serviceAgent no projeto GKE_PROJECT. Esta função concede à conta de serviço as autorizações para gerir recursos de cluster nesse projeto.

Pode verificar se a conta de serviço do projeto anfitrião da frota tem a função necessária no projeto do cluster através da CLI gcloud ou da Google Cloud consola, da seguinte forma.gcp-sa-gkehub

gcloud

Execute o seguinte comando:

gcloud projects get-iam-policy GKE_PROJECT_ID | grep gcp-sa-gkehub

em que GKE_PROJECT_ID é o ID do projeto do seu cluster.

Se o projeto anfitrião da frota gcp-sa-gkehub tiver as funções necessárias no projeto do cluster, deve aparecer no resultado no formato service-[FLEET_HOST-PROJECT-NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com. Por exemplo:

- members:
  - serviceAccount:service-1234567890@gcp-sa-gkehub.iam.gserviceaccount.com
  role: roles/gkehub.serviceAgent

Consola

  1. Com o projeto do cluster selecionado, aceda à página IAM e administrador na Google Cloud consola.

    Aceda à página IAM e administrador

  2. Selecione a caixa de verificação Incluir concessões de funções fornecidas pela Google para ver a política de autorização completa, incluindo agentes de serviço.

Se a conta de serviço do projeto anfitrião da frota gcp-sa-gkehub tiver as funções necessárias no projeto do cluster, deve aparecer nesta lista no formato service-[FLEET_HOST-PROJECT-NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com.

Se não vir o agente de serviço listado na política de autorização da IAM do projeto, faça o seguinte para atualizar as autorizações necessárias:

gcloud

  1. Para conceder a função gkehub.serviceAgent a gcp-sa-gkehub, certifique-se primeiro de que esta conta de serviço existe no projeto anfitrião da frota. Se tiver registado clusters neste projeto de frota anteriormente, esta conta de serviço já deve existir. Pode verificar consultando a política de autorização de IAM para o projeto anfitrião da frota:

    gcloud projects get-iam-policy FLEET_HOST_PROJECT_ID | grep gcp-sa-gkehub
    
  2. Se precisar de criar a conta de serviço gcp-sa-gkehub, execute o seguinte comando:

    gcloud beta services identity create --service=gkehub.googleapis.com --project=FLEET_HOST_PROJECT_ID
    

    Este comando deve gerar o seguinte resultado:

    Service identity created: service-[FLEET_HOST_PROJECT_NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com
    
  3. Execute o seguinte comando para conceder à conta de serviço a função roles/gkehub.serviceAgent em ambos os projetos e a função roles/gkehub.crossProjectServiceAgent no projeto do cluster:

    GKE_PROJECT_ID=GKE_PROJECT_ID
    FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
    FLEET_HOST_PROJECT_NUMBER=$(gcloud projects describe "${FLEET_HOST_PROJECT_ID}" --format "value(projectNumber)")
    gcloud projects add-iam-policy-binding "${FLEET_HOST_PROJECT_ID}" \
      --member "serviceAccount:service-${FLEET_HOST_PROJECT_NUMBER}@gcp-sa-gkehub.iam.gserviceaccount.com" \
      --role roles/gkehub.serviceAgent
    gcloud projects add-iam-policy-binding "${GKE_PROJECT_ID}" \
      --member "serviceAccount:service-${FLEET_HOST_PROJECT_NUMBER}@gcp-sa-gkehub.iam.gserviceaccount.com" \
      --role roles/gkehub.serviceAgent
    gcloud projects add-iam-policy-binding "${GKE_PROJECT_ID}" \
      --member "serviceAccount:service-${FLEET_HOST_PROJECT_NUMBER}@gcp-sa-gkehub.iam.gserviceaccount.com" \
      --role roles/gkehub.crossProjectServiceAgent
    

    where:

    • GKE_PROJECT_ID é o Google Cloud ID do projeto do cluster do GKE.
    • FLEET_HOST_PROJECT_ID é o Google Cloud ID do projeto no qual quer registar clusters. Saiba como encontrar este valor.
  4. Para confirmar que a associação de funções foi concedida, execute novamente o seguinte comando:

    gcloud projects get-iam-policy GKE_PROJECT_ID
    

    Se vir o nome da conta de serviço juntamente com a função gkehub.serviceAgent e gkehub.crossProjectServiceAgent, significa que as associações de funções foram concedidas. Por exemplo:

    - members:
      - serviceAccount:service-[FLEET_HOST_PROJECT_NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com
      role: roles/gkehub.serviceAgent
    - members:
      - serviceAccount:service-[FLEET_HOST_PROJECT_NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com
      role: roles/gkehub.crossProjectServiceAgent
    

Configure uma conta de serviço para o Terraform

Se quiser usar o Terraform para registar um cluster do Google Kubernetes Engine, tem de criar uma conta de serviço que o Terraform possa usar para aceder à API Fleet para criar uma associação.

gcloud

  1. Crie uma conta de serviço da seguinte forma:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME --project=FLEET_HOST_PROJECT_ID
    
  2. Associe a função de IAM gkehub.admin à conta de serviço para que o Terraform a possa usar com a Fleet API:

    FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
    gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
       --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
       --role="roles/gkehub.admin"
    

    Se quiser criar um novo cluster com o Terraform e, em seguida, registá-lo, também tem de associar a função roles/container.admin à conta de serviço para que o Terraform possa usar esta conta de serviço para aceder à API GKE e criar um cluster.

    FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
    gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
       --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
       --role="roles/container.admin"
    

    Substitua o seguinte:

    • FLEET_HOST_PROJECT_ID é o Google Cloud ID do projeto no qual quer registar clusters. Saiba como encontrar este valor.
    • SERVICE_ACCOUNT_NAME é o nome a apresentar que escolhe para a [conta de serviço].
  3. Transfira o ficheiro JSON da chave privada da conta de serviço, conforme descrito em Crie uma Google Cloud conta de serviço com gcloud. Precisa deste ficheiro para criar e registar clusters com o Terraform.

Configure uma conta de serviço para o Config Connector

Se quiser usar o Config Connector para registar um cluster do GKE, faça o seguinte:

gcloud

  1. Certifique-se de que instalou o suplemento Config Connector. Deve ter uma versão do Config Connector superior a 1.47.0.

  2. Siga as instruções do Config Connector para criar uma conta de serviço.

  3. Associe a função de IAM gkehub.admin a esta conta de serviço para que o Config Connector possa usar esta conta de serviço para aceder à API Fleet:

    FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
    gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
       --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
       --role="roles/gkehub.admin"
    

    Se quiser criar um novo cluster com o Config Connector e, em seguida, registá-lo, também tem de associar a função roles/container.admin à conta de serviço para que o controlador do Config Connector possa usar esta conta de serviço para aceder à API GKE e criar um cluster.

    FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
    gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
       --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
       --role="roles/container.admin"
    

    Substitua o seguinte:

    • FLEET_HOST_PROJECT_ID é o Google Cloud ID do projeto no qual quer registar clusters. Saiba como encontrar este valor.
    • SERVICE_ACCOUNT_NAME é o nome a apresentar que escolhe para a [conta de serviço].
  4. Siga as instruções do Config Connector para configurar o Config Connector com esta conta de serviço.

O que se segue?

Siga as instruções para registar um cluster.