Configure credenciais preparadas para clusters de utilizadores

Este documento mostra como configurar credenciais preparadas para clusters de utilizadores no Google Distributed Cloud.

Com as credenciais preparadas, pode armazenar credenciais para os seus clusters de utilizadores em segredos no cluster de administrador. Isto oferece um elemento de segurança, porque não tem de manter as palavras-passe e as chaves de contas de serviço na sua estação de trabalho de administrador à medida que cria os clusters de utilizadores.

Tenha em atenção a seguinte limitação com os clusters avançados:

  • Versão 1.31: as credenciais preparadas não são suportadas em clusters avançados.
  • Versão 1.32 e superior: as credenciais preparadas são suportadas em clusters avançados.

Prepara os segredos no cluster de administrador antecipadamente. Em seguida, à medida que cria clusters de utilizadores, pode especificar que determinadas credenciais devem ser retiradas dos segredos preparados no cluster de administrador. Também pode usar os segredos preparados quando roda as credenciais num cluster de utilizadores.

Antes de começar

Crie um cluster de administrador se ainda não tiver um.

Vista geral do procedimento

  1. Preencha um ficheiro de configuração de segredos.

  2. No cluster de administrador, crie grupos de segredos. Cada grupo de segredos está no seu próprio espaço de nomes do Kubernetes.

  3. Crie um cluster de utilizadores. No ficheiro de configuração do cluster de utilizadores, indique que quer que as credenciais sejam retiradas de segredos num espaço de nomes específico no cluster de administrador.

  4. Crie grupos de Secrets adicionais e versões adicionais dos seus Secrets, conforme necessário.

  5. Atualize as credenciais de um cluster de utilizadores existente conforme necessário.

  6. Crie clusters de utilizadores adicionais conforme desejado. Em cada ficheiro de configuração do cluster de utilizadores, especifique um namespace de segredos. Também pode especificar que versão de um Secret quer usar para uma credencial específica.

Preencha o ficheiro de configuração de segredos

Gere um modelo para um ficheiro de configuração de segredos:

gkectl create-config secrets

O comando anterior gera um ficheiro com o nome secrets.yaml. Pode alterar o nome e a localização deste ficheiro, se quiser.

Familiarize-se com o ficheiro de configuração lendo o documento Ficheiro de configuração de segredos. Recomendamos que mantenha este documento aberto num separador ou numa janela separados.

No ficheiro de configuração de segredos, preencha os valores relevantes para a sua situação. Tem de preencher um valor para namespace que comece por gke-onprem-secrets-.

Segue-se um exemplo de um ficheiro de configuração de segredos que tem um grupo de segredos. O grupo tem valores para as credenciais do vCenter e quatro chaves de contas 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"

Crie Secrets preparados

Crie segredos preparados no cluster de administrador:

gkectl prepare secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG --secret-config SECRETS_CONFIG

Substitua o seguinte:

  • ADMIN_CLUSTER_KUBECONFIG: o caminho do ficheiro kubeconfig do cluster de administrador

  • SECRETS_CONFIG: o caminho do seu ficheiro de configuração de segredos

Veja os seus segredos preparados

Liste os segredos preparados no cluster de administração:

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 pode executar kubectl get secrets para listar os segredos num espaço de nomes. Por 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, pode ver que cada nome do Secret tem uma extensão que indica a versão do Secret. Neste exemplo, todos os segredos têm a versão 1.

Crie um cluster de utilizadores

Siga as instruções em Crie um cluster de utilizadores.

À medida que preenche o ficheiro de configuração do cluster de utilizadores, introduza um valor para preparedSecrets.namespace. Este valor tem de corresponder a um espaço de nomes que especificou anteriormente num ficheiro de configuração de segredos.

Exemplo:

preparedSecrets:
  namespace: "gke-onprem-secrets-user-cluster-1"

No ficheiro de configuração do cluster de utilizadores, não especifique valores para os seguintes campos. Estes campos não são necessários porque o Google Distributed Cloud obtém as credenciais e as chaves dos seus segredos preparados.

  • vCenter.credentials.fileRef.path
  • componentAccessServiceAccountKeyPath
  • loadBalancer.f5BigIP.credentials.fileRef.path
  • gkeConnect.registerServiceAccountKeyPath
  • stackdriver.serviceAccountKeyPath
  • usageMetering.bigQueryServiceAccountKeyPath
  • cloudAuditLogging.serviceAccountKeyPath
  • privateRegistry.credentials.fileRef.path

No ficheiro de configuração do cluster de utilizadores, especifique as versões dos segredos preparados que pretende usar. Segue-se um exemplo que especifica a versão 1 para cada um dos cinco segredos:

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 tem de ser uma string de número inteiro ou a string "latest". Se não especificar um valor para version, é usada a versão mais recente.

Conclua a criação do cluster de utilizadores conforme descrito em Crie um cluster de utilizadores.

Crie Secrets preparados adicionais

Esta secção mostra como criar a versão 2 de alguns dos segredos num espaço de nomes existente.

Crie um novo ficheiro de configuração de segredos denominado secrets-2.yaml. Especifique um espaço de nomes existente e faculte credenciais para os segredos 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 chaves para os seguintes segredos no espaço de nomes gke-onprem-secrets-user-cluster-1.

  • Versão 2 do stackdriver-service-account-creds secret
  • Versão 2 do cloud-audit-logging-service-account-creds secret

Crie os novos Secrets:

gkectl prepare secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG --secret-config secrets-2.yaml

Liste os segredos preparados no cluster de administração:

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, pode ver que existem duas versões do stackdriver-service-account-creds Secret e duas versões do cloud-audit-logging-service-account-creds Secret.

Rode as credenciais de um cluster de utilizadores

Esta secção mostra como rodar as credenciais selecionadas para um cluster de utilizadores existente.

Antes de rodar as credenciais, verifique as versões secretas atuais 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 ficheiro de configuração do cluster de utilizadores para um ficheiro denominado user-cluster-update.yaml.

Em user-cluster-update.yaml, adicione secções serviceAccountKey. Por exemplo, o exemplo seguinte tem serviceAccountKey secções 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 utilizadores é atualizado, usa:

  • Versão 2 do stackdriver-service-account-creds secret

  • A versão mais recente do cloud-audit-logging-service-account-creds Secret. Neste exemplo, é a versão 2.

Atualize as credenciais do cluster de utilizadores:

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 utilizadores usa os seguintes segredos 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

Crie segredos e clusters de utilizadores adicionais

Se planeia criar clusters de utilizadores adicionais, pense em como quer organizar os segredos preparados. Pode criar um espaço de nomes separado no cluster de administrador para cada cluster de utilizador. Em alternativa, pode querer partilhar o mesmo espaço de nomes secreto preparado para vários ou todos os clusters de utilizadores.

Por exemplo, suponhamos que a Alice, o Bob e a Carol vão ter cada um um cluster de utilizadores. Pode criar três grupos secretos, 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"

Ao longo do tempo, pode criar versões adicionais dos segredos em cada grupo de segredos.

Nos ficheiros de configuração do cluster de utilizadores, indique valores para serviceAccountKey.secretRef.version para especificar as versões dos seus segredos que quer usar. Pode definir o valor como "latest", a string vazia ou uma string de número inteiro.

Por exemplo, suponhamos que todos os seus segredos têm as versões 1, 2 e 3. Suponhamos que esta é uma parte do ficheiro de configuração do cluster de utilizadores para a 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 existe nenhum secretRef especificado para o vCenter, pelo que o cluster vai usar a versão mais recente do segredo vsphere-creds no espaço de nomes gke-onprem-secrets-alice.

  • O cluster vai usar a versão 2 do register-service-account-creds Secret no espaço de nomes gke-onprem-secrets-alice.

  • O cluster vai usar a versão mais recente do Secret no espaço de nomes gke-onprem-secrets-alice.stackdriver-service-account-creds Neste exemplo, é a versão 3.

  • A versão de cloudAuditLogging é a string vazia, pelo que o cluster vai usar a versão mais recente do segredo cloud-audit-logging-service-account-creds no espaço de nomes gke-onprem-secrets-alice. Neste exemplo, é a versão 3.

  • Não existe nenhum secretRef.version especificado para a conta de serviço de acesso aos componentes, pelo que o cluster vai usar a versão mais recente.

Elimine segredos preparados

Para listar todos os segredos preparados e os respetivos espaços de nomes:

gkectl list secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG

Se nenhum cluster de utilizadores estiver a usar um espaço de nomes secreto preparado, pode eliminar o espaço de nomes.

Para eliminar um espaço de nomes de segredos preparado e todos os segredos no mesmo:

gkectl delete secret –namespace PREPARED_SECRET_NAMESPACE \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIG

Se um segredo preparado individual não estiver a ser usado por nenhum cluster de utilizadores, pode eliminar o segredo.

Para eliminar um segredo preparado individual:

gkectl delete secret –namespace PREPARED_SECRET_NAMESPACE \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --secret-name SECRET