Configurer des identifiants préparés pour les clusters d'utilisateur

Ce document explique comment configurer des identifiants préparés pour les clusters d'utilisateur dans GKE sur VMware.

Avec les identifiants préparés, vous pouvez stocker les identifiants de vos clusters d'utilisateur dans des secrets de votre cluster d'administrateur. Cela offre un élément de sécurité, car vous n'avez pas besoin de conserver les mots de passe et les clés de compte de service sur votre poste de travail administrateur lorsque vous créez vos clusters d'utilisateur.

Vous préparez les secrets dans le cluster d'administrateur à l'avance. Ensuite, lorsque vous créez des clusters d'utilisateur, vous pouvez spécifier que certains identifiants doivent être issus des secrets préparés dans le cluster d'administrateur. Vous pouvez également utiliser les secrets préparés lorsque vous effectuez la rotation des identifiants dans un cluster d'utilisateur.

Avant de commencer

Créez un cluster d'administrateur si vous n'en avez pas encore.

Présentation de la procédure

  1. Remplissez un fichier de configuration de Secrets.

  2. Dans votre cluster d'administrateur, créez des groupes de secrets. Chaque groupe de secrets se trouve dans son propre espace de noms Kubernetes.

  3. Créez un cluster d'utilisateur. Dans le fichier de configuration du cluster d'utilisateur, indiquez que vous souhaitez que les identifiants soient obtenus à partir de secrets d'un espace de noms particulier du cluster d'administrateur.

  4. Créez des groupes de secrets supplémentaires et des versions supplémentaires de vos secrets si nécessaire.

  5. Si nécessaire, mettez à jour les identifiants d'un cluster d'utilisateur existant.

  6. Créez des clusters d'utilisateur supplémentaires selon vos besoins. Dans chaque fichier de configuration de cluster d'utilisateur, spécifiez un espace de noms Secrets. Vous pouvez également spécifier la version d'un secret que vous souhaitez utiliser pour un identifiant particulier.

Remplir le fichier de configuration de vos secrets

Générer un modèle pour un fichier de configuration de secrets :

gkectl create-config secrets

La commande précédente génère un fichier nommé secrets.yaml. Vous pouvez modifier le nom et l'emplacement de ce fichier si vous le souhaitez.

Familiarisez-vous avec le fichier de configuration en lisant le document Fichier de configuration des secrets. Vous pouvez conserver ce document ouvert dans un nouvel onglet ou dans une autre fenêtre.

Dans le fichier de configuration de secrets, renseignez les valeurs pertinentes pour votre situation. Vous devez renseigner une valeur pour namespace qui commence par gke-onprem-secrets-.

Voici un exemple de fichier de configuration de secrets contenant un groupe de secrets. Le groupe possède des valeurs pour les identifiants vCenter et quatre clés de compte de service:

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"

Créer des Secrets préparés

Créez des Secrets préparés dans votre cluster d'administrateur:

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

Remplacez les éléments suivants :

  • ADMIN_CLUSTER_KUBECONFIG : chemin d'accès du fichier kubeconfig du cluster d'administrateur

  • SECRETS_CONFIG: chemin d'accès à votre fichier de configuration Secrets

Afficher les secrets préparés

Répertoriez les secrets préparés dans le cluster d'administrateur:

gkectl list secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG

Exemple de résultat :

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

Vous pouvez également exécuter la commande kubectl get secrets pour répertorier les secrets dans un espace de noms. Exemple :

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get secrets --namespace gke-onprem-secrets-user-cluster-1

Exemple de résultat :

component-access-sa-creds ...
cloud-audit-logging-service-account-creds ...
register-service-account-creds.1 ...
stackdriver-service-account-creds.1 ...
vsphere-creds.1 ...

Dans le résultat précédent, vous pouvez voir que chaque nom de secret a une extension qui indique la version du secret. Dans cet exemple, tous les secrets ont une version 1.

Créer un cluster d'utilisateur

Suivez les instructions de la page Créer un cluster d'utilisateur.

Lorsque vous remplissez le fichier de configuration de votre cluster d'utilisateur, saisissez une valeur pour preparedSecrets.namespace. Cette valeur doit correspondre à l'espace de noms que vous avez spécifié précédemment dans un fichier de configuration Secret.

Exemple :

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

Dans votre fichier de configuration de cluster d'utilisateur, ne spécifiez pas de valeurs pour les champs suivants. Ces champs ne sont pas nécessaires, car GKE sur VMware obtient les identifiants et les clés à partir des secrets que vous avez préparés.

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

Dans le fichier de configuration de votre cluster d'utilisateur, spécifiez les versions des secrets préparés que vous prévoyez d'utiliser. Voici un exemple qui spécifie la version 1 pour chacun des cinq 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"

La valeur de version doit être une chaîne entière ou la chaîne "latest". Si vous ne spécifiez pas de valeur pour version, la dernière version est utilisée.

Terminez la création de votre cluster d'utilisateur comme décrit dans la section Créer un cluster d'utilisateur.

Créer des secrets supplémentaires préparés

Cette section explique comment créer la version 2 de certains secrets dans un espace de noms existant.

Créez un fichier de configuration de secrets nommé secrets-2.yaml. Spécifiez un espace de noms existant et fournissez les identifiants des secrets sélectionnés.

Exemple :

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"

L'exemple précédent fournit des chemins de clé pour les secrets suivants dans l'espace de noms gke-onprem-secrets-user-cluster-1.

  • Version 2 du secret stackdriver-service-account-creds
  • Version 2 du secret cloud-audit-logging-service-account-creds

Créez les secrets:

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

Répertoriez les secrets préparés dans le cluster d'administrateur:

gkectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG list secrets

Exemple de résultat :

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

Dans le résultat précédent, vous pouvez voir qu'il existe deux versions du secret stackdriver-service-account-creds et deux versions du secret cloud-audit-logging-service-account-creds.

Alterner les identifiants pour un cluster d'utilisateur

Cette section explique comment alterner les identifiants sélectionnés pour un cluster d'utilisateur existant.

Avant d'effectuer la rotation des identifiants, vérifiez les versions actuelles du secret utilisées dans le cluster:

gkectl list secrets cluster --cluster-name USER_CLUSTER_NAME  kubeconfig ADMIN_CLUSTER_KUBECONFIG

Exemple de résultat :

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

Copiez le fichier de configuration de votre cluster d'utilisateur dans un fichier nommé user-cluster-update.yaml.

Dans user-cluster-update.yaml, ajoutez des sections serviceAccountKey. Par exemple, l'exemple suivant comporte des sections serviceAccountKey sous stackdriver et 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"

L'exemple précédent indique que lorsque le cluster d'utilisateur sera mis à jour, il utilisera:

  • Version 2 du secret stackdriver-service-account-creds

  • La dernière version du secret cloud-audit-logging-service-account-creds. Dans cet exemple, il s'agit de la version 2.

Mettez à jour les identifiants du cluster d'utilisateur:

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

Le cluster d'utilisateur utilise désormais les secrets préparés suivants:

  • Version 1 de vsphere-creds
  • Version 1 de component-access-sa-creds
  • Version 1 de register-service-account-creds
  • Version 2 de stackdriver-service-account-creds
  • Version 2 de cloud-audit-logging-service-account-creds

Créer des secrets et des clusters d'utilisateur supplémentaires

Si vous envisagez de créer des clusters d'utilisateur supplémentaires, réfléchissez à la façon dont vous souhaitez organiser vos secrets préparés. Vous pouvez créer un espace de noms distinct dans votre cluster d'administrateur pour chaque cluster d'utilisateur. Vous pouvez également partager le même espace de noms Secret préparé pour plusieurs clusters d'utilisateur ou tous.

Par exemple, supposons qu'Alice, Bob et Carol possèdent chacun un cluster d'utilisateur. Vous pouvez créer trois groupes de secrets comme indiqué dans cet exemple:

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"

Au fil du temps, vous pouvez créer des versions supplémentaires des secrets dans chaque groupe de secrets.

Dans les fichiers de configuration de votre cluster d'utilisateur, indiquez les valeurs de serviceAccountKey.secretRef.version afin de spécifier les versions de vos secrets que vous souhaitez utiliser. Vous pouvez définir la valeur sur "latest", la chaîne vide ou une chaîne entière.

Par exemple, supposons que tous vos secrets possèdent les versions 1, 2 et 3. Et supposons qu'il s'agisse d'une partie du fichier de configuration du cluster d'utilisateur pour 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: ""

Dans l'exemple précédent, nous pouvons voir:

  • Aucun secretRef n'est spécifié pour vCenter. Le cluster utilise donc la dernière version du secret vsphere-creds dans l'espace de noms gke-onprem-secrets-alice.

  • Le cluster utilise la version 2 du secret register-service-account-creds dans l'espace de noms gke-onprem-secrets-alice.

  • Le cluster utilise la dernière version du secret stackdriver-service-account-creds dans l'espace de noms gke-onprem-secrets-alice. Dans cet exemple, il s'agit de la version 3.

  • La version de cloudAuditLogging étant la chaîne vide, le cluster utilisera la dernière version du secret cloud-audit-logging-service-account-creds dans l'espace de noms gke-onprem-secrets-alice. Dans cet exemple, il s'agit de la version 3.

  • Aucun secretRef.version n'est spécifié pour le compte de service d'accès au composant. Le cluster utilise donc la dernière version.

Supprimer les secrets préparés

Pour répertorier tous les secrets préparés et leurs espaces de noms:

gkectl list secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG

Si un espace de noms de secret préparé n'est utilisé par aucun cluster d'utilisateur, vous pouvez le supprimer.

Pour supprimer un espace de noms de secret préparé et tous les secrets qu'il contient, procédez comme suit :

gkectl delete secret –namespace PREPARED_SECRET_NAMESPACE \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIG

Si un secret préparé individuel n'est utilisé par aucun cluster d'utilisateur, vous pouvez le supprimer.

Pour supprimer un secret préparé individuel, procédez comme suit :

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