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
Remplissez un fichier de configuration de Secrets.
Dans votre cluster d'administrateur, créez des groupes de secrets. Chaque groupe de secrets se trouve dans son propre espace de noms Kubernetes.
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.
Créez des groupes de secrets supplémentaires et des versions supplémentaires de vos secrets si nécessaire.
Si nécessaire, mettez à jour les identifiants d'un cluster d'utilisateur existant.
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 secretvsphere-creds
dans l'espace de nomsgke-onprem-secrets-alice
.Le cluster utilise la version 2 du secret
register-service-account-creds
dans l'espace de nomsgke-onprem-secrets-alice
.Le cluster utilise la dernière version du secret
stackdriver-service-account-creds
dans l'espace de nomsgke-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 secretcloud-audit-logging-service-account-creds
dans l'espace de nomsgke-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
Documents associés
- Fichier de configuration des secrets
- Fichier de configuration du cluster utilisateur
- Créer un cluster d'utilisateur
- Créer des comptes de service