En este documento, se muestra cómo configurar credenciales preparadas para clústeres de usuario en GKE en VMware.
Con las credenciales preparadas, puedes almacenar credenciales para los clústeres de usuario en Secrets en el clúster de administrador. Esto proporciona un elemento de seguridad porque no tienes que mantener las contraseñas y las claves de la cuenta de servicio en tu estación de trabajo de administrador mientras creas tus clústeres de usuarios.
Preparas los Secrets en el clúster de administrador con anticipación. Luego, a medida que creas clústeres de usuario, puedes especificar que ciertas credenciales se tomen de los Secrets preparados en el clúster de administrador. También puedes usar los Secrets preparados cuando rotes las credenciales en un clúster de usuario.
Antes de comenzar
Crea un clúster de administrador si aún no tienes uno.
Descripción general del procedimiento
Completa el archivo de configuración de Secrets.
En el clúster de administrador, crea grupos de Secrets. Cada grupo de Secrets se encuentra en su propio espacio de nombres de Kubernetes.
Crea un clúster de usuario. En el archivo de configuración del clúster de usuario, indica que deseas que las credenciales se tomen de Secrets en un espacio de nombres en particular en el clúster de administrador.
Crea grupos de Secrets adicionales y versiones adicionales de tus Secrets según sea necesario.
Actualiza las credenciales de un clúster de usuario existente según sea necesario.
Crea clústeres de usuario adicionales como desees. En cada archivo de configuración del clúster de usuario, especifica un espacio de nombres de Secrets. También puedes especificar qué versión de un Secret deseas usar para una credencial en particular.
Completa el archivo de configuración de Secrets
Genera una plantilla para un archivo de configuración de Secrets:
gkectl create-config secrets
El comando anterior genera un archivo llamado secrets.yaml
. Si lo deseas, puedes cambiar el nombre y la ubicación de este archivo.
Para familiarizarte con el archivo de configuración, lee el documento Archivo de configuración de Secrets. Puedes mantener este documento abierto en una pestaña o ventana aparte.
En el archivo de configuración de Secrets, completa los valores que sean relevantes para tu situación. Debes completar un valor para namespace
que comience con gke-onprem-secrets-
.
El siguiente es un ejemplo de un archivo de configuración de Secrets que tiene un grupo de Secrets. El grupo tiene valores para las credenciales de vCenter y cuatro claves de cuenta de servicio:
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"
Crea Secrets preparados
Crea Secrets preparados en el clúster de administrador:
gkectl prepare secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG --secret-config SECRETS_CONFIG
Reemplaza lo siguiente:
ADMIN_CLUSTER_KUBECONFIG: la ruta del archivo kubeconfig del clúster de administrador
SECRETS_CONFIG: Es la ruta de acceso del archivo de configuración de Secrets.
Ve tus Secrets preparados
Enumera los Secrets preparados en el clúster de administrador:
gkectl list secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Resultado de ejemplo:
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
También puedes ejecutar kubectl get secrets
para enumerar los Secrets de un espacio de nombres. Por ejemplo:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get secrets --namespace gke-onprem-secrets-user-cluster-1
Resultado de ejemplo:
component-access-sa-creds ... cloud-audit-logging-service-account-creds ... register-service-account-creds.1 ... stackdriver-service-account-creds.1 ... vsphere-creds.1 ...
En el resultado anterior, puedes ver que cada nombre de Secret tiene una extensión que indica la versión del Secret. En este ejemplo, todos los Secrets tienen la versión 1.
Crear un clúster de usuario
Sigue las instrucciones en Crea un clúster de usuario.
Cuando completes el archivo de configuración del clúster de usuario, ingresa un valor para preparedSecrets.namespace
. Este valor debe coincidir con un espacio de nombres que especificaste antes en un archivo de configuración de Secrets.
Ejemplo:
preparedSecrets: namespace: "gke-onprem-secrets-user-cluster-1"
En el archivo de configuración del clúster de usuario, no especifiques valores para los siguientes campos. Estos campos no son necesarios, porque GKE on VMware obtiene las credenciales y claves de los Secrets preparados.
vCenter.credentials.fileRef.path
componentAccessServiceAccountKeyPath
loadBalancer.f5BigIP.credentials.fileRef.path
gkeConnect.registerServiceAccountKeyPath
stackdriver.serviceAccountKeyPath
usageMetering.bigQueryServiceAccountKeyPath
cloudAuditLogging.serviceAccountKeyPath
privateRegistry.credentials.fileRef.path
En el archivo de configuración del clúster de usuario, especifica las versiones de los Secrets preparados que deseas usar. Este es un ejemplo que especifica la versión 1 para cada uno de los cinco secretos:
vCenter: credentials: secretRef: version "1" ... componentAccessServiceAccountKey: secretRef: version: "1" ... gkeConnect: registerServiceAccountKey: secretRef: version: "1" ... stackdriver: serviceAccountKey: secretRef: version: "1" ... cloudAuditLogging: serviceAccountKey: secretRef: version: "1"
El valor de version
debe ser una string de número entero o la string “más reciente”. Si no especificas un valor para version
, se usará la última versión.
Termina de crear tu clúster de usuario, como se describe en Crea un clúster de usuario.
Crea Secrets preparados adicionales
En esta sección, se muestra cómo crear la versión 2 de algunos de los Secrets en un espacio de nombres existente.
Crea un archivo de configuración de Secrets nuevo llamado secrets-2.yaml
. Especifica un espacio de nombres existente y proporciona credenciales para los Secrets seleccionados.
Ejemplo:
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"
En el ejemplo anterior, se proporcionan rutas de claves para los siguientes Secrets en el espacio de nombres gke-onprem-secrets-user-cluster-1
.
- Versión 2 del Secret
stackdriver-service-account-creds
- Versión 2 del Secret
cloud-audit-logging-service-account-creds
Crea los Secrets nuevos:
gkectl prepare secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG --secret-config secrets-2.yaml
Enumera los Secrets preparados en el clúster de administrador:
gkectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG list secrets
Resultado de ejemplo:
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
En el resultado anterior, puedes ver que hay dos versiones del Secret stackdriver-service-account-creds
y dos versiones del Secret cloud-audit-logging-service-account-creds
.
Rota credenciales para un clúster de usuario
En esta sección, se muestra cómo rotar las credenciales seleccionadas para un clúster de usuario existente.
Antes de rotar las credenciales, verifica las versiones actuales de Secrets que se usan en el clúster:
gkectl list secrets cluster --cluster-name USER_CLUSTER_NAME kubeconfig ADMIN_CLUSTER_KUBECONFIG
Resultado de ejemplo:
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
Copia el archivo de configuración del clúster de usuario en un archivo llamado user-cluster-update.yaml
.
En user-cluster-update.yaml
, agrega secciones serviceAccountKey
. Por ejemplo, en el siguiente ejemplo, se incluyen secciones serviceAccountKey
en stackdriver
y 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"
En el ejemplo anterior, se especifica que cuando se actualice el clúster de usuario, usará lo siguiente:
Versión 2 del Secret
stackdriver-service-account-creds
La versión más reciente del Secret
cloud-audit-logging-service-account-creds
. En este ejemplo, es la versión 2.
Actualiza las credenciales para el clúster de usuario:
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
Ahora, el clúster de usuario usa los siguientes Secrets preparados:
- Versión 1 de
vsphere-creds
- Versión 1 de
component-access-sa-creds
- Versión 1 de
register-service-account-creds
- Versión 2 de
stackdriver-service-account-creds
- Versión 2 de
cloud-audit-logging-service-account-creds
Crea Secretos y clústeres de usuario adicionales
Si planeas crear clústeres de usuario adicionales, piensa en cómo deseas organizar tus Secrets preparados. Es posible que quieras crear un espacio de nombres separado en tu clúster de administrador para cada clúster de usuario. Es posible que desees compartir el mismo espacio de nombres de Secret preparado para varios clústeres de usuarios o para todos.
Por ejemplo, supongamos que Alice, Bob y Carol tendrán un clúster de usuario. Puedes crear tres grupos de Secrets como se muestra en este ejemplo:
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"
Con el tiempo, podrías crear versiones adicionales de los Secrets en cada grupo de Secrets.
En los archivos de configuración del clúster de usuario, proporciona valores para serviceAccountKey.secretRef.version
a fin de especificar qué versiones de los Secrets deseas usar. Puedes configurar el valor como "latest"
, la string vacía o una string de número entero.
Por ejemplo, supongamos que todos tus Secrets tienen versiones 1, 2 y 3. Supongamos que esta es una parte del archivo de configuración del clúster de usuario 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: ""
En el ejemplo anterior, podemos ver lo siguiente:
No se especificó
secretRef
para vCenter, por lo que el clúster usará la última versión del Secretvsphere-creds
en el espacio de nombresgke-onprem-secrets-alice
.El clúster usará la versión 2 del Secret
register-service-account-creds
en el espacio de nombresgke-onprem-secrets-alice
.El clúster usará la versión más reciente del Secret
stackdriver-service-account-creds
en el espacio de nombresgke-onprem-secrets-alice
. En este ejemplo, es la versión 3.La versión de
cloudAuditLogging
es la string vacía, por lo que el clúster usará la última versión del Secretcloud-audit-logging-service-account-creds
en el espacio de nombresgke-onprem-secrets-alice
. En este ejemplo, es la versión 3.No se especificó un
secretRef.version
para la cuenta de servicio de acceso a los componentes, por lo que el clúster usará la versión más reciente.
Borra los Secrets preparados
Para enumerar todos los Secrets preparados y sus espacios de nombres, haz lo siguiente:
gkectl list secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Si ningún clúster de usuario usa un espacio de nombres de Secret preparado, puedes borrarlo.
Para borrar un espacio de nombres de Secrets preparado y todos sus Secrets, sigue estos pasos:
gkectl delete secret –namespace PREPARED_SECRET_NAMESPACE \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Si ningún clúster de usuario usa un Secret preparado individual, puedes borrarlo.
Para borrar un Secret preparado individual, sigue estos pasos:
gkectl delete secret –namespace PREPARED_SECRET_NAMESPACE \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --secret-name SECRET
Documentos relacionados
- Archivo de configuración de Secrets
- Archivo de configuración de clústeres de usuarios
- Crear un clúster de usuario
- Crea cuentas de servicio