我似乎无法找到插入环境变量和服务名称的正确语法示例:
所以我的服务定义为:
apiVersion: v1
kind: Service
metadata:
name: test
spec:
type: NodePort
ports:
- name: http
port: 3000
targetPort: 3000
selector:
app: test
然后我使用以下的秘密文件:
apiVersion: v1
kind: Secret
metadata:
name: test
labels:
app: test
data:
password: fxxxxxxxxxxxxxxx787xx==
并且只是为了确认我正在使用envFrom
将该密码设置为env变量:
apiVersion: v1
kind: Deployment
metadata:
name: test
spec:
replicas: 1
template:
metadata:
labels:
app: test
spec:
containers:
- name: test
image: xxxxxxxxxxx
imagePullPolicy: Always
envFrom:
- configMapRef:
name: test
- secretRef:
name: test
ports:
- containerPort: 3000
现在在我的配置文件中,我想引用password
以及服务名称本身 - 这是正确的方法:
apiVersion: v1
kind: ConfigMap
metadata:
name: test
labels:
app: test
data:
WORKING_URI: "http://somedomain:${password}@test"
yaml配置不能像您提供的那样工作。
如果要使用复杂配置设置Kubernetes并使用变量或动态分配其中一些,则必须使用外部解析器来替换变量占位符。我使用bash和sed来完成它。我改变了你的配置:
apiVersion: v1
kind: ConfigMap
metadata:
name: test
labels:
app: test
data:
WORKING_URI: "http://somedomain:VAR_PASSWORD@test"
保存后,我创建了一个包含所需值的简单shell脚本。
#!/bin/sh
export PASSWORD="verysecretpwd"
cat deploy.yaml | sed "s/VAR_PASSWORD/$PASSWORD/g" | kubectl -f -