目录
Secret介绍
k8s中secret是一种包含少量敏感信息例如密码、令牌或密钥的对象。 这样的信息可能会被放在 Pod 规约中或者镜像中。 使用 Secret 意味着你不需要在应用程序代码中包含机密数据。
Secret 类似于 ConfigMap 但专门用于保存机密数据。
k8s secrets用于存储和管理一些敏感数据,比如密码,token,密钥等敏感信息。它把 Pod 想要访问的加密数据存放到 Etcd 中。然后用户就可以通过在 Pod 的容器里挂载 Volume 的方式或者环境变量的方式访问到这些 Secret 里保存的信息了。
Opaque类型
Opaque 类型的数据是一个 map 类型,要求value是base64编码。
手动创建base64加密
Secret创建方式
Secret创建:通过命令行
从文件创建,分别写入文件用户名及其密码
[root@k8s2 secret]# echo -n 'admin' > ./username.txt
[root@k8s2 secret]# echo -n 'westos' > ./password.txt
用文件创建db-user-pass这个新secret
[root@k8s2 secret]# kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt
查看到的用户和密码不是原本的明文,是经过base64编码后的结果,使用-d参数就可以解码
这里需要注意的是,像这样创建的 Secret 对象,它里面的内容仅仅是经过了转码,而并没有被加密。在真正的生产环境中,你需要在 Kubernetes 中开启 Secret 的加密插件,增强数据的安全性。
编写yaml文件
Secret创建:通过yaml文件
[root@k8s2 secret]# vim mysecret.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: YWRtaW4= #必须编码后的值
password: d2VzdG9z
运行
[root@k8s2 secret]# kubectl apply -f mysecret.yaml
secret使用
将Secret挂载到Volume中
[root@k8s2 secret]# vim pod1.yaml
apiVersion: v1
kind: Pod
metadata:
name: mysecret
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: secrets
mountPath: "/secret" #把secret挂载到mysecret这个pod中的/secret
readOnly: true #只读
volumes:
- name: secrets
secret:
secretName: mysecret
创建pod,查看pod。进入mysecret,可以看到username和password
[root@k8s2 secret]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mysecret 1/1 Running 0 13s
进入mysecret,可以看到username和password
[root@k8s2 secret]# kubectl exec mysecret -- ls /secret
password
username
删除
[root@k8s2 secret]# kubectl delete -f pod1.yaml
向指定路径映射 secret 密钥
修改yaml文件
[root@k8s2 secret]# vim pod2.yaml
apiVersion: v1
kind: Pod
metadata:
name: mysecret
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: secrets
mountPath: "/secret"
readOnly: true
volumes:
- name: secrets
secret:
secretName: mysecret
items:
- key: username
path: my-group/my-username #指定路径为/secret/my-group/my-username
创建pod,查看pod。进入mysecret,在/secret/my-group/my-username可以看到username
[root@k8s2 secret]# kubectl apply -f pod2.yaml
进入mysecret,在/secret/my-group/my-username可以看到username
[root@k8s2 secret]# kubectl exec mysecret -- cat /secret/my-group/my-username
admin
[root@k8s2 secret]# kubectl delete -f pod2.yaml
存储docker registry的认证信息
创建myregistrykey,指定仓库名字,给定仓库的用户名和密码
[root@k8s2 secret]# kubectl create secret docker-registry myregistrykey --docker-server=reg.westos.org --docker-username=admin --docker-password=westos --docker-email=yakexi007@westos.org
查看
创建私有仓库
如果我们需要拉取私有仓库中的docker镜像的话就需要使用到上面的myregistry这个Secret
编写yaml文件
[root@k8s2 secret]# vim pod3.yaml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: game2048
image: reg.westos.org/westos/game2048
imagePullSecrets:
- name: myregistrykey #给定仓库认证信息
创建pod,查看
[root@k8s2 secret]# kubectl apply -f pod3.yaml
pod/mypod created
查看
[root@k8s2 secret]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 3s