Saiba como autenticar os serviços do Knative serving com a federação de identidade da carga de trabalho para GKE para acessar Google Cloud APIs como as APIs do Compute, APIs Storage e Database ou APIs de machine learning.
Para autenticar os serviços do Knative serving, você precisa fazer o seguinte:
- Ativar a federação de identidade da carga de trabalho para GKE no cluster
- Configurar permissões
- Vincular a conta de serviço do Kubernetes (KSA) a uma conta de serviço do Google (GSA)
Depois de seguir essas etapas, implante um novo serviço do Knative serving que usa a identidade que você criou.
Como ativar a federação de identidade da carga de trabalho para GKE no cluster
Para configurar a federação de identidade da carga de trabalho para GKE com o Knative serving, configure a federação de identidade da carga de trabalho da frota em vez de usar um Google Cloud arquivo JSON da conta de serviço.
Configurar permissões para ativar todas as métricas
Para ativar métricas, como a geração de relatórios de contagem de solicitações ou de latência para o Google Cloud Observability, é necessário conceder as permissões de gravação do Cloud Monitoring. Por
exemplo, é possível conceder o
papel de gravador de métricas do Monitoring
(roles/monitoring.metricWriter) à conta de serviço do Google associada ao Knative serving, porque ele inclui as
permissões necessárias para gravar dados de monitoramento. Consulte
Como usar contas de serviço para mais
informações sobre como criar contas de serviço do Google.
Como vincular contas de serviço
Configure um relacionamento para uma conta de serviço do Kubernetes (KSA) para atuar uma conta de serviço do Google (GSA). Qualquer carga de trabalho executada como a KSA que você vincular será autenticada automaticamente como GSA ao acessar Google Cloud APIs. A KSA que você vincular precisa existir dentro do cluster e do namespace do serviço do Knative serving em que você quer usar a federação de identidade da carga de trabalho para GKE. A GSA pode pertencer a um Google Cloud projeto diferente do Google Cloud projeto em que o cluster reside.
Se não houver uma VPC, crie uma. Caso contrário, pule para a próxima etapa. É possível criar uma GSA para usar com o Knative serving em qualquer Google Cloud projeto na organização e usá-la no Google Cloud projeto em que os serviços do Knative serving são executados.
Para criar uma nova GSA, execute o seguinte comando:
gcloud iam service-accounts create GSA_NAME
Substitua GSA_NAME pelo nome da nova conta de serviço do Google.
Para mais informações sobre como usar contas de serviço do Google com seus serviços do Knative serving, consulte Como usar contas de serviço.
Verifique se a GSA tem os papéis do IAM necessários. É possível conceder outros papéis usando o seguinte comando:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --role "ROLE_NAME"
Substitua:
- PROJECT_ID: pelo Google Cloud ID do projeto em que a conta de serviço do Google reside.
- GSA_NAME pelo nome da conta de serviço do Google
- ROLE_NAME pelo papel do IAM a ser atribuído à sua
GSA, como
roles/monitoring.metricWriter.
Se não houver uma conta de serviço do Kubernetes, crie uma no mesmo namespace do Kubernetes do serviço do Knative serving. Caso contrário, passe para a próxima etapa:
kubectl create serviceaccount --namespace K8S_NAMESPACE KSA_NAME
Vincule as contas de serviço do Kubernetes e do Google para criar a identidade e implantá-la no cluster:
Permita que a KSA represente a GSA criando uma vinculação de política do IAM entre as duas.
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:PROJECT_ID.svc.id.goog[K8S_NAMESPACE/KSA_NAME]" \ GSA_NAME@GSA_PROJECT_ID.iam.gserviceaccount.com
Substitua:
- PROJECT_ID pelo ID do Google Cloud projeto do cluster em que a conta de serviço do Kubernetes e os serviços do Knative serving residem.
- K8S_NAMESPACE/KSA_NAME pelo namespace e nome da sua conta de serviço do Kubernetes.
- GSA_NAME@GSA_PROJECT_ID pelo nome da sua Conta de serviço do Google e pelo ID do Google Cloud projeto. É possível usar qualquer conta de serviço do Google na sua organização. Para ver suas contas de serviço do Google, consulte Como listar contas de serviço.
Adicione a anotação
iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT_IDà KSA usando o endereço de e-mail da GSA.kubectl annotate serviceaccount \ --namespace K8S_NAMESPACE KSA_NAME \ iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT_ID.iam.gserviceaccount.com
Substitua:
- K8S_NAMESPACE/KSA_NAME pelo namespace e nome da conta de serviço do Kubernetes para a qual você criou uma vinculação.
- GSA_NAME@GSA_PROJECT_ID pelo nome da sua Conta de serviço do Google e pelo ID do Google Cloud projeto para o qual você criou uma vinculação.
Como implantar um novo serviço para usar a federação de identidade da carga de trabalho para GKE
Implante um novo serviço do Knative serving que usa a federação de identidade da carga de trabalho para GKE que você criou.
Console
Acesse o Knative serving no Google Cloud console:
Clique em Criar serviço se estiver configurando um novo serviço em que fará uma implantação. Se você estiver configurando um serviço atual, clique nele e em Editar e implantar uma nova revisão.
Em Configurações avançadas, clique em Contêiner.
Clique no menu suspenso Conta de serviço e selecione a conta de serviço desejada.
Clique em Avançar para acessar a próxima seção.
Na seção Configurar como este serviço é acionado, selecione qual conectividade você quer usar para invocar o serviço.
Clique em Criar para implantar a imagem no Knative serving e aguarde até que a implantação seja concluída.
Linha de comando
Para os serviços atuais, defina a conta de serviço do Kubernetes executando o comando
gcloud run services updatecom os seguintes parâmetros:gcloud run services update SERVICE --service-account KSA_NAME
Substitua:
- SERVICE pelo nome do serviço do Knative serving.
- KSA_NAME pela conta de serviço do Kubernetes que você usou para criar a identidade da carga de trabalho.
Para novos serviços, defina a conta de serviço do Kubernetes executando o
gcloud run deploycomando com o--service-accountparâmetro:gcloud run deploy --image IMAGE_URL --service-account KSA_NAME
Substitua:
- IMAGE_URL com uma referência à imagem do contêiner, por
exemplo,
gcr.io/cloudrun/hello. - KSA_NAME pela conta de serviço do Kubernetes que você usou para criar a identidade da carga de trabalho.
- IMAGE_URL com uma referência à imagem do contêiner, por
exemplo,
YAML
Faça o download da configuração de um serviço existente para um
arquivo YAML com o comando gcloud run services describe usando a
sinalização --format=export.
Em seguida, modifique o arquivo YAML e implante
essas alterações com o comando gcloud run services replace.
Modifique apenas os atributos especificados.
Faça o download da configuração do serviço em um arquivo chamado
service.yamlno espaço de trabalho local:gcloud run services describe SERVICE --format export > service.yaml
Substitua SERVICE pelo nome do seu serviço do Knative serving.
No seu arquivo local, atualize o atributo
serviceAccountName::apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: spec: serviceAccountName: KSA_NAME
Substituir
- SERVICE pelo nome do serviço do Knative serving.
- KSA_NAME pela conta de serviço do Kubernetes que você usou para criar a identidade da carga de trabalho.
Implante a configuração no serviço do Knative serving executando o seguinte comando:
gcloud run services replace service.yaml
Como migrar serviços atuais para usar a federação de identidade da carga de trabalho para GKE
Se você ativou a federação de identidade da carga de trabalho para GKE em um cluster atual, cada serviço desse cluster em que você quer usar a federação de identidade da carga de trabalho para GKE precisa ser migrado. Saiba como migrar serviços existentes.
Próximas etapas
Saiba como gerenciar o acesso aos seus serviços.