为什么要使用secret

官网说明

  1. 以前一些数据库密码可能会写在配置文件中springboot工程中一般是application.yaml。有的会直接写明文,有的加密之后把密文写在配置文件中。
  2. k8s中secret是一种包含少量敏感信息例如密码、令牌或密钥的对象。 这样的信息可能会被放在 Pod 规约中或者镜像中。 使用 Secret 意味着你不需要在应用程序代码中包含机密数据。
  3. Secret 类似于 ConfigMap 但专门用于保存机密数据。

Pod使用Secret

Pod有用三种方式来使用 Secret

configMap的使用也有前两种方式

  1. 作为挂载到一个或多个容器上的卷 中的文件。
  2. 作为容器的环境变量。
  3. 由 kubelet 在为 Pod 拉取镜像时使用

pod以文件的形式使用secret

如果你希望在 Pod 中访问 Secret 内的数据,一种方式是让 Kubernetes 将 Secret 以 Pod 中一个或多个容器的文件系统中的文件的形式呈现出来。

要配置这种行为,你需要:

  1. 创建一个 Secret 或者使用已有的 Secret。多个 Pod 可以引用同一个 Secret。
  2. 更改 Pod 定义,在 .spec.volumes[] 下添加一个卷。根据需要为卷设置其名称, 并将 .spec.volumes[].secret.secretName 字段设置为 Secret 对象的名称。
  3. 为每个需要该 Secret 的容器添加 .spec.containers[].volumeMounts[]。 并将 .spec.containers[].volumeMounts[].readyOnly 设置为 true, 将 .spec.containers[].volumeMounts[].mountPath 设置为希望 Secret 被放置的、目前尚未被使用的路径名。
  4. 更改你的镜像或命令行,以便程序读取所设置的目录下的文件。Secret 的 data 映射中的每个主键都成为 mountPath 下面的文件名。

也可以写在Deployment中

apiVersion: apps/v1
kind: Deployment
metadata:
  name: online-route
spec:
  replicas: 1
    spec:
      imagePullSecrets:
      - name: gitlab-registry
      containers:
      - name: online-route
        image: CI_REGISTRY_IMAGE:CI_COMMIT_SHORT_SHA
        imagePullPolicy: IfNotPresent
        ports:
         - containerPort: 8080
        volumeMounts:
        - name: secret
          mountPath: "/etc/secrets"
      volumes:
      - name: secret
        secret:
          secretName: online-route-secret
          defaultMode: 0400

pod

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: redis
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"
      readOnly: true
  volumes:
  - name: foo
    secret:
      secretName: mysecret
      optional: false # 默认设置,意味着 "mysecret" 必须已经存在

使用配置文件管理Secret

官网教程

编辑secret.yaml文件

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
#1. data 字段用来存储 base64 编码的任意数据
data:
  username: YWRtaW4=        #base64编码之后的字符串
  password: MWYyZDFlMmU2N2Rm         #base64编码之后的字符串
#2. stringData 字段是为了方便,它允许 Secret 使用未编码的字符串
stringData:
  PG_USER: test
  PG_PASSWORD: '123456'

使用 kubectl apply 创建 Secret创建

kubectl apply -f ./secret.yaml
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐