目录

Secret简介

ServiceAccount

Opaque Secret

编写一个secret对象:

将secret挂接到volume中:

向指定路径映射 secret 密钥

将Secret设置为环境变量


Secret简介

Secret对象类型用来保存敏感信息,例如密码、OAuth 令牌和 ssh key。
敏感信息放在secret 中比放在 Pod 的定义或者容器镜像中来说更加安全和灵活。

Pod 可以用两种方式使用secret:

  1. 作为volume 中的文件被挂载到 pod 中的一个或者多个容器里。
  2. 当kubelet 为 pod 拉取镜像时使用。
     

Secret的类型:

  1. ServiceAccount:Kubernetes 自动创建包含访问 API 凭据的 secret,并自动修改 pod以使用此类型的secret。
  2. Opaque:使用base64编码存储信息,可以通过base64 --decode解码获得原始数据,因此安全性弱。
  3. 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 
拉取成功

 

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐