Neste documento, mostramos como configurar credenciais preparadas para clusters de usuário no GKE no VMware.
Com as credenciais preparadas, é possível armazenar credenciais para os clusters de usuário em secrets no cluster de administrador. Isso proporciona um elemento de segurança, porque você não precisa manter senhas e chaves de conta de serviço na estação de trabalho de administrador ao criar os clusters de usuários.
Você prepara os secrets no cluster de administrador com antecedência. Em seguida, ao criar clusters de usuário, é possível especificar que determinadas credenciais sejam extraídas dos Secrets preparados no cluster de administrador. Também é possível usar os secrets preparados ao alternar credenciais em um cluster de usuário.
Antes de começar
Crie um cluster de administrador se você ainda não tiver um.
Visão geral do procedimento
Preencha um arquivo de configuração de secrets.
No cluster de administrador, crie grupos de secrets. Cada grupo secreto está no próprio namespace do Kubernetes.
Criar um cluster de usuário. No arquivo de configuração do cluster de usuário, indique que você quer que as credenciais sejam extraídas dos Secrets em um namespace específico no cluster de administrador.
Crie outros grupos de secrets e versões adicionais deles conforme necessário.
Atualize as credenciais de um cluster de usuário existente conforme necessário.
Crie outros clusters de usuário conforme preferir. Em cada arquivo de configuração do cluster de usuário, especifique um namespace do Secrets. Também é possível especificar qual versão de um secret você quer usar para uma credencial específica.
Preencha o arquivo de configuração de secrets
Gerar um modelo para um arquivo de configuração de secrets:
gkectl create-config secrets
O comando anterior gera um arquivo chamado secrets.yaml
. É possível mudar o
nome e o local desse arquivo, se quiser.
Para se familiarizar com o arquivo de configuração, leia o documento Arquivo de configuração de secrets. Mantenha esse documento aberto em outra guia ou janela.
No arquivo de configuração do Secrets, preencha os valores relevantes
para a situação. Preencha um valor para namespace
que comece com
gke-onprem-secrets-
.
Veja um exemplo de arquivo de configuração de secrets que tem um grupo de secrets. O grupo tem valores para as credenciais do vCenter e quatro chaves de conta de serviço:
apiVersion: v1 kind: ClusterSecrets secretGroups: - namespace: "gke-onprem-secrets-user-cluster-1" secrets vCenter: username: "my-vcenter-account" password: "U$icUKEW#INE" componentAccessServiceAccount: serviceAccountKeyPath: "my-key-folder/component-access-key.json" registerServiceAccount: serviceAccountKeyPath: "my-key-folder/connect-register-key.json" stackdriverServiceAccount: serviceAccountKeyPath: "my-key-folder/log-mon-key.json" cloudAuditLoggingServiceAccount: serviceAccountKeyPath: "my-key-folder/audit-log-key.json"
Criar Secrets preparados
Crie secrets preparadas no cluster de administrador:
gkectl prepare secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG --secret-config SECRETS_CONFIG
Substitua:
ADMIN_CLUSTER_KUBECONFIG: o caminho do arquivo kubeconfig do cluster de administrador
SECRETS_CONFIG: o caminho do arquivo de configuração do Secrets
Ver as chaves secretas preparadas
Liste os Secrets preparados no cluster de administrador:
gkectl list secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Exemplo de saída:
The following secrets have been found: - namespace: gke-onprem-secrets-user-cluster-1 - secrets with name prefix: component-access-sa-creds name: component-access-sa-creds.1, version 1, age: 58s - secrets with name prefix: cloud-audit-logging-service-account-creds name: cloud-audit-logging-service-account-creds.1, version: 1, age: 58s - secrets with name prefix: register-service-account-creds name: register-service-account-creds.1, version: 1, age: 58s - secrets with name prefix: stackdriver-service-account-creds name: stackdriver-service-account-creds.1, version: 1, age: 58s - secrets with name prefix: vsphere-creds name: vsphere-creds.1, version: 1, age: 58s
Também é possível executar kubectl get secrets
para listar os Secrets em um namespace. Exemplo:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get secrets --namespace gke-onprem-secrets-user-cluster-1
Exemplo de saída:
component-access-sa-creds ... cloud-audit-logging-service-account-creds ... register-service-account-creds.1 ... stackdriver-service-account-creds.1 ... vsphere-creds.1 ...
Na saída anterior, é possível ver que cada nome de secret tem uma extensão que indica sua versão. Neste exemplo, todos os Secrets têm a versão 1.
Criar um cluster de usuário
Siga as instruções em Criar um cluster de usuário.
Ao preencher o arquivo de configuração do cluster de usuário, insira um valor para
preparedSecrets.namespace
. Esse valor precisa corresponder a um namespace especificado anteriormente em um arquivo de configuração de secrets.
Exemplo:
preparedSecrets: namespace: "gke-onprem-secrets-user-cluster-1"
No arquivo de configuração do cluster de usuário, não especifique valores para os campos a seguir. Esses campos não são necessários porque o GKE no VMware recebe as credenciais e chaves dos Secrets preparados.
vCenter.credentials.fileRef.path
componentAccessServiceAccountKeyPath
loadBalancer.f5BigIP.credentials.fileRef.path
gkeConnect.registerServiceAccountKeyPath
stackdriver.serviceAccountKeyPath
usageMetering.bigQueryServiceAccountKeyPath
cloudAuditLogging.serviceAccountKeyPath
privateRegistry.credentials.fileRef.path
No arquivo de configuração do cluster de usuário, especifique as versões dos Secrets preparados que você pretende usar. Veja um exemplo que especifica a versão 1 para cada um dos cinco Secrets:
vCenter: credentials: secretRef: version "1" ... componentAccessServiceAccountKey: secretRef: version: "1" ... gkeConnect: registerServiceAccountKey: secretRef: version: "1" ... stackdriver: serviceAccountKey: secretRef: version: "1" ... cloudAuditLogging: serviceAccountKey: secretRef: version: "1"
O valor de version
precisa ser uma string inteira ou a string "mais recente". Se você
não especificar um valor para version
, a versão mais recente vai ser usada.
Conclua a criação do cluster de usuário conforme descrito em Criar um cluster de usuário.
Criar mais secrets preparados
Veja nesta seção como criar a versão 2 de alguns dos secrets em um namespace existente.
Crie um novo arquivo de configuração de secrets chamado secrets-2.yaml
. Especifique um namespace atual e forneça credenciais para os secrets selecionados.
Exemplo:
apiVersion: v1 kind: ClusterSecrets secretGroups: - namespace: "gke-onprem-secrets-user-cluster-1" secrets: stackdriverServiceAccount: serviceAccountKeyPath: "log-mon-sa-2.json" cloudAuditLoggingServiceAccount: serviceAccountKeyPath: "audit-log-sa-2.json"
O exemplo anterior fornece caminhos de chave para os secrets abaixo no namespace
gke-onprem-secrets-user-cluster-1
.
- Versão 2 do secret
stackdriver-service-account-creds
- Versão 2 do secret
cloud-audit-logging-service-account-creds
Crie os novos secrets:
gkectl prepare secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG --secret-config secrets-2.yaml
Liste os Secrets preparados no cluster de administrador:
gkectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG list secrets
Exemplo de saída:
The following secrets have been found: - namespace: gke-onprem-secrets-user-cluster-1 - secrets with name prefix: component-access-sa-creds name: component-access-sa-creds.1, version 1, age: 11h - secrets with name prefix: cloud-audit-logging-service-account-creds name: cloud-audit-logging-service-account-creds.1, version: 1, age: 11h name: cloud-audit-logging-service-account-creds.2, version: 2, age: 33m - secrets with name prefix: register-service-account-creds name: register-service-account-creds.1, version: 1, age: 11h - secrets with name prefix: stackdriver-service-account-creds name: stackdriver-service-account-creds.1, version: 1, age: 11h name: stackdriver-service-account-creds.2, version: 2, age: 33m - secrets with name prefix: vsphere-creds name: vsphere-creds.1, version: 1, age: 11h
Na saída anterior, observe que há duas versões do
Secret stackdriver-service-account-creds
e duas versões do
Secret cloud-audit-logging-service-account-creds
.
Alternar credenciais para um cluster de usuário
Nesta seção, mostramos como fazer a rotação de credenciais selecionadas para um cluster de usuário existente.
Antes de fazer isso, verifique as versões atuais do Secret usadas no cluster:
gkectl list secrets cluster --cluster-name USER_CLUSTER_NAME kubeconfig ADMIN_CLUSTER_KUBECONFIG
Exemplo de saída:
The following prepared secrets have been used for cluster "user-cluster-1": - namespace: gke-onprem-secrets-user-cluster-1 secret: vsphere-creds.1, version: 1 secret: f5-creds.1, version: 1 secret: component-access-sa-creds.1, version 1 secret: register-service-account-creds.1, version: 1 secret: stackdriver-service-account-creds.1, version: 1 secret: cloud-audit-logging-service-account-creds.1, version: 1
Copie o arquivo de configuração do cluster de usuário para um arquivo chamado user-cluster-update.yaml
.
No user-cluster-update.yaml
, adicione seções serviceAccountKey
. Por exemplo, o
exemplo a seguir tem seções serviceAccountKey
em stackdriver
e
cloudAuditLogging
:
stackdriver: projectID: "my-project-123" clusterLocation: "us-central1" serviceAccountKey: secretRef: version: "2" cloudAuditLogging: projectID: "my-project-123" clusterLocation: "us-central-1" serviceAccountKey: secretRef: version: "latest"
O exemplo anterior especifica que, quando o cluster de usuário for atualizado, ele usará:
Versão 2 do secret
stackdriver-service-account-creds
A versão mais recente do Secret do
cloud-audit-logging-service-account-creds
. Neste exemplo, é a versão 2.
Atualize as credenciais do cluster de usuário:
gkectl update credentials stackdriver --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config user-cluster-2.yaml gkectl update credentials cloudauditlogging --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config user-cluster-2.yaml
Agora o cluster de usuário usará os seguintes secrets preparados:
- Versão 1 de
vsphere-creds
- Versão 1 de
component-access-sa-creds
- Versão 1 de
register-service-account-creds
- Versão 2 de
stackdriver-service-account-creds
- Versão 2 de
cloud-audit-logging-service-account-creds
Criar secrets e clusters de usuários adicionais
Se você planeja criar outros clusters de usuário, pense em como você quer organizar seus Secrets preparados. Crie um namespace separado no cluster de administrador para cada cluster de usuário. Ou talvez você queira compartilhar o mesmo namespace do secret para vários clusters de usuários ou todos eles.
Por exemplo, suponha que Alice, Beto e Carol tenham um cluster de usuário. É possível criar três grupos de secrets, como mostrado neste exemplo:
apiVersion: v1 kind: ClusterSecrets secretGroups: - namespace: "gke-onprem-secrets-alice" secrets: vCenter: username: "alice" password: "zC7r^URDPq2t" componentAccessServiceAccount: serviceAccountKeyPath: "component-access-sa-a.json" registerServiceAccount: serviceAccountKeyPath: "register-sa-a.json" stackdriverServiceAccount: serviceAccountKeyPath: "log-mon-sa-a.json" cloudAuditLoggingServiceAccount: serviceAccountKeyPath: "audit-log-sa-a.json" - namespace: "gke-onprem-secrets-bob" secrets: vCenter: username: "bob" password: "zC8r^URDPq2t" componentAccessServiceAccount: serviceAccountKeyPath: "component-access-sa-b.json" registerServiceAccount: serviceAccountKeyPath: "register-sa-b.json" stackdriverServiceAccount: serviceAccountKeyPath: "log-mon-sa-b.json" cloudAuditLoggingServiceAccount: serviceAccountKeyPath: "audit-log-sa-b.json" - namespace: "gke-onprem-secrets-carol" secrets: vCenter: username: "carol" password: "zC9r^URDPq2t" componentAccessServiceAccount: serviceAccountKeyPath: "component-access-sa-c.json" registerServiceAccount: serviceAccountKeyPath: "register-sa-c.json" stackdriverServiceAccount: serviceAccountKeyPath: "log-mon-sa-c.json" cloudAuditLoggingServiceAccount: serviceAccountKeyPath: "audit-log-sa-c.json"
Com o tempo, é possível criar versões adicionais dos secrets em cada grupo.
Nos arquivos de configuração do cluster de usuário, forneça valores para serviceAccountKey.secretRef.version
para especificar quais versões dos Secrets você quer usar. Defina o valor como "latest"
, a string vazia ou uma string inteira.
Por exemplo, suponha que todos os Secrets tenham as versões 1, 2 e 3. E suponha que essa é uma parte do arquivo de configuração do cluster de usuário para Alice.
apiVersion: v1 kind: UserCluster name: "user-cluster-alice" preparedSecrets: namespace: "gke-onprem-secrets-alice" ... vCenter: credentials: gkeConnect: projectID: "project-a" serviceAccountKey: secretRef: version: "2" stackdriver: projectID: "project-a" clusterLocation: "us-central1" serviceAccountKey: secretRef: version: "latest" cloudAuditLogging: projectID: "project-a" clusterLocation: "us-central-1" serviceAccountKey: secretRef: version: ""
No exemplo anterior, podemos ver:
Não há
secretRef
especificado para o vCenter. Portanto, o cluster usará a versão mais recente do Secretvsphere-creds
no namespacegke-onprem-secrets-alice
.O cluster usará a versão 2 do secret
register-service-account-creds
no namespacegke-onprem-secrets-alice
.O cluster usará a versão mais recente do secret
stackdriver-service-account-creds
no namespacegke-onprem-secrets-alice
. Neste exemplo, é a versão 3.A versão de
cloudAuditLogging
é a string vazia, portanto, o cluster usará a versão mais recente do Secretcloud-audit-logging-service-account-creds
no namespacegke-onprem-secrets-alice
. Neste exemplo, é a versão 3.Não há
secretRef.version
especificado para o vCenter. Portanto, o cluster usa a versão mais recente.
Excluir secrets preparados
Para listar todos os Secrets preparados e os namespaces deles, faça o seguinte:
gkectl list secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Se um namespace do Secret preparado não estiver sendo usado por nenhum cluster de usuário, ele pode ser excluído.
Para excluir um namespace do Secret preparado e todos os Secrets contidos nele, faça o seguinte:
gkectl delete secret –namespace PREPARED_SECRET_NAMESPACE \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Se um secret individual preparado não estiver sendo usado por nenhum cluster de usuário, ele pode ser excluído.
Para excluir um Secret preparado individualmente:
gkectl delete secret –namespace PREPARED_SECRET_NAMESPACE \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --secret-name SECRET
Documentos relacionados
- Arquivo de configuração de secrets
- Arquivo de configuração do cluster de usuário
- Criar um cluster de usuário
- Criar contas de serviço