Configurar credenciales preparadas para clústeres de usuarios

En este documento se explica cómo configurar credenciales preparadas para clústeres de usuario en Google Distributed Cloud.

Con las credenciales preparadas, puedes almacenar las credenciales de tus clústeres de usuarios en secretos de tu clúster de administrador. Esto proporciona un elemento de seguridad, ya que no tienes que guardar contraseñas ni claves de cuentas de servicio en tu estación de trabajo de administrador al crear tus clústeres de usuarios.

Ten en cuenta la siguiente limitación de los clústeres avanzados:

  • Versión 1.31: las credenciales preparadas no se admiten en los clústeres avanzados.
  • Versión 1.32 y posteriores: las credenciales preparadas se admiten en clústeres avanzados.

Prepara los secretos en el clúster de administrador con antelación. Después, cuando crees clústeres de usuarios, podrás especificar que se tomen determinadas credenciales de los secretos preparados en el clúster de administrador. También puedes usar los secretos preparados cuando rotes las credenciales en un clúster de usuario.

Antes de empezar

Crea un clúster de administrador si aún no tienes uno.

Resumen del procedimiento

  1. Rellena un archivo de configuración de secretos.

  2. En tu clúster de administrador, crea grupos de secretos. Cada grupo de secretos está en su propio espacio de nombres de Kubernetes.

  3. Crea un clúster de usuarios. En el archivo de configuración del clúster de usuarios, indica que quieres que las credenciales se tomen de los secretos de un espacio de nombres concreto del clúster de administradores.

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

  5. Actualiza las credenciales de un clúster de usuarios cuando sea necesario.

  6. Crea los clústeres de usuarios adicionales que quieras. En cada archivo de configuración de clúster de usuarios, especifica un espacio de nombres de Secrets. También puedes especificar qué versión de un secreto quieres usar para una credencial concreta.

Rellena el archivo de configuración de secretos

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 quieres, puedes cambiar el nombre y la ubicación de este archivo.

Familiarízate con el archivo de configuración leyendo el documento Archivo de configuración de secretos. Te recomendamos que mantengas este documento abierto en otra pestaña o ventana.

En el archivo de configuración de secretos, rellena los valores que correspondan a tu situación. Debes introducir un valor en namespace que empiece por gke-onprem-secrets-.

A continuación se muestra un ejemplo de un archivo de configuración de Secrets que tiene un grupo de Secret. 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"

Crear secretos preparados

Crea secretos preparados en tu clúster de administrador:

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

Haz los cambios siguientes:

  • ADMIN_CLUSTER_KUBECONFIG: la ruta del archivo kubeconfig del clúster de administrador

  • SECRETS_CONFIG: la ruta del archivo de configuración de Secrets

Ver los secretos preparados

Lista los secretos preparados en el clúster de administración:

gkectl list secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG

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 secretos de un espacio de nombres. Por ejemplo:

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

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, puede ver que cada nombre de Secret tiene una extensión que indica la versión del Secret. En este ejemplo, todos los secretos tienen la versión 1.

Crear clúster de usuarios

Sigue las instrucciones de Crear un clúster de usuarios.

Cuando rellenes el archivo de configuración del clúster de usuarios, introduce un valor en preparedSecrets.namespace. Este valor debe coincidir con un espacio de nombres que hayas especificado anteriormente en un archivo de configuración de secretos.

Ejemplo:

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

En el archivo de configuración del clúster de usuarios, no especifiques valores para los siguientes campos. Estos campos no son necesarios, ya que Google Distributed Cloud obtiene las credenciales y las claves de los secretos que hayas preparado.

  • 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 usuarios, especifica las versiones de los secretos preparados que quieras usar. Aquí tienes 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 cadena de números enteros o la cadena "latest". Si no especifica ningún valor para version, se usará la versión más reciente.

Termina de crear el clúster de usuarios tal como se describe en Crear un clúster de usuarios.

Crear secretos preparados adicionales

En esta sección se muestra cómo crear la versión 2 de algunos de los secretos de un espacio de nombres.

Crea un archivo de configuración de secretos llamado secrets-2.yaml. Especifica un espacio de nombres y proporciona las credenciales de los secretos 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 secretos del espacio de nombres gke-onprem-secrets-user-cluster-1.

  • Versión 2 del secreto stackdriver-service-account-creds
  • Versión 2 del secreto cloud-audit-logging-service-account-creds

Crea los nuevos secretos:

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

Lista los secretos preparados en el clúster de administración:

gkectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG list secrets

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 secreto stackdriver-service-account-creds y dos versiones del secreto cloud-audit-logging-service-account-creds.

Rotar las credenciales de un clúster de usuario

En esta sección se muestra cómo rotar las credenciales seleccionadas de un clúster de usuario.

Antes de rotar las credenciales, comprueba las versiones de Secret que se usan en el clúster:

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

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 usuarios en un archivo llamado user-cluster-update.yaml.

En user-cluster-update.yaml, añade secciones serviceAccountKey. Por ejemplo, en el siguiente ejemplo hay 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 usuarios, se utilizará lo siguiente:

  • Versión 2 del secreto stackdriver-service-account-creds

  • La última versión del cloud-audit-logging-service-account-creds secreto. En este ejemplo, se trata de la versión 2.

Actualiza las credenciales del clúster de usuarios:

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 usuarios usa los siguientes secretos 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

Crear secretos y clústeres de usuarios adicionales

Si tienes previsto crear clústeres de usuarios adicionales, piensa en cómo quieres organizar los secretos que hayas preparado. Puede crear un espacio de nombres independiente en su clúster de administrador para cada clúster de usuarios. También puedes compartir el mismo espacio de nombres Secret preparado con varios o todos los clústeres de usuarios.

Por ejemplo, supongamos que Alicia, Borja y Carla tienen cada uno un clúster de usuarios. Podrías crear tres grupos de secretos, 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, puedes crear versiones adicionales de los secretos de cada grupo de secretos.

En los archivos de configuración de clúster de usuarios, proporcione valores para serviceAccountKey.secretRef.version para especificar qué versiones de sus secretos quiere usar. Puede asignar el valor "latest" (cadena vacía) o una cadena de números enteros.

Por ejemplo, supongamos que todos tus secretos tienen las versiones 1, 2 y 3. Supongamos que esta es una parte del archivo de configuración del clúster de usuarios de Alicia.

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 ha especificado ningún secretRef para vCenter, por lo que el clúster usará la versión más reciente del secreto vsphere-creds en el espacio de nombres gke-onprem-secrets-alice.

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

  • El clúster usará la versión más reciente del secreto stackdriver-service-account-creds en el espacio de nombres gke-onprem-secrets-alice. En este ejemplo, se trata de la versión 3.

  • La versión de cloudAuditLogging es la cadena vacía, por lo que el clúster usará la versión más reciente del secreto 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 ha especificado ningún secretRef.version para la cuenta de servicio de acceso al componente, por lo que el clúster usará la versión más reciente.

Eliminar secretos preparados

Para enumerar todos los secretos preparados y sus espacios de nombres, haz lo siguiente:

gkectl list secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG

Si ningún clúster de usuario utiliza un espacio de nombres de Secret preparado, puedes eliminarlo.

Para eliminar un espacio de nombres de Secret preparado y todos los secretos que contiene, haz lo siguiente:

gkectl delete secret –namespace PREPARED_SECRET_NAMESPACE \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIG

Si ningún clúster de usuarios utiliza un secreto preparado, puedes eliminarlo.

Para eliminar un secreto preparado concreto, sigue estos pasos:

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