当前位置: 首页 > news >正文

【Kubernets知识】Secret组件更新大全

文章目录

  • Kubernetes Secret 更新机制详解及场景指南
    • 一、直接替换式更新(全量覆盖)
      • 操作命令
      • 特点
      • 适用场景
      • 风险提示
    • 二、JSON Patch 精准更新
      • 操作命令
      • 特点
      • 适用场景
      • 示例流程
    • 三、Strategic Merge Patch(策略合并)
      • 操作命令
      • 特点
      • 适用场景
    • 四、编辑式更新(交互式)
      • 操作命令
      • 特点
      • 适用场景
      • 操作流程
    • 五、版本化更新(蓝绿部署)
      • 操作流程
      • 特点
      • 适用场景
    • 六、外部系统集成更新
      • 1. Vault Agent自动同步
      • 2. SealedSecret加密更新
      • 适用场景
    • 更新策略选择矩阵
    • 最佳实践建议
    • Secret类型
    • Secret类型
    • 关联知识

Kubernetes Secret 更新机制详解及场景指南

一、直接替换式更新(全量覆盖)

操作命令

kubectl create secret generic db-creds \--from-literal=username=new-user \--from-literal=password=new-pass \-o yaml --dry-run=client | kubectl apply -f -

特点

  • 全量替换:完全覆盖现有Secret内容
  • 原子操作:更新过程不可中断
  • 版本跳变:无法保留历史版本

适用场景

  1. 首次部署后的紧急修复
    (需立即替换全部凭证且不考虑历史记录)
  2. 整体配置迁移
    (如从旧集群迁移Secret到新集群)
  3. 密钥轮换场景
    (需要同时更新所有关联密钥)

风险提示

❗ 会立即影响所有使用该Secret的Pod(需配合RollingUpdate)


二、JSON Patch 精准更新

操作命令

更新单个字段
kubectl patch secret app-config \--type='json' \-p='[{"op": "replace", "path": "/data/API_KEY", "value": "'$(echo -n "new-key" | base64)'"}]'新增字段
kubectl patch secret app-config \--type='json' \-p='[{"op": "add", "path": "/data/NEW_FIELD", "value": "'$(echo -n "value" | base64)'"}]'

特点

  • 字段级更新:只修改指定字段
  • 版本保留:其他字段保持不变
  • 精确控制:支持RFC 6902标准操作

适用场景

  1. 多环境配置管理
    (仅更新某个环境的特定配置项)
  2. 密钥滚动更新
    (如分批更新不同微服务的访问凭证)
  3. CI/CD管道更新
    (自动化流程中精确修改部分配置)

示例流程

获取当前Secret
生成JSON Patch
验证Patch格式
应用更新

三、Strategic Merge Patch(策略合并)

操作命令

kubectl patch secret tls-cert \--patch='{"data":{"tls.crt":"'$(cat new.crt | base64)'","tls.key":"'$(cat new.key | base64)'"}}'

特点

  • 智能合并:自动处理字段冲突
  • 类型感知:识别特定Secret类型结构
  • K8s原生:专为Kubernetes资源设计

适用场景

  1. TLS证书更新
    (同时更新证书和密钥对)
  2. Docker镜像凭证更新
    .dockerconfigjson字段的特殊处理)
  3. 复合型Secret维护
    (如同时包含证书、密码和配置文件的Secret)

四、编辑式更新(交互式)

操作命令

kubectl edit secret prod-db-creds

特点

  • 交互式操作:直接编辑YAML
  • 实时验证:保存时自动校验
  • 人工确认:适合敏感操作

适用场景

  1. 开发调试阶段
    (快速修改测试环境配置)
  2. 紧急故障处理
    (需人工确认的敏感操作)
  3. 多字段复杂更新
    (需要同时观察多个字段的场景)

操作流程

  1. 打开编辑器修改base64编码值
  2. 保存时自动触发更新
  3. 系统验证并应用变更

五、版本化更新(蓝绿部署)

操作流程

创建新版本Secret
kubectl create secret generic db-creds-v2 \--from-literal=username=user-v2 \--from-literal=password=pass-v2逐步更新Deployment引用
kubectl set env deployment/app \--containers=app \--from=secret/db-creds-v2

特点

  • 版本隔离:新旧版本共存
  • 渐进式更新:可控制更新节奏
  • 快速回滚:直接切换引用

适用场景

  1. 关键生产系统更新
    (要求零停机更新的场景)
  2. A/B测试配置
    (不同版本Pod使用不同配置)
  3. 合规性要求严格场景
    (需保留历史版本审计)

六、外部系统集成更新

1. Vault Agent自动同步

vault-agent-config.hcl
template {destination = "/etc/secrets/db-creds"contents = <<EOF{{- with secret "database/creds/app" }}username: {{ .Data.username }}password: {{ .Data.password }}{{- end }}EOF
}

2. SealedSecret加密更新

加密Secret
kubeseal --format yaml < secret.yaml > sealed-secret.yaml应用更新
kubectl apply -f sealed-secret.yaml

适用场景

  1. 集中化密钥管理
    (与HashiCorp Vault集成)
  2. GitOps工作流
    (加密后的Secret可安全存入Git仓库)
  3. 跨集群同步
    (通过外部系统保持多集群一致)

更新策略选择矩阵

策略精确度安全性复杂度适合场景
直接替换紧急更新/简单系统
JSON PatchCI/CD管道/部分更新
Strategic Merge结构化Secret更新
交互式编辑开发调试/复杂更新
版本化更新生产系统/蓝绿部署
外部系统集成最高最高最高企业级密钥管理

最佳实践建议

  1. 生产环境更新流程

    获取当前状态备份
    创建新版本Secret
    更新测试环境验证
    灰度发布到生产
    监控应用状态
    清理旧版本
  2. 变更审计命令

    # 查看Secret变更历史
    kubectl get events --sort-by='.lastTimestamp' \--field-selector involvedObject.kind=Secret
    
  3. 自动化验证脚本

    #!/bin/bash
    SECRET_NAME="prod-db-creds"
    NEW_VALUE="$1"# 验证新值是否符合规范
    if ! [[ "$NEW_VALUE" =~ ^[A-Za-z0-9]{16}$ ]]; thenecho "Invalid password format"exit 1
    fi# 执行安全更新
    kubectl patch secret $SECRET_NAME \--type=json \-p="[{'op':'replace','path':'/data/password','value':'$(echo -n "$NEW_VALUE" | base64)'}]"
    

Secret类型

Secret类型

以下是 Kubernetes (k8s) 中 Secret 组件类型的详细分类及使用场景说明,以清晰的 Markdown 表格和代码示例呈现:


Kubernetes Secret 类型分类

类型标识用途描述数据结构要求典型场景
Opaque通用型键值对存储任意键值数据应用配置、数据库密码、API 密钥
kubernetes.io/tlsTLS 证书和私钥必须包含 tls.crttls.keyHTTPS 服务、Ingress 证书
kubernetes.io/dockerconfigjson私有容器镜像仓库认证符合 .dockerconfigjson 格式从私有仓库拉取镜像
kubernetes.io/basic-authHTTP 基础认证凭据必须含 usernamepasswordIngress 基础认证、API 访问控制
kubernetes.io/ssh-authSSH 私钥认证必须含 ssh-privatekeyGit 仓库克隆、SSH 登录服务器
kubernetes.io/service-account-tokenServiceAccount 令牌自动生成Pod 访问 Kubernetes API
bootstrap.kubernetes.io/token节点加入集群的引导令牌特定格式的令牌新节点加入 Kubernetes 集群

详细说明与示例

  1. Opaque(通用型)
    用途:存储任意自定义数据(默认类型)。
    示例:
apiVersion: v1
kind: Secret
metadata:name: app-secrets
type: Opaque
data:DB_PASSWORD: cGFzc3dvcmQ=  # base64 编码值API_KEY: MTIzNDU2Nzg=
  1. TLS 证书(kubernetes.io/tls
    用途:存储 SSL/TLS 证书和私钥。
    创建命令:
kubectl create secret tls my-tls \--cert=./cert.pem \--key=./key.pem
  1. Docker 镜像仓库认证(kubernetes.io/dockerconfigjson
    用途:拉取私有镜像时认证。
    创建命令:
kubectl create secret docker-registry regcred \--docker-server=registry.example.com \--docker-username=admin \--docker-password=secret
  1. HTTP 基础认证(kubernetes.io/basic-auth
    用途:存储用户名和密码。
    示例:
apiVersion: v1
kind: Secret
metadata:name: web-auth
type: kubernetes.io/basic-auth
stringData:  # 自动编码为 base64username: adminpassword: S@cretP@ss
  1. SSH 认证(kubernetes.io/ssh-auth
    用途:存储 SSH 私钥。
    示例:
kubectl create secret generic ssh-key \--from-file=ssh-privatekey=./id_rsa \--type=kubernetes.io/ssh-auth
  1. ServiceAccount 令牌(自动生成)
    用途:Pod 访问 Kubernetes API。
    特点:自动挂载到 /var/run/secrets/kubernetes.io/serviceaccount

  2. Bootstrap 令牌(节点加入集群)
    用途:新节点加入集群时的临时认证。
    示例:

apiVersion: v1
kind: Secret
metadata:name: bootstrap-token-abc123namespace: kube-system
type: bootstrap.kubernetes.io/token
data:token-id: YWJjMTIztoken-secret: ZGVmNDU2

使用场景对比

场景推荐 Secret 类型理由
数据库密码Opaque灵活存储任意键值对
HTTPS 证书kubernetes.io/tls专用字段保证证书和私钥配对
私有镜像仓库认证kubernetes.io/dockerconfigjson符合 Docker 认证文件规范
Ingress 基础认证kubernetes.io/basic-auth直接与 Ingress 注解集成

最佳实践

  1. 避免明文存储:始终使用 base64 编码或 stringData 字段(自动编码)。
  2. 最小权限原则:通过 RBAC 限制 Secret 的访问权限。
  3. 加密敏感数据:结合 SealedSecrets 或 HashiCorp Vault 增强安全性。

通过合理选择 Secret 类型,可以更安全、高效地管理 Kubernetes 中的敏感信息。

关联知识

【Kubernets】配置类型资源 Etcd, Secret, ConfigMap

http://www.xdnf.cn/news/231571.html

相关文章:

  • 设备安全管理:AI赋能的智能守护者
  • 建筑兔零基础python自学记录88|time库文本进度条(下)11
  • x-cmd install | Tewi - 终端里的 Transmission 掌控者,功能全面的 BT 下载管理工具!
  • 适配 AGP8.5,maven 私服发布报错(七)
  • Rust 学习笔记:枚举与模式匹配
  • HTTP 快速解析
  • php+mysql活动报名学生选课产品预定旅游报名系统网站源码
  • Spyglass:官方Hands-on Training(一)
  • 【容器化】Linux环境Docker在线与离线安装手册
  • vscode中设置eslint保存时自动格式化未生效
  • 网易爆米花 1.8.8 | 免费无广告,支持多网盘聚合和智能刮削技术,提供顶级画质和逼真音效的影视管理应用
  • 【大模型系列篇】Qwen3开源全新一代大语言模型来了,深入思考,更快行动
  • Python 用一等函数重新审视“命令”设计模式
  • CMake解析参数用法示例
  • 【模型量化】量化基础
  • 大连理工大学选修课——机器学习笔记(7):集成学习及随机森林
  • 三生原理与中华文明标识体系的关系?
  • vs2019编译occ7.9.0时,出现fatal error C1060: compiler is out of heap space
  • C++(初阶)(十六)——set
  • YOLO视觉模型可视化训练与推理测试工具
  • 嵌入式中常用的算法介绍
  • (Go Gin)Gin学习笔记(五)会话控制与参数验证:Cookie使用、Sessions使用、结构体验证参数、自定义验证参数
  • 自动驾驶-一位从业两年的独特视角
  • 2025年-redis(p1-p10)
  • Kotlin与Jetpack Compose的详细使用指南
  • 高级java每日一道面试题-2025年4月30日-基础篇[反射篇]-如何防止你的类被通过反射非法实例化?
  • PCI总线数据采集卡 32路多功能异步模拟量信号采集卡
  • 如何在 Go 中实现各种类型的链表?
  • 硬盘分区丢失≠末日!3步逻辑恢复法+物理修复全流程图解
  • 大数据应用开发和项目实战-Seaborn