文章目录
一、Secret
Secret的主要作用就是加密数据,然后存在etcd里面,让Pod容器以挂载Volume方式进行访问
Secret 解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露 到镜像或者 Pod Spec 中。Secret 可以以 Volume 或者环境变量的方式使用
场景:用户名 和 密码进行加密
一般场景的是对某个字符串进行base64编码 进行加密
[root@k8s-master ~]$ echo -n 'admin' | base64
YWRtaW4=
Secret 有三种类型
- Service Account :用来访问 Kubernetes API,由 Kubernetes 自动创建,并且会自动挂 载到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录中
- Opaque : base64 编码格式的 Secret,用来存储密码、密钥等
- kubernetes.io/dockerconfigjson :用来存储私有 docker registry 的认证信息
1.1 变量形式挂载到Pod
创建secret加密数据的yaml文件 secret.yaml
[root@k8s-master ~]$ cat > secret.yaml << EOF
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rm
EOF
创建一个pod
[root@k8s-master ~]$ kubectl create -f secret.yaml
[root@k8s-master ~]$ kubectl get pods
[root@k8s-master ~]$ kubectl get secret
NAME TYPE DATA AGE
default-token-wqhjb kubernetes.io/service-account-token 3 27h
mysecret Opaque 2 7m36s
创建一个 secret-val.yaml 文件
[root@k8s-master ~]$ cat > secret-val.yaml << EOF
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
EOF
[root@k8s-master ~]$ kubectl apply -f secret-val.yaml
NAME READY STATUS RESTARTS AGE
ds-test-ljb52 1/1 Running 0 85m
mypod 1/1 Running 0 15s
进入到容器内部
[root@k8s-master ~]$ kubectl exec -it mypod bash
然后就可以输出值,这就是以变量的形式挂载到容器中
# 输出用户
root@mypod:/# echo $SECRET_USERNAME
admin
# 输出密码
root@mypod:/# echo $SECRET_PASSWORD
1f2d1e2e67df
要删除这个Pod,就可以使用这个命令
[root@k8s-master ~]$ kubectl delete -f secret-val.yaml
1.2 数据卷形式挂载
创建一个 secret-vol.yaml 文件
[root@k8s-master ~]$ cat > secret-vol.yaml << EOF
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
EOF
创建Pod
# 根据配置创建容器
[root@k8s-master ~]$ kubectl apply -f secret-vol.yaml
# 进入容器
[root@k8s-master ~]$ kubectl exec -it mypod bash
# 查看
root@mypod:/# ls /etc/foo
password username
二、ConfigMap
ConfigMap作用是存储不加密的数据到etcd中,让Pod以变量或数据卷Volume挂载到容器中
应用场景:配置文件
2.1 创建配置文件
创建一个配置文件 redis.properties
[root@k8s-master ~]$ kubectl delete Pod --all
[root@k8s-master ~]$ cat > redis.properties << EOF
redis.host=127.0.0.1
redis.port=6379
redis.password=123456
EOF
2.2 创建ConfigMap
[root@k8s-master ~]$ kubectl create configmap redis-config --from-file=redis.properties
查看详细信息
[root@k8s-master ~]$ kubectl get cm
NAME DATA AGE
redis-config 1 7m8s
[root@k8s-master ~]$ kubectl describe cm redis-config
Name: redis-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
redis.properties:
----
redis.host=127.0.0.1
redis.port=6379
redis.password=123456
Events: <none>
2.3 Volume数据卷形式挂载
创建一个 cm.yaml
[root@k8s-master ~]$ cat > cm.yaml << EOF
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
EOF
使用该yaml创建pod
# 创建
[root@k8s-master ~]$ kubectl apply -f cm.yaml
# 查看
[root@k8s-master ~]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
mypod 0/1 Completed 0 6m42s
最后通过命令就可以查看结果输出了
[root@k8s-master ~]$ kubectl logs mypod
redis.host=127.0.0.1
redis.port=6379
redis.password=123456
2.4 以变量的形式挂载Pod
创建一个myconfig.yaml文件,声明变量信息,然后以configmap创建
[root@k8s-master ~]$ cat > myconfig.yaml << EOF
apiVersion: v1
kind: ConfigMap
metadata:
name: myconfig
namespace: default
data:
special.level: info
special.type: hello
EOF
创建配置文件
# 创建pod
[root@k8s-master ~]$ kubectl apply -f myconfig.yaml
# 获取
[root@k8s-master ~]$ kubectl get cm
创建完该pod后,我们就需要在创建一个 config-var.yaml 来使用我们的配置信息
[root@k8s-master ~]$ cat > config-var.yaml << EOF
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
EOF
查看输出
[root@k8s-master ~]$ kubectl logs mypod