我将某些东西作为AppService托管在Azure中,并使用环境变量来区分不同插槽(测试,开发等)的设置。
如果AppSettings.json文件包含以下结构:
{
"ConnectionString": {
"MyDb": "SomeConnectionString"
}
}
我可以将环境变量“ ConnectionString:MyDb”设置为“ SomeConnectionString”,。Net Core将理解:
表示子级别。
但是在Kubernetes中,我不能使用:
作为环境密钥的一部分。还有另一种处理层次结构的方法,还是需要切换到平面设置?
答案 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的解释
:
)的环境变量。 Kubernetes目前不允许这样做。如here所述,用双下划线(:
)替换冒号(__
)。