文章目录
- Secret
- Secret介绍
- 创建Secret的四种方式
- 在Pod中使用Secret
- ConfigMap
- ConfigMap介绍
- 创建ConfigMap的四种方式
- 在Pod中使用ConfigMap
Secret
Secret介绍
- 应用启动过程中可能需要一些敏感信息,比如访问数据库的用户名和密码甚至秘钥。讲这些内容直接保存到容器的镜像中显然是不可取的,这时候我们就需要Secret。
- Secret是以密文的方式存储数据,避免了直接在配置文件中保存敏感信息。Secret会以Volume的形式被mount到Pod中,容器可以通过文件的方式使用Secret中的敏感数据,此外容器也可以环境变量的方式使用这些数据。
- 加密数据并存放在Etcd中,让Pod的容器以挂载Volume方式访问
创建Secret的四种方式
- 通过–from-file方式创建:
cd demo/
echo -n "admin" > ./username.txt
echo -n "123456" > ./password.txt
kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt
kubectl get secret
kubectl describe secret db-user-pass
- 通过YAML文件方式创建:
echo -n 'admin' | base64
YWRtaW4=
echo -n '123456' | base64
MTIzNDU2
vim secret.yaml
kubectl create -f secret.yaml
kubectl get secret
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: YWRtaW4=
password: MTIzNDU2
echo -n YWRtaW4= | base64 --decode
echo -n MTIzNDU2 | base --decode
- 通过–from-literal方式创建:
kubectl create secret generic mysecret --from-literal=username==admin --from-literal=password=123456
- 通过–from-env-file方式创建:
cat << EOF > env.txt
username=admin
password=123456
EOF
kubectl create secret generic mysecret --from-env-file=env.txt
在Pod中使用Secret
- 环境变量的方式
vim secret-var.yaml
kubectl apply -f secret-var.yaml
kubectl get pods
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: nginx
image: nginx
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: mysecret
key: username
- name: SECRET_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password
kubectl exec -it mypod bash
echo $SECRET_USERNAME
echo $SECRET_PASSWORD
- Volume方式
vim secret-vol.yaml
kubectl create -f secret-vol.yaml
kubectl get pods
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: foo
mountPath: "/etc/foo"
readOnly: true
volumes:
- name: foo
secret:
secretName: mysecret
kubectl exec -it mypod bash
ls /etc/foo
cat /etc/foo/username
cat /etc/foo/password
- 我们同样可以自定义挂载的数据名
在secretName下面添加items(部分yaml)
secretName: mysecret
items:
- key: username
path: /etc/foo/my-group/my-username
- key: password
path: /etc/foo/my-group/my-password
- 我们同样可以通过更新数据方式
在metadata下面添加data(部分yaml)
metadata:
name: mypod
data:
username: XXXXXX
password: XXXXXX
ConfigMap
ConfigMap介绍
- 与Secret类似,区别在于ConfigMap保存的是不需要加密配置的信息,configMap数据是以明文方式存储。
- 应用场景:应用配置
创建ConfigMap的四种方式
vim redis.properties
redis.host=127.0.0.1
redis.port=6379
redis.password=123456
kubectl create configmap redis-config --from-file=redis.properties
kubectl get configmap
kubectl describe cm redis-config
在Pod中使用ConfigMap
- Volume方式
vim cm.yaml
kubectl create -f cm.yaml
kubectl get pods
kubectl logs mypod
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: busybox
image: busybox
command: [ "/bin/sh","-c","cat /etc/config/redis.properties" ]
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: redis-config
restartPolicy: Never
- 变量参数方式
#创建configmap资源
vim myconfig.yaml
#创建
kubectl apply -f myconfig.yaml
kubectl get cm
apiVersion: v1
kind: ConfigMap
metadata:
name: myconfig
namespace: default
data:
special.level: info
special.type: hello
vim config-var.yaml
kubectl apply -f config-var.yaml
kubectl get pods
kubectl logs mypod
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: busybox
image: busybox
command: [ "/bin/sh", "-c", "echo $(LEVEL) $(TYPE)" ]
env:
- name: LEVEL
valueFrom:
configMapKeyRef:
name: myconfig
key: special.level
- name: TYPE
valueFrom:
configMapKeyRef:
name: myconfig
key: special.type
restartPolicy: Never