Kubernetes(k8s)的存儲Secret 詳細介紹


Secret 存在意義 

Secret 解決了密碼、token、密鑰等敏感數據的配置問題,而不需要把這些敏感數據暴露到鏡像或者 Pod Spec 中。Secret 可以以 Volume 或者環境變量的方式使用 

Secret 有三種類型: 

  • Service Account :用來訪問 Kubernetes API,由 Kubernetes 自動創建,並且會自動掛載到 Pod 的/run/secrets/kubernetes.io/serviceaccount  目錄中
  • Opaque :base64編碼格式的Secret,用來存儲密碼、密鑰等
  • kubernetes.io/dockerconfigjson :用來存儲私有 docker registry 的認證信息

Service Account 

Service Account 用來訪問 Kubernetes API,由 Kubernetes 自動創建,並且會自動掛載到 Pod的 /run/secrets/kubernetes.io/serviceaccount 目錄中
 

$ kubectl run nginx --image nginx
deployment "nginx" created
$ kubectl get pods
NAME                     READY     STATUS    RESTARTS   AGE
nginx-3137573019-md1u2   1/1       Running   0          13s
$ kubectl exec nginx-3137573019-md1u2 ls /run/secrets/kubernetes.io/serviceaccount
ca.crt
namespace
token

Opaque Secret

 Ⅰ、創建說明 
Opaque 類型的數據是一個 map 類型,要求 value 是 base64 編碼格式:

 

$ echo -n "admin" | base64
YWRtaW4=
$ echo -n "1f2d1e2e67df" | base64
MWYyZDFlMmU2N2Rm

secrets.yaml
 

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  password: MWYyZDFlMmU2N2Rm
  username: YWRtaW4=

Ⅱ、使用方式 
1、將 Secret 掛載到 Volume 中

 

apiVersion: v1
kind: Pod
metadata:
  labels:
    name: seret-test
  name: seret-test
spec:
  volumes:
  - name: secrets
    secret:
      secretName: mysecret
  containers:
  - image: wangyanglinux/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: wangyanglinux/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 創建 docker registry 認證的 secret
 

$ kubectl create secret docker-registry myregistrykey --docker-server=DOCKER_REGISTRY_SERVER --
docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
secret "myregistrykey" created.

在創建 Pod 的時候,通過 imagePullSecrets 來引用剛創建的 `myregistrykey`
 

apiVersion: v1
kind: Pod
metadata:
  name: foo
spec:
  containers:
    - name: foo
      image: roc/awangyang:v1
  imagePullSecrets:
    - name: myregistrykey

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM