Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2024-09-10 GMT+08:00

Uso de un secreto

No realice ninguna operación sobre los siguientes secretos. Para obtener más información, véase Secretos de clúster.

  • No opere secretos bajo el kube-system.
  • No utilice default-secret y paas.elb en ninguno de los espacios de nombres. El default-secret se utiliza para extraer la imagen privada de SWR, y el paas.elb se utiliza para conectar el servicio en el espacio de nombres al servicio de ELB.

En el siguiente ejemplo se muestra cómo utilizar un secreto.

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: ******  #The value must be Base64-encoded.
  password: ******  #The value must be encoded using Base64.
  • Cuando se usa un secreto en un pod, el pod y el secreto deben estar en el mismo clúster y espacio de nombres.
  • Cuando se actualiza un secreto, Kubernetes actualiza los datos en el volumen de datos al mismo tiempo.

    Sin embargo, cuando se actualiza un volumen de datos secreto montado en modo subPath, Kubernetes no puede actualizar automáticamente los datos en el volumen de datos.

Definición de variables de entorno de una carga de trabajo

Con la consola

  1. Inicie sesión en la consola de CCE y acceda a la consola del clúster.
  2. En el panel de navegación, elija Workloads. A continuación, haga clic en Create Workload.

    Cuando cree una carga de trabajo, haga clic en Environment Variables en el área Container Settings y haga clic en .

    • Added from secret: Seleccione un secreto e importe todas las claves del secreto como variables de entorno.

    • Added from secret key: Importa el valor de una clave en un secreto como el valor de una variable de entorno.
      • Variable Name: nombre de una variable de entorno en la carga de trabajo. El nombre se puede personalizar y se establece en el nombre de clave seleccionado en secreto de forma predeterminada.
      • Variable Value/Reference: Seleccione un secreto y la clave que se va a importar. El valor correspondiente se importa como una variable de entorno de carga de trabajo.

      Por ejemplo, después de importar el valor de username en el secreto mysecret como el valor de la variable de entorno de carga de trabajo username, existe una variable de entorno denominada username en el contenedor.

  3. Defina otros parámetros de carga de trabajo y haga clic en Create Workload.

    Una vez que la carga de trabajo se ejecute correctamente, inicie sesión en contenedor y ejecute la siguiente instrucción para comprobar si el secreto se ha establecido como una variable de entorno de la carga de trabajo:

    printenv username

    Si el resultado es el mismo que el contenido del secreto, el secreto se ha establecido como una variable de entorno de la carga de trabajo.

Con kubectl

  1. Utilice kubectl para conectarse al clúster. Para obtener más información, véase Conexión a un clúster con kubectl.
  2. Cree un archivo llamado nginx-secret.yaml y edítelo.

    vi nginx-secret.yaml

    Contenido del archivo YAML:

    • Added from a secret: Para agregar todos los datos de un secreto a las variables de entorno, utilice el parámetro envFrom. Las claves secretas se convertirán en nombres de variables de entorno en una carga de trabajo.
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nginx-secret
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: nginx-secret
        template:
          metadata:
            labels:
              app: nginx-secret
          spec:
            containers:
            - name: container-1
              image: nginx:latest
              envFrom:                 # Use envFrom to specify a secret to be referenced by environment variables.
              - secretRef:
                  name: mysecret       # Name of the referenced secret.
            imagePullSecrets:
            - name: default-secret
    • Added from a secret key: Al crear una carga de trabajo, puede usar un secreto para establecer variables de entorno y usar el parámetro valueFrom para hacer referencia al par clave-valor en el secreto por separado.
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nginx-secret
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: nginx-secret
        template:
          metadata:
            labels:
              app: nginx-secret
          spec:
            containers:
            - name: container-1
              image: nginx:latest
              env:                             # Set the environment variable in the workload.
              - name: SECRET_USERNAME           # Name of the environment variable in the workload.
                valueFrom:                    # Use valueFrom to specify a secret to be referenced by environment variables.
                  secretKeyRef:
                    name: mysecret       # Name of the referenced secret.
                    key: username        # Key in the referenced secret.
              - name: SECRET_PASSWORD            # Add multiple environment variables to import them at the same time.
                valueFrom:
                  secretKeyRef:
                    name: mysecret
                    key: password
            imagePullSecrets:
            - name: default-secret

  3. Cree una carga de trabajo.

    kubectl apply -f nginx-secret.yaml

  4. Vea las variables de entorno en el pod.

    1. Ejecute el siguiente comando para ver el pod creado:
      kubectl get pod | grep nginx-secret
      Producto esperado:
      nginx-secret-***   1/1     Running   0              2m18s
    2. Ejecute el siguiente comando para ver las variables de entorno en el pod:
      kubectl exec nginx-secret-*** -- printenv SPECIAL_USERNAME SPECIAL_PASSWORD

      Si el resultado es el mismo que el contenido del secreto, el secreto se ha establecido como una variable de entorno de la carga de trabajo.

Configuración del volumen de datos de una carga de trabajo

Puede montar un secreto como un volumen en la ruta especificada de acceso de contenedor. El contenido de un secreto está definido por el usuario. Antes de eso, necesita crear un secreto. Para obtener más información, véase Creación de un secreto.

Con la consola

  1. Inicie sesión en la consola de CCE y acceda a la consola del clúster.
  2. En el panel de navegación de la izquierda, haga clic en Workloads. En el panel derecho, haga clic en la ficha Deployments. Haga clic en Create Workload en la esquina superior derecha.

    Cuando cree una carga de trabajo, haga clic en Data Storage en el área Container Settings. Haga clic en Add Volume y seleccione Secret en la lista desplegable.

  3. Establezca el tipo de volumen local en Secret y establezca los parámetros para agregar un volumen local, como se muestra en Tabla 1.

    Tabla 1 Montar un volumen de secreto

    Parámetro

    Descripción

    Secret

    Seleccione el secreto deseado.

    Un secreto debe ser creado por adelantado. Para obtener más información, véase Creación de un secreto.

    Add Container Path

    Configure los parámetros siguientes:

    1. Mount Path: Introduzca una ruta de acceso del contenedor. Por ejemplo, /tmp.
      Este parámetro indica la ruta de contenedor en la que se montará un volumen de datos. No monte el volumen en un directorio del sistema como / o /var/run; esta acción puede causar errores de contenedor. Se recomienda montar el volumen en un directorio vacío. Si el directorio no está vacío, asegúrese de que no hay archivos que afecten al inicio de contenedor. De lo contrario, se reemplazarán los archivos, lo que provocará errores de inicio de contenedor o errores de creación de carga de trabajo.
      AVISO:

      Cuando el contenedor está montado en un directorio de alto riesgo, se recomienda utilizar una cuenta con los permisos mínimos para iniciar el contenedor; de lo contrario, los archivos de alto riesgo en la máquina host podrían estar dañados.

    2. Subpath: Introduzca una ruta secundaria, por ejemplo, tmp.
      • Se utiliza una ruta secundaria para montar un volumen local de modo que se utilice el mismo volumen de datos en un solo pod. Si este parámetro se deja en blanco, la ruta raíz se utiliza de forma predeterminada.
      • La ruta secundaria puede ser la clave y el valor de un ConfigMap o secreto. Si la ruta secundaria es un par clave-valor que no existe, la importación de datos no tiene efecto.
      • Los datos importados especificando una ruta secundaria no se actualizarán junto con las actualizaciones de ConfigMap/secret.
    3. Establezca el permiso en Read-only. Los volúmenes de datos de la ruta son de solo lectura.

    Puede hacer clic en para agregar varias rutas y subrutas.

Con kubectl

  1. Utilice kubectl para conectarse al clúster. Para obtener más información, véase Conexión a un clúster con kubectl.
  2. Cree un archivo llamado nginx-secret.yaml y edítelo.

    vi nginx-secret.yaml

    En el siguiente ejemplo, el nombre de usuario y la contraseña del secreto mysecret se guardan en el directorio /etc/foo como archivos.
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-secret
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx-secret
      template:
        metadata:
          labels:
            app: nginx-secret
        spec:
          containers:
          - name: container-1
            image: nginx:latest
            volumeMounts:
           - name: foo
             mountPath: /etc/foo          # Mount to the /etc/foo directory.
             readOnly: true
        volumes:
        - name: foo
          secret:
            secretName: mysecret      # Name of the referenced secret.
    También puede utilizar el campo items para controlar la ruta de asignación de claves secretas. Por ejemplo, almacene el nombre de usuario en el directorio /etc/foo/my-group/my-username en el contenedor.
    • Si utiliza el campo items para especificar la ruta de asignación de las claves secretas, las claves no especificadas no se crearán como archivos. Por ejemplo, si no se especifica la clave password del siguiente ejemplo, no se creará el archivo.
    • Si desea utilizar todas las claves en un secreto, debe enumerar todas las claves en el campo items.
    • Todas las claves enumeradas en el campo items deben existir en el secreto correspondiente. De lo contrario, el volumen no se crea.
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-secret
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx-secret
      template:
        metadata:
          labels:
            app: nginx-secret
        spec:
          containers:
          - name: container-1
            image: nginx:latest
            volumeMounts:
           - name: foo
             mountPath: /etc/foo          # Mount to the /etc/foo directory.
             readOnly: true
        volumes:
        - name: foo
          secret:
            secretName: mysecret      # Name of the referenced secret.
            items:
            - key: username      # Name of the referenced key.
              path: my-group/my-username    # Mapping path of the secret key

  3. Cree una carga de trabajo.

    kubectl apply -f nginx-secret.yaml

  4. Una vez que la carga de trabajo se ejecuta correctamente, los archivos username y password se generan en el directorio /etc/foo.

    1. Ejecute el siguiente comando para ver el pod creado:
      kubectl get pod | grep nginx-secret
      Producto esperado:
      nginx-secret-***   1/1     Running   0              2m18s
    2. Ejecute el siguiente comando para ver el archivo username o password en el pod:
      kubectl exec nginx-secret-*** -- /etc/foo/username

      El resultado esperado es el mismo que el contenido en secreto.