一. Secret
加密数据,存放Etcd中,让Pod的容器以挂载Volume方式访问。
应用场景: 凭据
https://kubernetes.io/docs/concepts/configuration/secret/
1.secret凭据创建
secret凭据的创建两种方式:
① 账号密码文件用命令创建
② yaml文件创建
(1). 账号密码文件命令创建secret
通过kubectl create secret命令创建secret,创建后的账号密码是加密后的
# echo -n 'admin' > ./username.txt
# echo -n '1f2d1e2e67df' > ./password.txt
# kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt
# kubectl get secret
NAME TYPE DATA AGE
db-user-pass Opaque 2 30s
# kubectl describe secret db-user-pass
(2). yaml文件创建secret
# echo -n 'admin' | base64
YWRtaW4=
# echo -n '1f2d1e2e67df' | base64
MWYyZDFlMmU2N2Rm
# cat mysecret.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rm
# kubectl create -f mysecret.yaml
# kubectl get secret
2. Secret的应用
Secret的使用方式:
① 环境变量映射方式
② Volume挂载方式
(1). 环境变量映射方式
先获取mysecret secret 中的key:kubectl get secret mysecret -o yaml
,如上边的key分别为:username和password,将这两个key分别映射到容器中的SECRET_USERNAME和SECRET_PASSWORD环境变量。
# kubectl get secret mysecret -o yaml 获取secret 的key
# cat secret-var.yaml
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
restartPolicy: Never
# kubectl create -f secret-var.yaml
# kubectl exec -it mypod bash
root@mypod:/# echo $SECRET_USERNAME
admin
root@mypod:/# echo $SECRET_PASSWORD
1f2d1e2e67df
(2). Volume挂载方式
将 secretName: mysecret 挂载到容器指定的目录,会以key名创建文件,文件内容为key对应的值。
# kubectl get secret
# cat secret-vol.yaml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mypod
image: redis
volumeMounts:
- name: foo
mountPath: "/etc/foo"
readOnly: true
volumes:
- name: foo
secret:
secretName: mysecret
# kubectl create -f secret-vol.yaml
# kubectl exec -it mypod bash
root@mypod:/data# ls /etc/foo/ 以key名创建文件,文件内容为key对应的值
password username
# cat /etc/foo/username
adminroot@mypod:/data# cat /etc/foo/password
1f2d1e2e67dfroot@mypod:/data#
二. Configmap
与Secret类似,区别在于ConfigMap保存的是不需要加密配置信息,信息可见。
应用场景: 应用配置
https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/
1. Configmap的创建
创建Configmap方式:
① 通过文件或目录命令创建
② yaml文件创建
(1). 文件或目录用命令创建
将configmap目录下的redis.properties和mysql.properties两个配置文件保存至configmap redis-mysql-config
# mkdir configmap
# cat configmap/redis.properties
redis.host=127.0.0.1
redis.port=6379
redis.password=123456
# cat configmap/mysql.properties
mysql.host=127.0.0.1
mysql.port=3306
mysql.password=123456
# kubectl create configmap redis-mysql-config --from-file=./configmap/
# kubectl get configmap
# kubectl describe cm redis-mysql-config
Name: redis-mysql-config
Namespace: default
Labels:
Annotations:
Data
====
mysql.properties:
----
mysql.host=127.0.0.1
mysql.port=3306
mysql.password=123456
redis.properties:
----
redis.host=127.0.0.1
redis.port=6379
redis.password=123456
(2) yaml文件创建
一个key一个value的形式,special.level=info和special.type=hello 的key valus保存至ConfigMap myconfig中。
# cat myconfig.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: myconfig
namespace: default
data:
special.level: info
special.type: hello
# kubectl create -f myconfig.yaml
# kubectl describe cm myconfig
Name: myconfig
Namespace: default
Labels:
Annotations:
Data
====
special.level:
----
info
special.type:
----
hello
Events:
2. Configmap的应用
Configmap的使用方式:
① 环境变量映射方式
② Volume挂载方式
(1). 环境变量映射方式
将 configMap myconfig中的special.level 和special.type key分别映射到容器中 LEVEL 和 TYPE两个环境变量中。
# cat config-var.yaml
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
# kubectl create -f config-var.yaml
# kubectl log mypod
info hello
(2). Volume挂载方式
将configMap redis-mysql-config 挂载到容器中的/etc/config目录中,根据key名在挂载目录创建redis.properties和mysql.properties文件,文件内容就是对应的calus值。
# cat cm.yaml
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-mysql-config
restartPolicy: Never
# kubectl log mypod
redis.host=127.0.0.1
redis.port=6379
redis.password=123456