Este documento descreve como configurar e usar a autenticação de cluster de identidade da carga de trabalho para o Google Distributed Cloud (somente software) em bare metal. Em vez de chaves de conta de serviço, a autenticação de cluster da Identidade da carga de trabalho usa tokens de curta duração e a federação de identidade da carga de trabalho para criar e proteger seus clusters. As credenciais de curta duração da conta de serviço estão na forma de tokens de acesso OAuth 2.0. Os tokens de acesso expiram após uma hora por padrão. Da mesma forma, os tokens de extração de imagem também expiram após uma hora por padrão.
Por outro lado, o modo com chave, o método padrão para criar e proteger clusters, usa chaves de conta de serviço baixadas. Ao criar um cluster autogerenciado (administrador, híbrido ou independente), especifique o caminho para as chaves baixadas. As chaves são armazenadas como secrets no cluster e em todos os clusters de usuários gerenciados. Por padrão, as chaves de conta de serviço não expiram e são um risco de segurança quando não são gerenciadas corretamente. Para informações sobre como definir um prazo de validade para as chaves da sua conta de serviço, consulte Prazos de validade para chaves gerenciadas pelo usuário.
A autenticação de cluster da Identidade da carga de trabalho oferece dois benefícios principais em relação ao uso de chaves de conta de serviço:
Segurança aprimorada: as chaves de conta de serviço são um risco de segurança quando não são gerenciadas corretamente. Os tokens OAuth 2.0 e a federação de identidade da carga de trabalho são consideradas as práticas recomendadas para chaves de conta de serviço. Para mais informações sobre tokens de conta de serviço, consulte Credenciais de conta de serviço de curta duração. Para mais informações sobre a Federação de identidade da carga de trabalho, consulte Federação de identidade da carga de trabalho.
Menor manutenção: as chaves de conta de serviço exigem mais manutenção. A rotação e a proteção regulares dessas chaves podem ser uma carga administrativa significativa.
A autenticação de cluster da Identidade da carga de trabalho foi introduzida em Visualização com a versão 1.30 e está em GA para a versão 1.33 e mais recentes. A autenticação de cluster da Identidade da carga de trabalho só pode ser ativada ao criar novos clusters. Não é possível configurar um cluster atual para usar a autenticação de cluster da Identidade da carga de trabalho durante uma atualização ou upgrade. Para mais restrições, consulte Limitações.
Esta página é destinada a administradores, arquitetos e operadores que configuram, monitoram e gerenciam o ciclo de vida da infraestrutura de tecnologia subjacente. Para saber mais sobre papéis comuns e tarefas de exemplo que mencionamos no conteúdo doGoogle Cloud , consulte Tarefas e funções de usuário comuns do GKE.
Antes de começar
Nas seções a seguir, você cria contas de serviço e concede os papéis necessários para a autenticação de cluster da Identidade da carga de trabalho. As instruções de configuração neste documento não substituem as instruções em Configurar recursos do Google Cloud. Elas são necessárias além dos pré-requisitos de instalação do software do Google Distributed Cloud padrão. As contas de serviço necessárias para a autenticação de cluster da Identidade da carga de trabalho são semelhantes às descritas em Configurar Google Cloud recursos, mas têm nomes exclusivos para não interferir nos clusters que usam as chaves padrão da conta de serviço.
As contas de serviço necessárias para a autenticação de cluster da Identidade da carga de trabalho são diferentes para as ofertas de prévia e GA, conforme descrito na tabela a seguir:
1.33 e versões mais recentes
Conta de serviço | Finalidade | Papéis |
---|---|---|
admin-sa |
Você usa essa conta de serviço para gerar tokens. Cada token tem os privilégios associados aos papéis da conta de serviço. |
roles/gkehub.admin roles/iam.serviceAccountAdmin roles/iam.serviceAccountTokenCreator roles/logging.admin roles/monitoring.admin roles/resourcemanager.projectIamAdmin
|
baremetal-gcr |
O Google Distributed Cloud usa essa conta de serviço para baixar imagens de contêiner do Artifact Registry. | Nenhum |
1.30-1.32
Conta de serviço | Finalidade | Papéis |
---|---|---|
admin-sa |
Você usa essa conta de serviço para gerar tokens. Cada token tem os privilégios associados aos papéis da conta de serviço. |
roles/gkehub.admin roles/iam.serviceAccountAdmin roles/iam.serviceAccountTokenCreator roles/logging.admin roles/monitoring.admin
|
baremetal-controller |
O Agente do Connect
usa essa conta de serviço para manter uma conexão entre o cluster e
Google Cloud e para registrar os clusters com
uma frota.
Essa conta de serviço também atualiza os tokens da conta de serviço baremetal-gcr .
|
roles/gkehub.admin roles/monitoring.dashboardEditor roles/serviceusage.serviceUsageViewer
|
baremetal-cloud-ops |
O Agente do Stackdriver usa essa conta de serviço para exportar registros e métricas de clusters para o Cloud Logging e o Cloud Monitoring. |
roles/kubernetesmetadata.publisher roles/logging.logWriter roles/monitoring.dashboardEditor roles/monitoring.metricWriter roles/monitoring.viewer roles/opsconfigmonitoring.resourceMetadata.writer roles/serviceusage.serviceUsageViewer roles/stackdriver.resourceMetadata.writer
|
baremetal-gcr |
O Google Distributed Cloud usa essa conta de serviço para baixar imagens de contêiner do Artifact Registry. | Nenhum |
Configurar contas de serviço
As seções a seguir contêm instruções para criar as contas de serviço necessárias e conceder a elas os papéis necessários para a autenticação de cluster da identidade da carga de trabalho. Para uma lista das contas de serviço e dos papéis obrigatórios, consulte a tabela na seção anterior.
Criar contas de serviço
Para criar as contas de serviço para a autenticação do cluster de identidade da carga de trabalho, siga estas etapas:
Na estação de trabalho do administrador, faça login na CLI do Google Cloud:
gcloud auth login
Crie as contas de serviço necessárias para a autenticação do cluster da Identidade da carga de trabalho:
O nome da conta de serviço
admin-sa
é arbitrário. Você pode mudar o nome se ele causar um conflito no seu projeto. As outras contas de serviço para autenticação de cluster da Identidade da carga de trabalho têm nomes predefinidos que podem ser personalizados, se você quiser.1.33 e versões mais recentes
gcloud iam service-accounts create admin-sa \ --project=PROJECT_ID gcloud iam service-accounts create baremetal-gcr \ --project=PROJECT_ID
Substitua
PROJECT_ID
pelo ID do seu projeto doGoogle Cloud .1.30-1.32
gcloud iam service-accounts create admin-sa \ --project=PROJECT_ID gcloud iam service-accounts create baremetal-controller \ --project=PROJECT_ID gcloud iam service-accounts create baremetal-cloud-ops \ --project=PROJECT_ID gcloud iam service-accounts create baremetal-gcr \ --project=PROJECT_ID
Substitua
PROJECT_ID
pelo ID do seu projeto doGoogle Cloud .
Adicionar vinculações de políticas de gerenciamento de identidade e acesso a contas de serviço
Siga as etapas abaixo para aplicar as vinculações de políticas necessárias do Identity and Access Management às novas contas de serviço:
1.33 e versões mais recentes
Adicione vinculações de política do IAM para os papéis necessários da conta de serviço
admin-sa
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/gkehub.admin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountAdmin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/logging.admin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.admin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/resourcemanager.projectIamAdmin
1.30-1.32
Adicione vinculações de política do IAM para os papéis necessários da conta de serviço
admin-sa
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/gkehub.admin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountAdmin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/logging.admin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.admin
Adicione vinculações de política do IAM para os papéis necessários da conta de serviço
baremetal-controller
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/gkehub.admin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.dashboardEditor gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/serviceusage.serviceUsageViewer
Adicione vinculações de política do IAM para os papéis necessários da conta de serviço
baremetal-cloud-ops
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/kubernetesmetadata.publisher gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/logging.logWriter gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.dashboardEditor gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.metricWriter gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.viewer gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/opsconfigmonitoring.resourceMetadata.writer gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/serviceusage.serviceUsageViewer gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/stackdriver.resourceMetadata.writer
Conceda à conta de serviço
baremetal-controller
a capacidade de gerar tokens de acesso em nome da conta de serviçobaremetal-gcr
:gcloud iam service-accounts add-iam-policy-binding \ baremetal-gcr@PROJECT_ID.iam.gserviceaccount.com \ --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Configurar a autenticação
As etapas a seguir configuram o fluxo de autenticação que usa um token de curta duração para autenticar operações de cluster:
Na estação de trabalho do administrador, faça login na CLI do Google Cloud:
gcloud auth login
Na estação de trabalho do administrador, crie e faça o download de uma chave para a conta de serviço
admin-sa
:Essa chave é necessária para autorizar o acesso à conta de serviço
admin-sa
.gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \ --iam-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com
Substitua
TMP_KEY_FILE_PATH
pelo caminho, incluindo o nome do arquivo de chave salvo.Na estação de trabalho do administrador, crie uma variável de ambiente
GOOGLE_APPLICATION_CREDENTIALS
com o valor da chave da conta de serviço baixada:export GOOGLE_APPLICATION_CREDENTIALS=TMP_KEY_FILE_PATH
Na estação de trabalho do administrador, crie uma variável de ambiente
GCP_ACCESS_TOKEN
com o valor de um token de acesso criado pela conta de serviçoadmin-sa
:export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
Por padrão, o token de acesso tem uma vida útil de 1 hora.
Verifique se o token é gerado pela conta de serviço
admin-sa
com a expiração correta:curl "https://oauth2.googleapis.com/tokeninfo?access_token=$GCP_ACCESS_TOKEN"
A resposta precisa incluir linhas semelhantes a esta:
... "exp": "1759512810", "expires_in": "3589", ...
O valor de expiração está em segundos e precisa ser menor que
3600
, o que indica que o token expira em menos de uma hora.
Configurar a federação de identidade da carga de trabalho para seus clusters
Para fornecer acesso ao Google Cloud com a federação de identidade da carga de trabalho para GKE, crie uma política de permissão do IAM que conceda acesso a um recurso específico do Google Cloud a um principal que corresponda à identidade do seu aplicativo. Nesse caso, a federação de identidade da carga de trabalho concede acesso a operadores específicos no cluster. Para mais informações sobre a Federação de Identidade da Carga de Trabalho para GKE, consulte Federação de identidade da carga de trabalho na documentação do IAM.
1.33 e versões mais recentes
Para versões de cluster em que a autenticação do cluster da Identidade da carga de trabalho está em GA, use o comando bmctl configure
projects
para configurar a federação de identidade da carga de trabalho para seus clusters. Esse comando está incorporado às etapas para criar um cluster de administrador e criar um cluster de usuário.
1.30-1.32
Para versões de cluster em que a autenticação de cluster da Identidade da carga de trabalho está em Visualização, configure a federação de identidade da carga de trabalho para seus clusters manualmente, conforme descrito nas seções a seguir.
Adicionar vinculações de política do IAM para o operador do cluster
Os comandos a seguir concedem à conta de serviço do Kubernetes anthos-cluster-operator
a capacidade de representar a conta de serviço baremetal-controller
e interagir com os recursos do Google Cloud em nome do cluster:
Para cada cluster configurado para autenticação de cluster da Identidade da carga de trabalho (ou planejado para usar a autenticação de cluster da Identidade da carga de trabalho), incluindo o cluster de inicialização, conceda ao
anthos-cluster-operator
no cluster a capacidade de representar a conta de serviçobaremetal-controller
:No comando abaixo, o
principalSet
consiste no pool de identidade de carga de trabalho e uma conta de serviço do Kubernetes,anthos-cluster-operator
, no namespacekube-system
.gcloud iam service-accounts add-iam-policy-binding \ baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \ --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/anthos-cluster-operator \ --role=roles/iam.workloadIdentityUser \ --project=PROJECT_ID
Substitua:
PROJECT_NUM
: um identificador exclusivo gerado automaticamente para o projeto.REGION
: o local da associação da frota do cluster, que églobal
por padrão. Para mais informações, consulte Local da assinatura da frota.CLUSTER_NAME
: o nome do cluster. Por padrão, o nome do cluster de inicialização ébmctl-MACHINE_NAME
.
Verifique as vinculações de políticas para a conta de serviço
baremetal-controller
:gcloud iam service-accounts get-iam-policy \ baremetal-controller@PROJECT_ID.iam.gserviceaccount.com
A resposta será assim:
bindings: - members: - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/anthos-cluster-operator - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/anthos-cluster-operator - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/anthos-cluster-operator role: roles/iam.workloadIdentityUser etag: BwYoN3QLig0= version: 1
Adicionar vinculações de política do IAM para os operadores do Google Cloud Observability
Os comandos a seguir concedem às seguintes contas de serviço do Kubernetes do Google Cloud Observability a capacidade de imitar a conta de serviço baremetal-cloud-ops
e interagir com os recursos Google Cloud em nome do cluster:
cloud-audit-logging
gke-metrics-agent
kubestore-collector
metadata-agent
stackdriver-log-forwarder
Para cada cluster configurado para autenticação de cluster da Identidade da carga de trabalho (ou planejado para usar a autenticação de cluster da Identidade da carga de trabalho), incluindo o cluster de inicialização, conceda aos operadores do Google Cloud Observability no cluster a capacidade de representar a conta de serviço
baremetal-cloud-ops
:Em cada um dos comandos a seguir, o
principalSet
consiste no pool de identidade da carga de trabalho e em uma conta de serviço do Kubernetes, comocloud-audit-logging
, no namespacekube-system
.gcloud iam service-accounts add-iam-policy-binding \ baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/cloud-audit-logging \ --role=roles/iam.workloadIdentityUser \ --project=PROJECT_ID gcloud iam service-accounts add-iam-policy-binding \ baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/gke-metrics-agent \ --role=roles/iam.workloadIdentityUser \ --project=PROJECT_ID gcloud iam service-accounts add-iam-policy-binding \ baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/kubestore-collector \ --role=roles/iam.workloadIdentityUser \ --project=PROJECT_ID gcloud iam service-accounts add-iam-policy-binding \ baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/metadata-agent \ --role=roles/iam.workloadIdentityUser \ --project=PROJECT_ID gcloud iam service-accounts add-iam-policy-binding \ baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/stackdriver-log-forwarder \ --role=roles/iam.workloadIdentityUser \ --project=PROJECT_ID
Verifique as vinculações de políticas para a conta de serviço
baremetal-cloud-ops
:gcloud iam service-accounts get-iam-policy \ baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com
A resposta será semelhante a esta:
bindings: - members: - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/cloud-audit-logging - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/gke-metrics-agent - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/kubestore-collector - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/metadata-agent - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/stackdriver-log-forwarder - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/cloud-audit-logging - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/gke-metrics-agent - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/kubestore-collector - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/metadata-agent - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/stackdriver-log-forwarder - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/cloud-audit-logging - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/gke-metrics-agent - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/kubestore-collector - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/metadata-agent - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/stackdriver-log-forwarder role: roles/iam.workloadIdentityUser etag: BwYhT4gL-dY= version: 1
Criar um cluster de administrador
As etapas para criar um cluster de administrador variam um pouco para as ofertas de
prévia (versões 1.30 a 1.32) e de disponibilidade geral
(versões 1.33 e mais recentes). As etapas da GA usam o comando bmctl configure
projects
para configurar a federação de identidade da carga de trabalho para seus clusters.
1.33 e versões mais recentes
A diferença mais óbvia na configuração de clusters que usam a autenticação de cluster da Identidade da carga de trabalho é que você não especifica caminhos para chaves de conta de serviço transferidas por download.
Ao preencher as configurações do cluster no arquivo de configuração, deixe os caminhos da chave da conta de serviço na seção de credenciais em branco, conforme mostrado no exemplo abaixo:
gcrKeyPath: sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa gkeConnectAgentServiceAccountKeyPath: gkeConnectRegisterServiceAccountKeyPath: cloudOperationsServiceAccountKeyPath: --- apiVersion: v1 kind: Namespace metadata: name: cluster-ADMIN_CLUSTER_NAME --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: ADMIN_CLUSTER_NAME namespace: cluster-ADMIN_CLUSTER_NAME spec: type: admin profile: default anthosBareMetalVersion: 1.33.0-gke.799 ...
Adicione a anotação
baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true"
ao arquivo de configuração do cluster:gcrKeyPath: sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa gkeConnectAgentServiceAccountKeyPath: gkeConnectRegisterServiceAccountKeyPath: cloudOperationsServiceAccountKeyPath: --- apiVersion: v1 kind: Namespace metadata: name: cluster-ADMIN_CLUSTER_NAME --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: ADMIN_CLUSTER_NAME namespace: cluster-ADMIN_CLUSTER_NAME annotations: baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true" spec: type: admin profile: default anthosBareMetalVersion: 1.33.0-gke.799 ...
Na estação de trabalho do administrador, atualize a variável de ambiente
GCP_ACCESS_TOKEN
com um token de acesso recém-recuperado:export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
Por padrão, o token de acesso tem uma vida útil de 3.600 segundos (1 hora). Ao usar a autenticação de cluster da Identidade da carga de trabalho, o
bmctl
verifica o tempo de expiração do token. Se a expiração do token for em até 1.800 segundos (30 minutos),bmctl
vai informar um erro e sair.Configure a federação de identidade da carga de trabalho para o cluster que você está criando:
bmctl configure projects --project-id=PROJECT_ID \ --admin-cluster=ADMIN_CLUSTER_NAME
Execute o comando
bmctl create cluster
para criar o cluster de administrador.
1.30-1.32
A diferença mais óbvia na configuração de clusters que usam a autenticação de cluster da Identidade da carga de trabalho é que você não especifica caminhos para chaves de conta de serviço transferidas por download.
Ao preencher as configurações do cluster no arquivo de configuração, deixe os caminhos da chave da conta de serviço na seção de credenciais em branco, conforme mostrado no exemplo abaixo:
gcrKeyPath: sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa gkeConnectAgentServiceAccountKeyPath: gkeConnectRegisterServiceAccountKeyPath: cloudOperationsServiceAccountKeyPath: --- apiVersion: v1 kind: Namespace metadata: name: cluster-ADMIN_CLUSTER_NAME --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: ADMIN_CLUSTER_NAME namespace: cluster-ADMIN_CLUSTER_NAME spec: type: admin profile: default anthosBareMetalVersion: 1.33.0-gke.799 ...
Na estação de trabalho do administrador, crie e faça o download de uma chave para a conta de serviço
admin-sa
:Essa chave é necessária para autorizar o acesso à conta de serviço
admin-sa
e você a exclui imediatamente após a autorização da conta.gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \ --iam-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com
Substitua
TMP_KEY_FILE_PATH
pelo caminho, incluindo o nome do arquivo de chave salvo.Autorize o acesso ao Google Cloud com a conta de serviço
admin-sa
:gcloud auth activate-service-account admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --key-file=TMP_KEY_FILE_PATH
Exclua o arquivo de chave JSON salvo:
rm TMP_KEY_FILE_PATH
O token de acesso tem curta duração. Por isso, geralmente é necessário regenerá-lo antes de executar comandos
bmctl
para operações de cluster, como criar, fazer upgrade ou redefinir um cluster.Na estação de trabalho do administrador, crie uma variável de ambiente
GCP_ACCESS_TOKEN
com o valor de um token de acesso criado pela conta de serviçoadmin-sa
:export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \ --impersonate-service-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com)
Por padrão, o token de acesso tem uma vida útil de 3.600 segundos (1 hora).
Execute o comando
bmctl create cluster
para criar o cluster de administrador.
Criar um cluster de usuário
As etapas para criar um cluster de administrador variam um pouco para as ofertas de
prévia (versões 1.30 a 1.32) e de disponibilidade geral
(versões 1.33 e mais recentes). As etapas da GA usam o comando bmctl configure
projects
para configurar a federação de identidade da carga de trabalho para seus clusters.
1.33 e versões mais recentes
Adicione a anotação
baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true"
ao arquivo de configuração do cluster:apiVersion: v1 kind: Namespace metadata: name: cluster-USER_CLUSTER_NAME --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: USER_CLUSTER_NAME namespace: cluster-USER_CLUSTER_NAME annotations: baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true" spec: type: admin profile: default anthosBareMetalVersion: 1.33.0-gke.799 ...
O token de acesso tem vida curta. Por isso, geralmente é necessário regenerá-lo antes de executar comandos
bmctl
para operações de cluster, como criar, fazer upgrade ou redefinir um cluster.Na estação de trabalho do administrador, atualize a variável de ambiente
GCP_ACCESS_TOKEN
com um token de acesso recém-recuperado:export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
Por padrão, o token de acesso tem uma vida útil de 3.600 segundos (1 hora).
Configure a federação de identidade da carga de trabalho para o cluster que você está criando:
bmctl configure projects --project-id=PROJECT_ID \ --user-clusters=USER_CLUSTER_NAME
Use
kubectl
para implantar o manifesto do cluster de usuário:kubectl apply -f USER_CLUSTER_CONFIG \ --kubeconfig ADMIN_KUBECONFIG
Substitua:
USER_CLUSTER_CONFIG
: o caminho do arquivo de configuração do cluster de usuário.ADMIN_KUBECONFIG
: o caminho do arquivo kubeconfig do cluster de administrador.
1.30-1.32
Na estação de trabalho do administrador, crie e faça o download de uma chave para a conta de serviço
admin-sa
:Essa chave é necessária para autorizar o acesso à conta de serviço
admin-sa
e você a exclui imediatamente após a autorização da conta.gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \ --iam-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com
Substitua
TMP_KEY_FILE_PATH
pelo caminho, incluindo o nome do arquivo de chave salvo.Autorize o acesso ao Google Cloud com a conta de serviço
admin-sa
:gcloud auth activate-service-account admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --key-file=TMP_KEY_FILE_PATH
Exclua o arquivo de chave JSON salvo:
rm TMP_KEY_FILE_PATH
O token de acesso tem curta duração. Por isso, geralmente é necessário regenerá-lo antes de executar comandos
bmctl
para operações de cluster, como criar, fazer upgrade ou redefinir um cluster.Na estação de trabalho do administrador, crie uma variável de ambiente
GCP_ACCESS_TOKEN
com o valor de um token de acesso criado pela conta de serviçoadmin-sa
:export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \ --impersonate-service-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com)
Por padrão, o token de acesso tem uma vida útil de 3.600 segundos (1 hora).
Execute o comando
bmctl create cluster
para criar o cluster de usuário.
Outras operações de cluster
Para clusters que usam a autenticação de cluster da Identidade da carga de trabalho, os seguintes comandos bmctl
exigem que
a variável de ambiente GCP_ACCESS_TOKEN
seja definida como um token de acesso
válido e ativo:
bmctl configure projects
bmctl create cluster
bmctl reset cluster
bmctl upgrade cluster
Se o bmctl
detectar que a variável de ambiente GCP_ACCESS_TOKEN
foi
configurada, ele vai realizar a validação do token:
Se o token for válido, o
bmctl
vai usá-lo para operações de cluster.Se o token não for válido, recupere um novo:
O token de acesso tem vida curta. Por isso, geralmente é necessário regenerá-lo antes de executar comandos
bmctl
para operações de cluster, como criar, fazer upgrade ou redefinir um cluster. Na estação de trabalho do administrador, atualize a variável de ambienteGCP_ACCESS_TOKEN
com um token de acesso recém-recuperado:1.33 e versões mais recentes
export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
1.30-1.32
export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \ --impersonate-service-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com)
Por padrão, o token de acesso tem uma vida útil de 3.600 segundos (1 hora). Ao usar a autenticação de cluster da Identidade da carga de trabalho, o
bmctl
verifica o tempo de expiração do token. Se a expiração do token for em até 1.800 segundos (30 minutos),bmctl
vai informar um erro e sair.
Personalização
É possível usar contas de serviço com nomes exclusivos para a autenticação de cluster da identidade da carga de trabalho, desde que elas tenham vinculações para as funções necessárias.
1.33 e versões mais recentes
Por padrão, a autenticação de cluster da Identidade da carga de trabalho para clusters da versão 1.33 e mais recentes usa apenas a conta de serviço baremetal-gcr
. Portanto, essa é a única conta de serviço que pode ser personalizada.
Verifique se a conta de serviço que você quer usar tem os papéis identificados na tabela em Antes de começar.
Adicione anotações ao arquivo de configuração do cluster para especificar o nome personalizado da conta de serviço da autenticação de cluster da Identidade da carga de trabalho:
apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: my-cluster namespace: cluster-my-cluster annotations: ... baremetal.cluster.gke.io/gcr-service-account: "CUSTOM_AR_GSA" spec: type: admin profile: default anthosBareMetalVersion: 1.33.0-gke.799 ...
Substitua CUSTOM_AR_GSA
pelo nome de e-mail da
conta de serviço usada pelo Google Distributed Cloud para baixar imagens de contêiner
do Artifact Registry.
1.30-1.32
Verifique se as contas de serviço que você quer usar têm os papéis identificados na tabela em Antes de começar.
Adicione anotações ao arquivo de configuração do cluster para especificar os nomes personalizados das contas de serviço do serviço de autenticação do cluster da Identidade da carga de trabalho:
A especificação de nomes personalizados permite usar contas de serviço atuais. Verifique se os nomes personalizados das conta de serviço especificados são diferentes entre si. Não é possível usar uma única conta de serviço para substituir duas ou mais contas de serviço padrão.
apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: my-cluster namespace: cluster-my-cluster annotations: ... baremetal.cluster.gke.io/controller-service-account: "CUSTOM_CONTROLLER_GSA" baremetal.cluster.gke.io/cloud-ops-service-account: "CUSTOM_CLOUD_OPS_GSA" baremetal.cluster.gke.io/gcr-service-account: "CUSTOM_AR_GSA" spec: type: admin profile: default anthosBareMetalVersion: 1.30.0-gke.1930 ...
Substitua:
CUSTOM_CONTROLLER_GSA
: o nome de e-mail da conta de serviço usada pelo Agente do Connect para manter uma conexão entre o cluster e Google Cloude para registrar os clusters.CUSTOM_CLOUD_OPS_GSA
: o nome de e-mail da conta de serviço usada pelo Agente do Stackdriver para exportar registros e métricas de clusters para o Cloud Logging e o Cloud Monitoring.CUSTOM_AR_GSA
: o nome de e-mail da conta de serviço usada pelo Google Distributed Cloud para baixar imagens de contêiner do Artifact Registry.
Limitações
Os seguintes recursos e funcionalidades não são compatíveis quando você usa a autenticação de cluster do Workload Identity para o Google Distributed Cloud (somente software) em bare metal:
- Como usar um servidor proxy
- VPC Service Controls
- Atualize os clusters do modo com chaves atuais para usar a autenticação de cluster da Identidade da carga de trabalho.
- Gerenciamento do ciclo de vida do cluster usando clientes da API GKE On-Prem, como a Google Cloud CLI, o Terraform ou o console Google Cloud