英文:
Helm variable substitution in an appsettings file
问题
"auth": {
"apiScopeSecret": "${auth__apiScopeSecret}"
},
"discovery": {
"uri": "${discovery__uri}"
}
英文:
I am trying to use helm to define some variables (including secrets which have been defined in GCP) and use them in an appsettings.json file. None are pulling through. My helm chart defines the vars as below. Some 'secrets' are pulling from the helm chart and some will be from GCP secrets):
- name: ASPNETCORE_ENVIRONMENT
value: qa-k8
- name: auth__apiScopeSecret
value: foo
- name: discovery__uri
value: bar
envFrom:
- secretRef:
name: blah-secrets
gcpSecrets:
enabled: true
secretsFrom:
- blah-secrets
And my appsettings.json file is configured as per the below example. When I check the container, none of the variables within the helm chart have translated and the values are blank. What am I missing? I understand that the double underscores are required to locate the variables in the correct locations and probably aren't required in the appsettings file.
"auth": {
"apiScopeSecret": "${auth__apiScopeSecret}"
},
"discovery": {
"uri": "${discovery__uri}"
答案1
得分: 2
这也是预期行为。通常,您会创建一个包含Helm值的appsettings文件,作为配置映射(ConfigMap)或密钥(Secret)在部署期间进行替换,然后将其挂载到容器中。在您的情况下,我看不到您将任何内容挂载到容器中,您只是将其作为环境变量提供。
- 您应该指定一个包含Helm值的密钥或配置映射,以提供appsettings文件。
apiVersion: v1
kind: ConfigMap
metadata:
name: appsettings
data:
appsettings.dev.json: |-
{
"Logging": {
"LogLevel": {
"Default": {{my__helmvalue}},
}
}
}
- 在您的Pod中,您应该指定卷(volumes),并在容器中使用volumeMounts来指定appsettings文件应该挂载到哪个位置。
apiVersion: v1
kind: Pod
metadata:
name: examplepod
spec:
containers:
- name: test-container
image: myimage
volumeMounts:
- name: config-volume
mountPath: /app ## 指定要覆盖appsettings文件的路径!
volumes:
- name: config-volume
configMap:
name: appsettings
restartPolicy: Never
英文:
That is also the expected Behaviour. Usually You create the appsettings file with the helm values as a cm or secret that are replaced during the deployment and then you mount it into your container. In your case I dont see that you mount something into the container you just provide it as an env.
- You should specify a secret or configMap with your helm values that provide the appsettings file.
apiVersion: v1
kind: ConfigMap
metadata:
name: appsettings
data:
appsettings.dev.json: |-
{
"Logging": {
"LogLevel": {
"Default": {{my__helmvalue}},
}
}
}
- In your pod you should specify the volumes and in your container the volumeMounts to specify in wich location the appsetting file should get mounted into.
apiVersion: v1
kind: Pod
metadata:
name: examplepod
spec:
containers:
- name: test-container
image: myimage
volumeMounts:
- name: config-volume
mountPath: /app ## specify your path to overwrite the appsettingsfile!
volumes:
- name: config-volume
configMap:
name: appsettings
restartPolicy: Never
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论