如何从 ConfigMap 中的变量中检索密码并在 kubernetes 部署中使用它们
How retrive passwords from varibales in ConfigMap and use them in kubernetes deployment
我有简单的 logstash 部署,我喜欢在 Kubernetes 中秘密存储敏感密码我将使用秘密,我想将它从 env vars 拉到 logstash 配置中。
问题是我需要在 ConfigMap
中获取变量
apiVersion: v1
kind: ConfigMap
metadata:
name: logstash-config
namespace: elastic-foo
data:
logstash.yml: |
http.host: "0.0.0.0"
path.config: /usr/share/logstash/pipeline
logstash.conf: |
# all input will come from filebeat, no local logs
input {
s3 {
"access_key_id" => ${access_key_id_pass}
"secret_access_key" => ${secret_access_key_pass}
}
}
filter {
}
output {
stdout { codec => rubydebug }
elasticsearch {
index => "logstash-%{[@metadata]}"
hosts => [ "http://xxxxxxxxx.svc:9200" ]
user => ${user_name}
password => ${password_pass}
}
}
这就是yml的秘密:
apiVersion: v1
kind: Secret
metadata:
name: elastic-secret
namespace: elasticxxxx
stringData:
elasticsearch-password: xxxxx
elasticsearch-user: xxxx
access-key-id: xxxx
secret-access-key: xxxxx
这个例子不起作用,我在 kube scerts 中有密码,环境变量在容器中。
可以在另一个环境变量中引用一个环境变量,前提是被引用的变量在引用它的变量之前声明。 Kubernetes 与分辨率无关。解析发生在容器中(参见 here)。
据我所知,目前无法从 ConfigMap 中引用 Secret。您可以尝试做的是在部署中使用 envFrom.
一个接一个地引用
kind: Deployment
spec:
spec:
containers:
- name: container-name
# [...]
envFrom:
- secretRef:
name: elastic-secret
- configMapRef:
name: logstash-config
或逐个指定环境变量以确保它们以正确的顺序加载。
kind: Deployment
spec:
spec:
containers:
- name: container-name
env:
- name: access_key_id_pass
valueFrom:
secretKeyRef:
name: elastic-secret
key: access-key-id
# followed by the other secrets, then the configMapRefs...
这样您还可以根据您的 logstash-config 的要求命名环境变量。
我有简单的 logstash 部署,我喜欢在 Kubernetes 中秘密存储敏感密码我将使用秘密,我想将它从 env vars 拉到 logstash 配置中。 问题是我需要在 ConfigMap
中获取变量apiVersion: v1
kind: ConfigMap
metadata:
name: logstash-config
namespace: elastic-foo
data:
logstash.yml: |
http.host: "0.0.0.0"
path.config: /usr/share/logstash/pipeline
logstash.conf: |
# all input will come from filebeat, no local logs
input {
s3 {
"access_key_id" => ${access_key_id_pass}
"secret_access_key" => ${secret_access_key_pass}
}
}
filter {
}
output {
stdout { codec => rubydebug }
elasticsearch {
index => "logstash-%{[@metadata]}"
hosts => [ "http://xxxxxxxxx.svc:9200" ]
user => ${user_name}
password => ${password_pass}
}
}
这就是yml的秘密:
apiVersion: v1
kind: Secret
metadata:
name: elastic-secret
namespace: elasticxxxx
stringData:
elasticsearch-password: xxxxx
elasticsearch-user: xxxx
access-key-id: xxxx
secret-access-key: xxxxx
这个例子不起作用,我在 kube scerts 中有密码,环境变量在容器中。
可以在另一个环境变量中引用一个环境变量,前提是被引用的变量在引用它的变量之前声明。 Kubernetes 与分辨率无关。解析发生在容器中(参见 here)。
据我所知,目前无法从 ConfigMap 中引用 Secret。您可以尝试做的是在部署中使用 envFrom.
一个接一个地引用kind: Deployment
spec:
spec:
containers:
- name: container-name
# [...]
envFrom:
- secretRef:
name: elastic-secret
- configMapRef:
name: logstash-config
或逐个指定环境变量以确保它们以正确的顺序加载。
kind: Deployment
spec:
spec:
containers:
- name: container-name
env:
- name: access_key_id_pass
valueFrom:
secretKeyRef:
name: elastic-secret
key: access-key-id
# followed by the other secrets, then the configMapRefs...
这样您还可以根据您的 logstash-config 的要求命名环境变量。