对于我的项目,我需要一个配置文件来连接我的程序到一个数据库。我不想将配置数据(例如用户名和密码)硬编码在文档中,而是将其保存为kubernetes中的安全环境变量。
我用python编程了我的应用程序。python应用程序在docker容器中成功运行。然后我通过kubernetes创建了秘密变量。我编写了一个.yaml文件并指定了所需的容器和图像数据。这是Kubernetes教程:链接到Kubernetes教程
现在,我想访问我在kubernetes中创建的秘密环境变量。但是怎么做呢?
如何使用python读取秘密环境变量?是否必须初始化停靠文件中的环境变量?
PS:我已经尝试过这样的方法了:
import os
print(os.environ['USERNAME'])
发布于 2020-02-21 17:49:07
以下是工作,并应向您证明:
1. Base64编码,例如用户名\密码:
U=$(echo -n "freddie" | base64)
P=$(echo -n "fridays" | base64)
NB主机的环境变量是U
和P
假设
POD="p" # Or...
SECRET="s" # Or...
NAMESPACE="default" # Or...
2.创造秘密:
echo "
apiVersion: v1
kind: Secret
metadata:
name: ${SECRET}
data:
u: ${U}
p: ${P}
" | kubectl apply --filename=- --namespace=${NAMESPACE}
NB秘密的数据包含值u
和p
(对应于U
和P
)
产量:
secret/x created
和:
kubectl describe secret/${SECRET} --namespace=${NAMESPACE}
产量:
Name: ${SECRET}
Namespace: ${NAMESPACE}
Labels: <none>
Annotations:
Type: Opaque
Data
====
p: 7 bytes
u: 7 bytes
3.将秘密的价值附加到“波德”上:
echo "
apiVersion: v1
kind: Pod
metadata:
name: ${POD}
spec:
containers:
- name: test
image: python
command:
- python3
- -c
- \"import os;print(os.environ['USERNAME']);print(os.environ['PASSWORD'])\"
env:
- name: USERNAME
valueFrom:
secretKeyRef:
name: ${SECRET}
key: u
- name: PASSWORD
valueFrom:
secretKeyRef:
name: ${SECRET}
key: p
" | kubectl apply --filename=- --namespace=${NAMESPACE}
NB Pod's环境映射秘密的u
->USERNAME
,p
->PASSWORD
NB这些变量名的更改是为了说明这一点;它们可能是相同的
4.审查Pod日志
kubectl logs pod/${POD} --namespace=${NAMESPACE}
收益率(在我的例子中):
freddie
fridays
https://stackoverflow.com/questions/60343474
复制相似问题