kubernetes基础知识之secret环境变量
kubernetes secret资源对象可以通过secret.yaml创建出来:
apiVersion: v1
kind: Secret
metadata:
name: mysecret
namespace: default
type: Opaque
data:
username: YWRtaW4K
password: MTIzCg==
kubectl create -f secret.yaml
可以通过deployment类型的控制器创建pod,调用secret资源对象进行使用:
apiVersion: v1
kind: Deployment
metadata:
labels:
app: opaque-secret-env
name: opaque-secret-env-deploy
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: op-se-env-pod
template:
metadata:
labels:
app: op-se-env-pod
spec:
containers:
- image: nginx
name: myapp-container
ports:
- containerPort: 80
env:
- name: TEST_USER
valueFrom:
secretKeyRef:
name: mysecret
key: username
- name: TEST_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password
secret增加了获取密码的难度。
可以执行kubectl命令创建secret的pod:
kubectl create -f deployment.yaml或者:
kubectl apply -f deployment.yaml
删除所有的deployment控制器的命令:
kubectl delete deployment --all
查看所有的pod:
kubectl get pod --all-namespaces -n default | grep opaque
进入pod容器的命令:
kubectl exec -it $pod_name -n $namespace_name -- /bin/bash
输入env| egrep -i 'user|password'
可以看到secret资源对象中定义的数据段里面的键值,就可以看到两个环境变量的值了,这两个值是已经填写的secret资源对象它的value值解码之后的值了。
Secret资源对象的key值是明文,但是value必须通过base64算法先编码后才能使用。
key不能编码,但是secret的value必须编码。
如果对没有编码的数据进行解码,会报错误。通过base64算法进行编码和解码的过程是可逆的。
拿一个没有编码过的数据去解码,会出现乱码。原因是解码编码以后的数据,我们去拿着它去对照编码表去解码,没有这个字符或者是并不符合格式要求。
在secret资源对象中,一定要把secret对象的value值经过base64编码之后,才可以去使用。
secret增加了密码获取的难度。
当secret资源对象被使用时,它的value会被自动解码,而且不可选。
鼓励的话语:一个人的起点不决定终点,出身的差距,终能用勤奋和智慧弥补!