Kubernetes---存储--Secret
在k8s中ConfigMap可以去保存配置文件以及一些数据,这些数据可以被导入到Pod内部成为环境变量或者文件,从而可以达到热更新的目的。但这些文件在k8s中是以明文的形式保存的。
密码文件、密钥文件这些类型的文件通过ConfigMap去保存就不是很合适,在k8s,还有一种保存机制,Secret。
⒈存在意义
Secret解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec 中。Secret 可以以Volume或者环境变量的方式使用。
⒉Secret类型
Secret有三种类型:
1,Service Account
用来访问Kubernetes API,由Kubernetes 自动创建,并且会自动挂载到Pod的 /run/secrets/kubernetes.io/serviceaccount 目录中
2,Opaque
base64编码格式的Secret,用来存储密码、密钥等,注意加密程度并不高。
3,kubernetes.io/dockerconfigjson
用来存储私有docker registry的认证信息
⒊Service Account
Service Account用来访问Kubernetes API,由Kubernetes 自动创建,并且会自动挂载到Pod的 /run/secrets/kubernetes.io/serviceaccount 目录中,不需要我们手动去管理和创建。
我们可以查看一下
1.新建pod
kubectl run nginx --image nginx
2.查看所有pod
kubectl get pods
3.查看指定pod
kubectl exec nginx-3137573019-md1u2 ls /run/secrets/kubernetes.io/serviceaccount
⒋Opaque Secret
1.创建说明
echo -n "coreqi" | base64
**输出指定字符的base64解密形式
echo -n "MWYyZDF1MmU2N2Rm" | base64 -d
2.secrets.yml
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
password: MWYyZDF1MmU2N2Rm
username: YWRtaW4=
3.使用方式(两种)
1、将Secret挂载到Volume中,保存成文件
apiVersion: v1 kind: Pod metadata: labels: name: seret-test name: seret-test spec: volumes: - name: secrets secret: secretName: mysecret containers: - image: hub.coreqi.cn/library/myapp:v1 name: db volumeMounts: - name: secrets mountPath: "/etc/secrets" readOnly: true
2、将Secret导出到环境变量中
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: pod-deployment spec: replicas: 2 template: metadata: labels: app: pod-deployment spec: containers: - name: pod-1 image: hub.coreqi.cn/library/myapp:v1 ports: - containerPort: 80 env: - name: TEST_USER valueFrom: secretKeyRef: name: mysecret key: username - name: TEST_PASSWORD valueFrom: secretKeyRef: name: mysecret key: password
⒌kubernetes.io/dockerconfigjson
kuberctl create secret docker-registry myregistrykey --docker-server=hub.coreqi.cn --docker-username=fanqi --docker-password=coreqiadmin--docker-email=10000@qq.com
2.在创建 Pod 的时候,通过 imagePullSecrets 来引用刚创建的`myregistrykey `
apiVersion: v1 kind: Pod metadata: name: foo spec: containers: - name: foo image: roc/coreqi:v1 imagePullSecrets: - name: myregistrykey