Secret
解决了密码、token、密钥等敏感数据的配置问题,而不须要把这些敏感数据暴露到镜像或者Pod Spec
中。
Secret
能够以如下两种方式使用:web
volume
挂载Secret有四种类型:docker
注:一些教程说只有三种,通过笔者kubectl create secret --help
查看,且回顾以前ingress
七层代理的知识点,发现其余教程都漏了一种secret是tsl
shell
Service Account
用来访问Kubernetes API,由Kubernetes 自动建立,而且会自动挂载到Pod的 /run/secrets/kubernetes.io/serviceaccount 目录中json
Opaque
base64编码
格式的Secret,用来存储密码、密钥等.api
kubernetes.io/dockerconfigjson
用来存储私有
docker registry
的认证信息app
kubernetes.io/tls
用来存储
tsl
证书。通常是用来配合ingress实现https
证书的配置,具体见ingress
那章编码
Kubernetes API Service
,由Kubernetes 自动建立,而且会自动挂载到Pod的 /run/secrets/kubernetes.io/serviceaccount
目录中api service
,否则会给api service
形成很大的压力。service account
不须要咱们本身管理!示例spa
以下,由于kube-proxy
确定会跟api-servie
交互,因此查看他的service account
命令行
Opaque类型的数据是一个 map类型,要求value是base64编码格式代理
示例
base64
,可是yaml
形式必须指定,否则建立会失败!kubectl create secret generic my-sec --from-literal=key1=value1
以下,类型为Opaque
:
跟configmap同样,都是使用
--from-file
kubectl create secret generic my-sec --from-file=/一个文件夹或者一个文件
apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: password: MWYyZDF1MmU2N2Rm username: YWRtaW4=
configMap
差很少apiVersion: v1 kind: Pod metadata: labels: name: seret-test name: seret-test spec: # volume中导入secret volumes: - name: secrets secret: secretName: mysecret containers: - image: lzw5399/tocgenerator name: db # mounts中使用volume中的secret volumeMounts: - name: secrets mountPath: "/etc/secrets" readOnly: true
configMap
差很少apiVersion: extensions/v1beta1 kind: Deployment metadata: name: pod-deployment spec: replicas: 2 template: metadata: labels: app: pod-deployment spec: containers: - name: pod-1 image: lzw5399/tocgenerator ports: - containerPort: 80 # 将secret的值赋给环境变量 env: - name: TEST_USER valueFrom: secretKeyRef: name: mysecret key: username - name: TEST_PASSWORD valueFrom: secretKeyRef: name: mysecret key: password
用来存储私有docker registry
的认证信息
kubectl create secret docker-registry myregistrykey --docker-server=hub.codepie.fun --docker-username=baoshu --docker-password=yourpwd --docker-email=baoshu@test.com
以下能够看到,建立出来的类型是kubernetes.io/dockerconfigjson
apiVersion: v1 kind: Pod metadata: name: foo spec: containers: - name: foo image: lzw5399/tocgenerator # 引用建立出来的dockerconfigjson imagePullSecrets: - name: myregistrykey
用来存储tsl
证书。通常是用来配合ingress实现https
证书的配置,能够参见ingress
那篇
kubectl create secret tls toc-secret --key tls.key --cert tls.crt
apiVersion: v1 kind: Secret metadata: name: mywebsite-secret data: tls.crt: ************************** tls.key: **************************
ingress
,实现https域名访问apiVersion: extensions/v1beta1 kind: Ingress metadata: name: tocgenerator-ingress spec: tls: - hosts: - toc.codepie.fun # 使用tsl secretName: toc-secret rules: - host: toc.codepie.fun http: paths: - path: / backend: serviceName: tocgenerator-svc servicePort: 80