Secret 存在的意义

Secret 解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec中。Secret 可以以Volume或者环境变量的方式使用。

类型:

  • Service Account:用来访问Kubernetes API,由Kubernetes自动创建,并且会自动挂载到Pod的 /run/sercrets/kubernetes.io/serviceaccount目录中。
  • Opaque:base64编码格式的Secret,用来存储密码、密钥等。
  • kubernetes.io/dockerconfigjson:用来存储私有docker registry的认证信息

Service Account 

Opaque Secret

创建说明:

Opaque 类型的数据是一个map类型,要求value是base64编码格式:

base64 编码:

echo-n"root" | base64

base64 解码:

echo-n"cm9vdA==" | base64

secrets.yaml:

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: cm9vdA==
  password: MTIzNDU2

使用方式:

挂在到 Volume:

apiVersion: v1
kind: Pod
metadata:
  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

 

导出到环境变量中:

apiVersion: v1
kind: Pod
metadata:
  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
    env:
    - name: TEST_USER
      valueFrom:
        secretKeyRef:
          name: mysecret
          key: username
    - name: TEST_PASSWORD
      valueFrom:
        secretKeyRef:
          name: mysecret
          key: password

kubernetes.io/dockerconfigjson

首先测试一下是否可以pull到私有仓库的image(这里肯定是失败的没有权限):

使用 Kuberctl 创建 docker registry 认证的 secret,我这里使用 aliyun提供的私有仓库进行创建.

kubectl create secret docker-registry my-secret --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER
--docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL

 这里我们需要对pod.yaml做一些改动:

apiVersion: v1
kind: Pod
metadata:
  name: seret-test
spec:
  volumes:
  - name: secrets
    secret:
      secretName: mysecret
  containers:
  - image: registry.cn-hangzhou.aliyuncs.com/netcoredemo/demo1:v1
    name: db
    volumeMounts:
    - name: secrets
      mountPath: /etc/secrets
      readOnly: true
    env:
    - name: TEST_USER
      valueFrom:
        secretKeyRef:
          name: mysecret
          key: username
    - name: TEST_PASSWORD
      valueFrom:
        secretKeyRef:
          name: mysecret
          key: password
  imagePullSecrets:
  - name: aliyundocker   #通过刚才创建的secret pull image

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐