跳到主要内容

认识

2024年08月30日
柏拉文
越努力,越幸运

一、认识


Kubernetes Secret 是一种用于存储和管理敏感数据的资源对象,例如密码、密钥、令牌或其他机密信息。它与 ConfigMap 类似,但专为敏感数据设计,Secret 数据会以编码方式存储并在集群中安全分发,避免在 Pod 定义中直接暴露明文信息。

1.1 特点

Kubernetes Secret 专为敏感数据设计,避免在 Pod 中直接硬编码敏感信息。Secret 数据默认存储为 Base64 编码,仍然容易被解码。可以启用 Kubernetes 的加密配置提供更高的安全性。Secret 可以作为环境变量、挂载为文件,或直接通过 API 引用。

1.2 类型

根据用途,Secret 可以分为以下几类:

  1. Opaque (默认): 通用类型,存储任意键值对。

  2. kubernetes.io/service-account-token: 自动为服务账户创建,用于访问 API

  3. kubernetes.io/dockercfg: Docker 配置文件,用于私有镜像库认证。

  4. kubernetes.io/dockerconfigjson: Docker 配置的 JSON 格式。

  5. kubernetes.io/tls: 存储 TLS 证书和密钥。

二、语法


2.1 作为环境变量

以下是一个定义 SecretYAML 文件

apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
username: YWRtaW4= # Base64 编码的 "admin"
password: cGFzc3dvcmQ= # Base64 编码的 "password"

Secret 数据注入到 Pod 的环境变量:

apiVersion: v1
kind: Pod
metadata:
name: secret-env-pod
spec:
containers:
- name: my-container
image: nginx
env:
- name: USERNAME
valueFrom:
secretKeyRef:
name: my-secret
key: username
- name: PASSWORD
valueFrom:
secretKeyRef:
name: my-secret
key: password

2.2 作为挂载文件

以下是一个定义 SecretYAML 文件

apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
username: YWRtaW4= # Base64 编码的 "admin"
password: cGFzc3dvcmQ= # Base64 编码的 "password"

Secret 数据以文件形式挂载到容器中:

apiVersion: v1
kind: Pod
metadata:
name: secret-volume-pod
spec:
containers:
- name: my-container
image: nginx
volumeMounts:
- name: secret-volume
mountPath: "/etc/secret"
volumes:
- name: secret-volume
secret:
secretName: my-secret

挂载后,容器内 /etc/secret/ 目录将包含 usernamepassword 文件。

2.3 作为镜像拉取凭据

以下是一个定义 SecretYAML 文件

apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
username: YWRtaW4= # Base64 编码的 "admin"
password: cGFzc3dvcmQ= # Base64 编码的 "password"

配置 Pod 使用 Secret 进行私有镜像拉取:

apiVersion: v1
kind: Pod
metadata:
name: private-reg-pod
spec:
containers:
- name: my-container
image: my-private-registry/my-image:tag
imagePullSecrets:
- name: my-docker-secret