Kubernetes---存储--Secret

在k8s中ConfigMap可以去保存配置文件以及一些数据,这些数据可以被导入到Pod内部成为环境变量或者文件,从而可以达到热更新的目的。但这些文件在k8s中是以明文的形式保存的。

密码文件、密钥文件这些类型的文件通过ConfigMap去保存就不是很合适,在k8s,还有一种保存机制,Secret。

⒈存在意义

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

⒉Secret类型

  Secret有三种类型:

  1,Service Account

    用来访问Kubernetes API,由Kubernetes 自动创建,并且会自动挂载到Pod的 /run/secrets/kubernetes.io/serviceaccount 目录中

  2,Opaque

    base64编码格式的Secret,用来存储密码、密钥等,注意加密程度并不高。

  3,kubernetes.io/dockerconfigjson

    用来存储私有docker registry的认证信息

⒊Service Account

  Service Account用来访问Kubernetes API,由Kubernetes 自动创建,并且会自动挂载到Pod的 /run/secrets/kubernetes.io/serviceaccount 目录中,不需要我们手动去管理和创建。

  我们可以查看一下

  1.新建pod

kubectl run nginx --image nginx

  2.查看所有pod

kubectl get pods

  3.查看指定pod

kubectl exec nginx-3137573019-md1u2 ls /run/secrets/kubernetes.io/serviceaccount

⒋Opaque Secret

  1.创建说明

  Opaque类型的数据是一个 map类型,要求value是 base64 编码格式
  **输出指定字符的base64加密形式
echo -n "coreqi" | base64

  **输出指定字符的base64解密形式

echo -n "MWYyZDF1MmU2N2Rm" | base64 -d

  2.secrets.yml

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

  3.使用方式(两种)

    1、将Secret挂载到Volume中,保存成文件

apiVersion: v1 
kind: Pod 
metadata:
  labels:
    name: seret-test 
  name: seret-test 
spec:
  volumes:
  - name: secrets 
    secret:
      secretName: mysecret 
  containers:
  - image: hub.coreqi.cn/library/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: hub.coreqi.cn/library/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

  1.使用Kuberctl 创建docker registry 认证的 secret
kuberctl create secret docker-registry myregistrykey --docker-server=hub.coreqi.cn --docker-username=fanqi --docker-password=coreqiadmin--docker-email=10000@qq.com

  2.在创建 Pod 的时候,通过 imagePullSecrets 来引用刚创建的`myregistrykey `

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

 

 

 

posted @ 2020-04-30 15:37  SpringCore  阅读(413)  评论(0编辑  收藏  举报