【问题标题】:Is it possible to add dependent environment variables in Google Cloud Run?是否可以在 Google Cloud Run 中添加依赖环境变量?
【发布时间】:2021-11-18 15:50:31
【问题描述】:

我想在 Cloud Run 服务上指定依赖环境变量。

如果环境变量已在 .env 文件中定义,则如下所示

DATABASE_NAME=my-database
DATABASE_USER=root
DATABASE_PASSWORD=P4SSw0rd!
DATABASE_PORT=5432
DATABASE_HOST="/socket/my-database-socket"
DATABASE_URL="user=${DATABASE_USER} password=${DATABASE_PASSWORD} dbname=${DATABASE_NAME} host=${DATABASE_HOST}"

在本例中,DATABASE_URL 依赖于所有其他环境变量。

要部署服务,我运行以下命令:

gcloud run deploy my-service \
--image gcr.io/my-project/my-image:latest \
--region europe-west1 \
--port 80 \
--platform managed \
--allow-unauthenticated \
--set-env-vars 'DATABASE_NAME=my-database' \
--set-env-vars 'DATABASE_USER=root' \
--set-env-vars 'DATABASE_PASSWORD=P4SSw0rd!' \
--set-env-vars 'DATABASE_PORT=5432' \
--set-env-vars 'DATABASE_HOST="/socket/my-database-socket"' \
--set-env-vars 'DATABASE_URL="user=$(DATABASE_USER) password=$(DATABASE_PASSWORD) dbname=$(DATABASE_NAME) host=$(DATABASE_HOST)"'

这里是创建的服务的 YAML 定义(省略了一些值)

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: my-service
spec:
  template:
    metadata:
      name: ...
    spec:
      containerConcurrency: 80
      timeoutSeconds: 300
      containers:
      - image: ...
        ports:
        - name: http1
          containerPort: 80
        env:
        - name: DATABASE_NAME
          value: my-database
        - name: DATABASE_USER
          value: root
        - name: DATABASE_PASSWORD
          value: P4SSw0rd!
        - name: DATABASE_HOST
          value: /socket/my-database-socket
        - name: DATABASE_URL
          value: user=$(DATABASE_USER) password=$(DATABASE_PASSWORD) dbname=$(DATABASE_NAME) host=$(DATABASE_HOST)

问题是当服务运行时,DATABASE_URL 中的环境变量似乎没有被插值。

我读到了Kubernetes supports dependent env vars,但我不知道如何在 Cloud Run 中运行它。

我想知道Cloud Run到底是否支持它。

【问题讨论】:

  • 尝试将所有值放入"",它的字符串值。例如:value: "P4SSw0rd!"
  • 我尝试了许多不同的语法。如您所见,组合的环境变量已经被双引号引起来。正如 E. Anderson 所写,它可能不受支持。为了做我想做的事,我必须把整个字符串写成一个秘密并将它用作一个环境变量。

标签: kubernetes google-cloud-platform environment-variables google-cloud-run knative


【解决方案1】:

这可能适用于 Knative 开源(使用 Kubernetes 执行 pod),但不适用于运行在专有执行引擎上的 Google Cloud Run(完全托管)。

【讨论】:

  • 是的,它似乎根本不受支持。我设法做我想做的事情来配置一个秘密,但最好是组成一个环境变量。
猜你喜欢
  • 2022-10-02
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
  • 2018-09-15
  • 2020-09-29
  • 2020-06-08
  • 2021-07-23
相关资源
最近更新 更多