K8s-存储_Secret

K8s-存储_Secret


引入:Secret存在意义

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

  • Sercret三种类型

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

​ Opaque 类型的数据是一个 map 类型,要求 value 是 base64 编码格式: 基于以下模板创建

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

# 会自动解密   

  • 使用方式

    • 将 Secret 挂载到 Volume 中,基于以下模板完成

      apiVersion: v1
      kind: Pod
      metadata: 
        labels: 
          name: seret-test
        name: seret-test
      spec: 
        volumes: 
        - name: volumes12
          secret: 
            secretName: mysecret
        containers: 
        - image: chenxiyanglinux/myapp:v1
          name: db
          volumeMounts: 
          - name: volumes12
            mountPath: "/data"
      

    • 将 Secret 导出到环境变量中,基于以下模板完成

      apiVersion: eextensions/v1beta1
      kind: Deployment
      metadata:
        name: pod-deployment
      spec: 
        replicas: 2
        template: 
          metadata: 
            labels: 
              app: pod-deployment
          spec: 
            containers: 
            - name: pod-1
              image: chenxiyanglinux/myapp:v1
              ports: 
              - containerPort: 80
              env: 
              - name: TEST_USER
                valueFrom:
                  secretKeyRef:
                    name: mysecret
                    key: username
              - name: TEST_PASSWORD
                valueFrom: 
                  secretKeyRef: 
                    name: mysecret
                    key: password
      

      kubectl exec pod-deployment-747f78bc67-ktn5q -- env # 查看能否打印出来

posted @ 2022-07-25 15:44  Sunset_cloud  阅读(49)  评论(0编辑  收藏  举报