将.Net Core应用程序设置作为环境变量发送到kubernetes pod

时间:2018-10-16 16:51:54

标签: azure kubernetes .net-core

我将某些东西作为AppService托管在Azure中,并使用环境变量来区分不同插槽(测试,开发等)的设置。

如果AppSettings.json文件包含以下结构:

{
   "ConnectionString": {
      "MyDb": "SomeConnectionString"
   }
}

我可以将环境变量“ ConnectionString:MyDb”设置为“ SomeConnectionString”,。Net Core将理解:表示子级别。

但是在Kubernetes中,我不能使用:作为环境密钥的一部分。还有另一种处理层次结构的方法,还是需要切换到平面设置?

2 个答案:

答案 0 :(得分:2)

我相信您是在Pod的容器定义中引用env。从YAML / JSON角度来看,在环境变量的键中指定:不会出现问题。您也可以将其放在引号中,并且应为有效的JSON / YAML:

# convert.yaml
apiVersion: v1
kind: Pod
metadata:
  name: envar-demo
  labels:
    purpose: demonstrate-envars
spec:
  containers:
  - name: envar-demo-container
    image: dotnetapp
    env:
    - name: ConnectionString:Mydb
      value: ConnectionString

与JSON相同:

$ kubectl convert -f convert.yaml -o=json
{
    "kind": "Pod",
    "apiVersion": "v1",
    "metadata": {
        "name": "envar-demo",
        "creationTimestamp": null,
        "labels": {
            "purpose": "demonstrate-envars"
        }
    },
    "spec": {
        "containers": [
            {
                "name": "envar-demo-container",
                "image": "dotnetapp",
                "env": [
                    {
                        "name": "ConnectionString:Mydb",
                        "value": "ConnectionString"
                    }
                ],
                "resources": {},
                "terminationMessagePath": "/dev/termination-log",
                "terminationMessagePolicy": "File",
                "imagePullPolicy": "Always"
            }
        ],
        "restartPolicy": "Always",
        "terminationGracePeriodSeconds": 30,
        "dnsPolicy": "ClusterFirst",
        "securityContext": {},
        "schedulerName": "default-scheduler"
    },
    "status": {}
}

但是,这似乎是Windows / .NET应用程序的已知问题。尝试修复它has been tried并放弃了,因为这在Bash中无效。但是看起来他们决定使用__而不是: workaround

答案 1 :(得分:0)

是的,例子

在Appsettings.json

 "ConnectionStrings": {
    "Azure": "Server=tcp:uw2qdisa

在manifest.yml

    env:
    - name:  ConnectionStrings__Azure
      valueFrom:
        configMapKeyRef:
          name: config-disa
          key: ConnectionStrings

关于Kubernetes的解释

  • 某些.Net Core应用程序需要名称中带有冒号(:)的环境变量。 Kubernetes目前不允许这样做。如here所述,用双下划线(:)替换冒号(__)。