Configurar variables de entorno

Consulta cómo crear y usar variables de entorno en el servicio de Knative.

Cuando define variables de entorno, se insertan en el contenedor y su código puede acceder a ellas. Las variables de entorno se definen como pares clave/valor. Por ejemplo, supongamos que estás ejecutando un servicio que habilita el registro adicional cuando lee LOGGING_VERBOSE: true en el entorno. En este caso, el par clave-valor de la variable de entorno es LOGGING_VERBOSE=true. Los comandos o la interfaz de usuario exactos se muestran en las siguientes secciones.

Nombres reservados

Las variables de entorno definidas en el contrato de tiempo de ejecución del contenedor están reservadas y no se pueden definir. En concreto, Knative Serving inserta la variable de entorno PORT en tu contenedor. No debes configurarlo tú.

Configurar variables de entorno en un servicio

Cualquier cambio en la configuración conlleva la creación de una nueva revisión. Las revisiones posteriores también recibirán automáticamente este ajuste de configuración, a menos que hagas cambios explícitos para modificarlo.

Puedes definir variables de entorno mediante la Google Cloud consola, la CLI de Google Cloud o un archivo YAML al desplegar un nuevo servicio o actualizar un servicio y desplegar una revisión:

Consola

  1. Ve a Knative Serving en la Google Cloud consola:

    Ir a Knative serving

  2. Haga clic en Crear servicio si va a configurar un servicio nuevo que va a implementar. Si va a configurar un servicio que ya tiene, haga clic en él y, a continuación, en Editar y desplegar nueva revisión.

  3. En Configuración avanzada, haz clic en Variables y secretos.

  4. Sigue estos pasos:

    • Si vas a añadir una variable, haz clic en Añadir variable y especifica el nombre que quieras darle a la variable y su valor en los cuadros de texto Nombre y Valor.
    • Si vas a cambiar el valor de una variable, sustituye el valor actual del cuadro de texto Valor por el que quieras.
    • Si vas a quitar una o varias variables de entorno, coloca el cursor a la izquierda del cuadro de texto Valor de la variable que vas a quitar para que se muestre el icono de la papelera y haz clic en él.

  5. Haz clic en Siguiente para ir a la siguiente sección.

  6. En la sección Configurar la activación del servicio, selecciona la conectividad que quieras usar para invocar el servicio.

  7. Haz clic en Crear para desplegar la imagen en Knative Serving y espera a que se complete el despliegue.

Línea de comandos

Puedes usar la CLI de Google Cloud para definir variables de entorno de servicios nuevos o para actualizar servicios que ya tengas:

  • En el caso de los servicios que ya tengas, actualiza las variables de entorno ejecutando el comando gcloud run services update con uno de los siguientes parámetros:

    Ejemplo:

    gcloud run services update SERVICE --update-env-vars KEY1=VALUE1,KEY2=VALUE2

    Sustituye:

    • SERVICE con el nombre de tu servicio.
    • KEY1=VALUE1,KEY2=VALUE2 con una lista separada por comas de pares de nombre y valor para cada variable de entorno. Especifica el nombre de la variable de entorno de cada KEY y el valor de esa variable de entorno de VALUE. Cómo especificar varios parámetros
    • Opciones de parámetros de comandos

      • Para especificar una variable de entorno que contenga una coma (,), debes escapar cada KEY=VALUE con un delimitador diferente. Por ejemplo, si usas @:
        --set-env-vars "^@^KEY1=value,with,commas@KEY2=anothervalue@KEY3..."
      • Para especificar varios conjuntos de pares clave-valor, puedes especificar varios parámetros para mejorar la legibilidad. Ejemplo:
        [...]
        --set-env-vars "KEY=VALUE1" \
        --set-env-vars "KEY=VALUE2" \
        --set-env-vars "KEY=VALUE3"
  • En el caso de los servicios nuevos, define las variables de entorno ejecutando el comando gcloud run deploy con el parámetro --set-env-vars:

    gcloud run deploy SERVICE --image=IMAGE_URL --set-env-vars KEY1=VALUE1,KEY2=VALUE2

    Sustituye:

    • IMAGE_URL con una referencia a la imagen del contenedor, por ejemplo, gcr.io/cloudrun/hello.
    • SERVICE con el nombre de tu servicio.
    • KEY1=VALUE1,KEY2=VALUE2 con una lista separada por comas de pares de nombre y valor para cada variable de entorno. Especifica el nombre de la variable de entorno de cada KEY y el valor de esa variable de entorno de VALUE. Cómo especificar varios parámetros
    • Opciones de parámetros de comandos

      • Para especificar una variable de entorno que contenga una coma (,), debes escapar cada KEY=VALUE con un delimitador diferente. Por ejemplo, si usas @:
        --set-env-vars "^@^KEY1=value,with,commas@KEY2=anothervalue@KEY3..."
      • Para especificar varios conjuntos de pares clave-valor, puedes especificar varios parámetros para mejorar la legibilidad. Ejemplo:
        [...]
        --set-env-vars "KEY=VALUE1" \
        --set-env-vars "KEY=VALUE2" \
        --set-env-vars "KEY=VALUE3"

YAML

Puedes descargar la configuración de un servicio en un archivo YAML con el comando gcloud run services describe mediante la marca --format=export. A continuación, puedes modificar ese archivo YAML e implementar los cambios con el comando gcloud run services replace. Debe asegurarse de modificar solo los atributos especificados.

  1. Descarga la configuración de tu servicio en un archivo llamado service.yaml en el espacio de trabajo local:

    gcloud run services describe SERVICE --format export > service.yaml

    Sustituye SERVICE por el nombre de tu servicio de Knative.

  2. En el archivo local, actualice los atributos name y value del atributo env del atributo containers::

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - env:
            - name: KEY-1
              value: VALUE-1
            - name: KEY-N
              value: VALUE-N

    Sustituir

    • SERVICE con el nombre de tu servicio de Knative
    • KEY-1, VALUE-1 con la variable de entorno y el valor. También puede añadir más variables y valores si lo desea.
  3. Sustituye el servicio por su nueva configuración con el siguiente comando:

    gcloud run services replace service.yaml

Definir variables de entorno predeterminadas en el contenedor

Puedes usar la instrucción ENV en un Dockerfile para definir valores predeterminados para las variables de entorno:

ENV KEY1=VALUE1,KEY2=VALUE2

Orden de prioridad: variables de contenedor frente a variables de servicio

Si define una variable de entorno predeterminada en el contenedor y también define una variable de entorno con el mismo nombre en el servicio de Knative, prevalecerá el valor definido en el servicio.

Para usar los enlaces de servicio de Kubernetes, debes habilitar la compatibilidad manualmente. Debido a los problemas de rendimiento observados en los espacios de nombres con miles de servicios y revisiones, los enlaces de servicio de Kubernetes se inhabilitaron de forma predeterminada a partir de enero del 2021.

Para habilitar los enlaces de servicio de Kubernetes, ejecuta el siguiente comando para asignar el valor true a data.enable-service-links en tu knative-serving/config-defaultsConfigMap:

kubectl patch cm -n knative-serving config-defaults -p '{"data":{"enable-service-links":"true"}}