K8s---存储(二)secrer配置管理
目录Secret简介ServiceAccountOpaque Secret编写一个secret对象:将secret挂接到volume中:向指定路径映射 secret 密钥将Secret设置为环境变量Secret简介Secret对象类型用来保存敏感信息,例如密码、OAuth 令牌和 ssh key。敏感信息放在secret 中比放在 Pod 的定义或者容器镜像中来说更加安全和灵活。Pod 可以用两种
目录
Secret简介
Secret对象类型用来保存敏感信息,例如密码、OAuth 令牌和 ssh key。
敏感信息放在secret 中比放在 Pod 的定义或者容器镜像中来说更加安全和灵活。
Pod 可以用两种方式使用secret:
- 作为volume 中的文件被挂载到 pod 中的一个或者多个容器里。
- 当kubelet 为 pod 拉取镜像时使用。
Secret的类型:
- ServiceAccount:Kubernetes 自动创建包含访问 API 凭据的 secret,并自动修改 pod以使用此类型的secret。
- Opaque:使用base64编码存储信息,可以通过base64 --decode解码获得原始数据,因此安全性弱。
- kubernetes.io/dockerconfigjson:用于存储docker registry的认证信息。
ServiceAccount
Service account是为了方便Pod里面的进程调用Kubernetes API或其他外部服务而设计的。它与User account不同:
- User account是为人设计的,而service account则是为Pod中的进程调用Kubernetes API而设计;
- User account是跨namespace的,而service account则是仅局限它所在的namespace;
- 每个namespace都会自动创建一个default service account
- Token controller检测service account的创建,并为它们创建secret
- 开启ServiceAccount Admission Controller后
1、每个Pod在创建后都会自动设置spec.serviceAccount为default(除非指定了其他ServiceAccout)
2、验证Pod引用的service account已经存在,否则拒绝创建
3、如果Pod没有指定ImagePullSecrets,则把service account的ImagePullSecrets加到Pod中
4、每个container启动后都会挂载该service account的token和ca.c到/var/run/secrets/kubernetes.io/serviceaccount/
Opaque Secret
kubectl get secrets
每个ns都会有一个secret
kubectl describe pod my-nginx-676dbf5b5-42lbc
会有一个默认挂接进来的路径,每个pod都有不会变
kubectl get sa
每个ns下有一个名为default的默认的serviceaccount对象
kubectl run -it demo --image=busyboxplus --restart=Never
--/ # cd /var/run/secrets/kubernetes.io/
--/tmp/secrets/kubernetes.io # ls
--/tmp/secrets/kubernetes.io # cd ..
--/tmp/secrets # ls
--/tmp/secrets # cd kubernetes.io/serviceaccount/
--/tmp/secrets/kubernetes.io/serviceaccount # ls
--/tmp/secrets/kubernetes.io/serviceaccount # ls -l
kubectl delete pod demo
编写一个secret对象:
echo -n 'admin' | base64
vim secret.yaml
kubectl apply -f secret.yaml
kubectl get secrets
kubectl describe secrets mysecret
将secret挂接到volume中:
vim secret.yaml
kubectl apply -f secret.yaml
kubectl get pod
kubectl exec mysecret -- ls /secret
查看该路径里的东西,把定义的kv通过文件的方式创建
kubectl exec mysecret -- cat /secret/password
kubectl exec mysecret -- cat /secret/username
查看文件内容
向指定路径映射 secret 密钥
kubectl get pod
kubectl delete pod mysecret
删除自主式的pod
vim secret.yaml
kubectl apply -f secret.yaml
kubectl get pod
kubectl exec mysecret -- ls /secret/
在这个路径下的文件变成了my-group
kubectl exec mysecret -- ls /secret/
kubectl exec mysecret -- ls /secret/my-group
路径和刚才配置文件写的路径是对应的
kubectl exec mysecret -- cat /secret/my-group/my-username
里面的信息是username的值
kubectl delete -f secret.yaml
将Secret设置为环境变量
环境变量读取secret方便,但是不能支撑secret动态更新
kubectl create secret docker-registry myregistrykey --docker-server=reg.westos.org --docker-username=admin --docker-password=westos --docker-email=yakexi007@westos.org
kubectl get secrets
创建了一个secret叫myregistrykey,里面存的是认证信息
网页创建一个私有仓库westos
server1
docker tag yakexi007/game2048:latest reg.westos.org/westos/game2048:latest
docker push reg.westos.org/westos/game2048:latest
server2:
vim registry.yml
kubectl apply -f registry.yml
kubectl get pod
可以看到pod镜像拉取失败【因为仓库是私有的需要认证】
kubectl describe pod mypod
查看pod的详细信息
kubectl delete pod mypod
vim registry.yml
kubectl apply -f registry.yml
拉取成功
更多推荐
所有评论(0)