【问题标题】:Can we read environment variable on Azure Kubernetes Pod?我们可以在 Azure Kubernetes Pod 上读取环境变量吗?
【发布时间】:2020-01-25 04:34:00
【问题描述】:

我们在 Azure Kubernetes 上部署了一些服务(如 Web API)。当我们登录 Azure Kubernetes Pods 并在终端上执行 printenv 时,它会在屏幕上显示环境变量,包括我们部署的服务,如

<SERVICENAME>_PORT=
<SERVICENAME>_HOST=`
.....

我们如何在 .Net 代码中读取上述变量值?我尝试了以下代码,但没有成功

 var builder = new ConfigurationBuilder();
            builder.AddJsonFile("appsettings_prod.json", true, true).AddEnvironmentVariables();
            Configuration = builder.Build();

var port =  Configuration["<SERVICENAME>_PORT"] 

【问题讨论】:

标签: c# kubernetes .net-core azure-devops azure-aks


【解决方案1】:

要从 k8s pod 访问 env,您需要通过 pod 的 spec.containers[].env[] 提供这些 env。

apiVersion: v1
kind: Pod
metadata:
  name: demo-pod
spec:
  containers:
  - name: mycontainer
    image: demo/new-image
    env:
      # define env from k8s secret (used specially for credentials)
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: username
      # define env from configmap
      - name: SPECIAL_CREDENTIALS
          valueFrom:
            configMapKeyRef: 
              name: configmap-name
              key: config.json
      # define value directly 
      - name: DEMO_GREETING
        value: "Hello from the environment"

【讨论】:

  • 这些是我们创建的变量,但我想读取创建 AKS 的环境。
  • 这些是我们创建的变量,但我想读取创建 AKS 的环境。关于我的查询的更多描述:我们在 AKS 上部署了一些服务(Web API),AKS 自动创建了一些自己的环境(没有添加我的我们),其名称类似于 ``` _PORT= _HOST =` ..... ```
【解决方案2】:

如果您想将环境变量传递给代码,您可以使用 kubernetes 的 config map 的值。它将在 pod 的环境 os 中设置值,并在代码中您可以从那里获取它。

对于安全数据,您可以使用secret

【讨论】:

    【解决方案3】:

    您还可以使用downward-api 将 pod 信息公开给容器。

    【讨论】:

      猜你喜欢
      • 2020-03-30
      • 2014-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-11
      • 2022-08-18
      • 2021-09-29
      • 1970-01-01
      相关资源
      最近更新 更多