关于kubernetes:Kubernetes存储之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
...
$ 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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理