45·配置管理进阶

创建 Secret

kubernetessecretconfigurationsecurity

创建 Secret

学习目标

  1. 掌握使用 kubectl 创建 Secret 的方法
  2. 掌握使用 YAML 文件定义 Secret
  3. 理解 Secret 的数据编码方式

核心概念

创建方式

1. 命令行创建
   - kubectl create secret
   - 适合快速测试

2. YAML 文件创建
   - 声明式定义
   - 适合生产环境

命令行创建方式

# 方式 1:从字面量创建
kubectl create secret generic db-secret \
  --from-literal=username=admin \
  --from-literal=password=MyP@ssw0rd

# 方式 2:从文件创建
kubectl create secret generic tls-secret \
  --from-file=tls.crt=server.crt \
  --from-file=tls.key=server.key

# 方式 3:从环境变量文件创建
kubectl create secret generic env-secret \
  --from-env-file=.env

# 方式 4:创建 TLS Secret
kubectl create secret tls my-tls \
  --cert=server.crt \
  --key=server.key

# 方式 5:创建 Docker 镜像仓库 Secret
kubectl create secret docker-registry my-registry \
  --docker-server=registry.example.com \
  --docker-username=admin \
  --docker-password=MyP@ssw0rd \
  [email protected]

YAML 文件定义

apiVersion: v1
kind: Secret
metadata:
  name: db-secret
  namespace: default
type: Opaque
data:
  # Base64 编码的值
  username: YWRtaW4=        # echo -n "admin" | base64
  password: TXlQQHNzdzByZA==  # echo -n "MyP@ssw0rd" | base64

Base64 编码

# 编码
echo -n "admin" | base64
# 输出:YWRtaW4=

echo -n "MyP@ssw0rd" | base64
# 输出:TXlQQHNzdzByZA==

# 解码
echo "YWRtaW4=" | base64 -d
# 输出:admin

不同类型的 Secret

Opaque Secret(通用类型)

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  username: YWRtaW4=
  password: TXlQQHNzdzByZA==

TLS Secret

apiVersion: v1
kind: Secret
metadata:
  name: tls-secret
type: kubernetes.io/tls
data:
  tls.crt: <base64 编码的证书>
  tls.key: <base64 编码的私钥>

Docker 镜像仓库 Secret

apiVersion: v1
kind: Secret
metadata:
  name: registry-secret
type: kubernetes.io/dockerconfigjson
data:
  .dockerconfigjson: <base64 编码的 Docker 配置>

查看 Secret

# 查看所有 Secret
kubectl get secrets

# 查看特定 Secret
kubectl get secret my-secret

# 查看详细信息
kubectl describe secret my-secret

# 查看 YAML 格式(Base64 编码)
kubectl get secret my-secret -o yaml

# 解码查看实际值
kubectl get secret my-secret -o jsonpath='{.data.password}' | base64 -d

删除 Secret

# 删除 Secret
kubectl delete secret my-secret

实践练习

练习 1:创建 Opaque Secret

创建数据库凭证 Secret:

# 命令行创建
kubectl create secret generic db-credentials \
  --from-literal=username=admin \
  --from-literal=password=MyP@ssw0rd

# 验证
kubectl get secret db-credentials
kubectl describe secret db-credentials

练习 2:YAML 文件创建

创建 Secret 文件 db-secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: db-secret
type: Opaque
data:
  username: YWRtaW4=
  password: TXlQQHNzdzByZA==
  database: bXlkYg==

先编码数据:

echo -n "admin" | base64
echo -n "MyP@ssw0rd" | base64
echo -n "mydb" | base64

应用配置:

kubectl apply -f db-secret.yaml

练习 3:创建 TLS Secret

准备证书文件(测试用):

# 生成自签名证书
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout server.key -out server.crt \
  -subj "/CN=example.com"

创建 TLS Secret:

kubectl create secret tls my-tls \
  --cert=server.crt \
  --key=server.key

验证:

kubectl get secret my-tls
kubectl describe secret my-tls

练习 4:解码 Secret

查看 Secret 的实际值:

# 查看所有键
kubectl get secret db-credentials -o jsonpath='{.data}'

# 查看单个值
kubectl get secret db-credentials -o jsonpath='{.data.username}' | base64 -d
kubectl get secret db-credentials -o jsonpath='{.data.password}' | base64 -d

小结

要点说明
命令行创建kubectl create secret
YAML 创建声明式定义
数据编码Base64 编码
Secret 类型Opaque、TLS、Docker 等
查看命令kubectl get/describe secret
解码命令base64 -d

练习编辑器

bash
Loading...

继续学习

完成本课后,建议继续学习下一课「使用 Secret」 以巩固所学知识。