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