认识
2024年08月30日
一、认识
Kubernetes Secret
是一种用于存储和管理敏感数据的资源对象,例如密码、密钥、令牌或其他机密信息。它与 ConfigMap
类似,但专为敏感数据设计,Secret
数据会以编码方式存储并在集群中安全分发,避免在 Pod
定义中直接暴露明文信息。
1.1 特点
Kubernetes Secret
专为敏感数据设计,避免在 Pod
中直接硬编码敏感信息。Secret
数据默认存储为 Base64
编码,仍然容易被解码。可以启用 Kubernetes
的加密配置提供更高的安全性。Secret
可以作为环境变量、挂载为文件,或直接通过 API
引用。
1.2 类型
根据用途,Secret
可以分为以下几类:
-
Opaque
(默认): 通用类型,存储任意键值对。 -
kubernetes.io/service-account-token
: 自动为服务账户创建,用于访问API
。 -
kubernetes.io/dockercfg
:Docker
配置文件,用于私有镜像库认证。 -
kubernetes.io/dockerconfigjson
:Docker
配置的JSON
格式。 -
kubernetes.io/tls
: 存储TLS
证书和密钥。
二、语法
2.1 作为环境变量
以下是一个定义 Secret
的 YAML
文件
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 作为挂载文件
以下是一个定义 Secret
的 YAML
文件
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/
目录将包含 username
和 password
文件。
2.3 作为镜像拉取凭据
以下是一个定义 Secret
的 YAML
文件
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