编辑
2023-06-13
K8S
00
请注意,本文编写于 589 天前,最后修改于 589 天前,其中某些信息可能已经过时。

目录

1.简介
2.定义 Secret
3.使用

1.简介

在 Kubernetes 中,Secret 是一种用于存储和管理敏感信息的对象类型,如密码、API密钥、证书等等。它们与 ConfigMap 相似,但在处理敏感信息时,Secret 会提供更高的安全性和保密性。

Secret 可以用于将这些敏感信息注入到容器中,并确保这些信息在运行时不会被意外泄漏或暴露给其他人。Secret 可以通过多种方式定义和使用,例如直接定义、从文件中加载、从环境变量中加载等。

在 Kubernetes 中,Secrets 通常被用于以下场景:

  • 作为卷挂载到 Pod 中,用于存储证书、密钥等敏感文件
  • 在 Pod 中使用环境变量,用于存储用户名和密码等敏感信息
  • 用于存储 Docker 镜像仓库的登录信息
  • 用于存储外部服务的 API 密钥

Secrets 可以在 Pod 的 spec 中通过 volume 和环境变量的方式引用。当容器使用 volume 来引用 Secret 时,Secret 会以文件的形式挂载到容器中。当容器使用环境变量来引用 Secret 时,Secret 中的数据会以 base64 编码后,以键值对的形式注入到容器的环境变量中。

需要注意的是,Secret 并不提供强大的安全保证,只是简单地将数据存储在 base64 编码的形式下,并不提供加密或其他安全措施,因此不要将高度敏感的信息存储在 Secret 中。在处理高度敏感的信息时,需要使用更高级别的保护机制,如使用加密数据的 Volume 类型,或者使用第三方加密解决方案等。

2.定义 Secret

使用命令行创建

可以使用 kubectl create secret 命令来创建 secret,例如:

sh
kubectl create secret generic my-secret --from-literal=username=admin --from-literal=password=admin123

使用 YAML 文件定义

yml
apiVersion: v1 kind: Secret metadata: name: my-secret type: Opaque data: username: YWRtaW4= # base64 编码后的用户名 admin password: MWYyZDFlMmU2N2Rm # base64 编码后的密码 1f2d1e2e67df

3.使用

env方式

yml
apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: myapp-container image: busybox command: ["/bin/sh","-c","echo $username;echo $password;sleep 3600;"] env: - name: username valueFrom: secretKeyRef: name: my-secret key: username - name: password valueFrom: secretKeyRef: name: my-secret key: password

envFrom方式

yml
apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: myapp-container image: busybox command: ["/bin/sh","-c","echo $username;echo $password;sleep 3600;"] # 一次性注入这个 secret envFrom: - secretRef: name: my-secret restartPolicy: Never

volume 使用

yml
apiVersion: v1 kind: Pod metadata: name: myapp-pod spec: containers: - name: myapp-container image: busybox command: ["/bin/sh","-c","sleep 3600"] volumeMounts: - name: secret-volume mountPath: /data volumes: - name: secret-volume secret: secretName: my-secret

本文作者:松轩(^U^)

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

Document