Configurar credenciales preparadas para los clústeres de usuario

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

  1. Completa el archivo de configuración de Secrets.

  2. En el clúster de administrador, crea grupos de Secrets. Cada grupo de Secrets se encuentra en su propio espacio de nombres de Kubernetes.

  3. 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.

  4. Crea grupos de Secrets adicionales y versiones adicionales de tus Secrets según sea necesario.

  5. Actualiza las credenciales de un clúster de usuario existente según sea necesario.

  6. 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 Secret vsphere-creds en el espacio de nombres gke-onprem-secrets-alice.

  • El clúster usará la versión 2 del Secret register-service-account-creds en el espacio de nombres gke-onprem-secrets-alice.

  • El clúster usará la versión más reciente del Secret stackdriver-service-account-creds en el espacio de nombres gke-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 Secret cloud-audit-logging-service-account-creds en el espacio de nombres gke-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