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:
Aceda à página do Google Kubernetes Engine na Google Cloud consola.
Na lista de clusters, clique no nome do cluster.
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:
- Na página de detalhes do cluster, clique em Editar identidade da carga de trabalho.
- Na caixa de diálogo Editar Workload Identity, selecione a caixa de verificação Ativar Workload Identity.
- 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
Com o projeto do cluster selecionado, aceda à página IAM e administrador na Google Cloud consola.
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
Para conceder a função
gkehub.serviceAgent
agcp-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
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
Execute o seguinte comando para conceder à conta de serviço a função
roles/gkehub.serviceAgent
em ambos os projetos e a funçãoroles/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.
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
egkehub.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
Crie uma conta de serviço da seguinte forma:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME --project=FLEET_HOST_PROJECT_ID
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].
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
Certifique-se de que instalou o suplemento Config Connector. Deve ter uma versão do Config Connector superior a 1.47.0.
Siga as instruções do Config Connector para criar uma conta de serviço.
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].
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.