k8s基础概念之四 secret
secret是用来保存敏感信息的,令牌或者key、redis、mysql密码
secrce的一些简单使用
1040 echo -n "admin" > ./username.txt 1041 echo -n "123456" > ./password.txt 1042 kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt #-n 就是没有换行符 --- kubectl create secret generic dev-db-secret-2 --from-literal=username=devuser --from-literal=password='S!B\*d$zDsb' --- #验证1 [root@master01 ~]# kubectl get secrets db-user-pass -o yaml apiVersion: v1 data: password.txt: MTIzNDU2 username.txt: YWRtaW4= kind: Secret metadata: creationTimestamp: "2021-12-10T13:43:34Z" managedFields: - apiVersion: v1 fieldsType: FieldsV1 fieldsV1: f:data: .: {} f:password.txt: {} f:username.txt: {} f:type: {} manager: kubectl-create operation: Update time: "2021-12-10T13:43:34Z" name: db-user-pass namespace: default resourceVersion: "808531" selfLink: /api/v1/namespaces/default/secrets/db-user-pass uid: 363862df-15fa-433f-8ecb-c2406997de84 echo "MTIzNDU2" | base64 --decode --- #验证2 [root@master01 ~]# kubectl get secret dev-db-secret-2 -o yaml apiVersion: v1 data: password: UyFCXCpkJHpEc2I= username: ZGV2dXNlcg== kind: Secret metadata: creationTimestamp: "2021-12-10T14:02:56Z" managedFields: - apiVersion: v1 fieldsType: FieldsV1 fieldsV1: f:data: .: {} f:password: {} f:username: {} f:type: {} manager: kubectl-create operation: Update time: "2021-12-10T14:02:56Z" name: dev-db-secret-2 namespace: default resourceVersion: "811968" selfLink: /api/v1/namespaces/default/secrets/dev-db-secret-2 uid: aa636959-5f33-4d05-a3f7-ce12079734f0 type: Opaque echo "UyFCXCpkJHpEc2I=" | base64 --decode
如果需要使用特殊字符"! @ # ¥ $ % ^"之类的需要用 \ 取消特殊含义,或者单引号也可以取消特殊含义,,单引号和 \ 都是取消字符或者字符串的特殊含义,区别就是取消一个字符或者一个字符串
apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: username: c3lzdGVtLWFkbWlu password: cllzdGVtLXBhc3N3b3Jk #写在data下面需要我们手动去加密, --- apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque strinData: username: admin password: password #如果把data写成strinData:的话,我们就可以直接写明文,他会帮我们加密,如果同时写data和strinData,会把data忽略掉,只使用strinData secret: 用途 imagePullSecret: #Pod拉取私有镜像仓库时使用的账户密码,里面的账户信息,会传递geikubelet然后kubelet就可以拉取有密码的仓库里面的镜像
kubectl create secret docker-reqistry docker-secret2 --docker-server=hub.docker.com --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
#挂载使用,和containers同级
imagePullSecrets:
- name: name #上面储存的
不覆盖目录
以上那些方式挂载的时候,会覆盖所挂载的目录,导致pod没办法正常的启动,所以使用subPath的方式挂载可以只挂载一个文件,从而不覆盖目录
…… …… spec: containers: …… volumeMounts: - mountPath: /etc/nginx/nginx.conf name: config-colume subPath: etc/nginx/nginx.conf #不要加根 …… volumes: - configMap: default:Mode: 420 name: nginx-conf itmes: key: nginx.conf path: etc/nginx/nginx.conf name: config-v
优劣分析:
subPath:不会覆盖目录,但是不会热更新,如果修改了configmap的配置文件,已经挂载到容器内的不会跟着更新。
mountPath: 会热更新,但是会覆盖整个目录,
解决办法:使用mountPath,挂载到一个空目录,然后在容器启动前,做一个链接到相应的目录