Kubernetes(K8s)中的 Secret 使用详解

166 阅读2分钟

Kubernetes(K8s)中的 Secret 是一种用于存储和管理敏感信息的资源对象,比如密码、令牌、密钥等。它的主要作用是安全地保存敏感数据,并在 Pod 或容器需要时以安全的方式提供这些数据,避免将敏感信息硬编码在镜像或配置文件中。


Secret 的作用

  1. 安全存储敏感数据
    防止密码、API密钥等直接暴露在代码或镜像中。

  2. 灵活挂载到 Pod
    可以作为环境变量、文件或 kubelet 的配置挂载到 Pod 内部。

  3. 集中管理和更新
    统一管理敏感信息,便于更新和轮换密钥。

  4. 与 RBAC 配合
    可以结合 Kubernetes 的权限控制,限制 Secret 的访问范围。


Secret 的类型

  • Opaque(默认类型):任意键值对(如密码、令牌)
  • docker-registry:用于私有镜像仓库认证
  • tls:存储 TLS 证书和私钥

Secret 的使用方式

  1. 创建 Secret

    kubectl create secret generic my-secret \
      --from-literal=username=admin \
      --from-literal=password=123456
    
  2. 在 Pod 中使用 Secret(环境变量方式)

    apiVersion: v1
    kind: Pod
    metadata:
      name: secret-env-demo
    spec:
      containers:
      - name: app
        image: busybox
        env:
        - name: USERNAME
          valueFrom:
            secretKeyRef:
              name: my-secret
              key: username
        - name: PASSWORD
          valueFrom:
            secretKeyRef:
              name: my-secret
              key: password
    
  3. 以文件方式挂载到 Pod

    volumes:
    - name: secret-volume
      secret:
        secretName: my-secret
    containers:
    - name: app
      volumeMounts:
      - name: secret-volume
        mountPath: "/etc/secret"
    

注意事项

  • Secret 默认以 base64 编码存储(不是加密,只是编码)。
  • 建议结合加密存储(如启用 K8s 的加密机制或外部密钥管理系统)。
  • Secret 的访问应受限于最小权限原则。

总结:
K8s 的 Secret 主要用于安全地管理和分发敏感信息,提升应用安全性和运维效率,是生产环境中不可或缺的资源类型。