关于kubernetes:Kubernetes存储之Secret

5次阅读

共计 1754 个字符,预计需要花费 5 分钟才能阅读完成。

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
...
$ kubectl exec nginx-xxx ls /run/secrets/kubernetes.io/serviceaccount
ca.crt
namespace
token

Opaque Secret

1. 创立阐明

$ 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=

2. 应用形式

2.1 将 Secret 挂载到 Volume 中

apiVersion: v1
kind: Pod
metadata:
  labels:
    name: secret-test
  name: secret-test
spec:
  volumes:
  - name: secrets
    secret:
      secretName: mysecret
  containers:
  - image: myapp:v1
    name: db
    volumeMounts:
    - name: secrets
      mountPath: "/etc/secrets"
      readOnly: true

2.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: myapp:v1
        ports:
        - containerPort: 80
        env:
        - name: TEST_USER
          valueFrom:
            secretKeyRef:
              name: mysecret
              key: username
        - name: TEST_PASSWORD
          valueFrom:
            secreKeyRef:
              name: mysecret
              key: password

Kubernetes.io/dockerconfigjson

应用 Kubectl 创立 docker registry 认证的 secret

$ kubectl create docker-registry myregistrykey --docker-server=hub.example.com --docker-username=admin --docker-password=Harbor12345 --docker-email=Yuan_sr@163.com

在创立 Pod 的时候,通过 imagePullSecrets 来援用刚创立的 myregistrykey

apiVersion: v1
kind: Pod
metadata:
  name: foo
spec:
  containers:
    - name: foo
      image: wst/example:v1 #公有仓库中的镜像
  imagePullSecrets:
    - name: myregistrykey
正文完
 0