【一起来学kubernetes】21、Secret使用详解

news2025/3/27 21:10:03

Secret 的详细介绍

Secret 是 Kubernetes 中用于存储和管理敏感信息(如密码、令牌、密钥等)的资源对象。Secret的设计目的是为了安全地存储和传输敏感信息,如密码、API密钥、证书等。这些信息通常不应该直接硬编码在配置文件或镜像中,而应通过Secret进行管理和使用。


1. Secret 的核心特性

敏感数据存储:存储密码、API 密钥、TLS 证书、SSH 密钥等。
与 Pod 解耦:Secret 独立于 Pod 定义,避免敏感信息硬编码。
Base64 编码:数据默认以 Base64 编码存储(非加密,需配合集群安全策略)。
类型化支持:支持多种预定义类型(如 Opaquedocker-registrytls 等)。


2. Secret 的常见类型
类型用途
Opaque默认类型,存储任意用户定义的敏感数据(键值对)。
kubernetes.io/dockerconfigjson存储 Docker 镜像仓库的认证信息(用于 docker pull 鉴权)。
kubernetes.io/tls存储 TLS 证书和私钥(用于 HTTPS 服务)。
kubernetes.io/service-account-token服务账号令牌,用于 Pod 与 API Server 的认证。

3. 创建 Secret 的常用方法
(1) 通过 kubectl 命令行创建
# 从文件创建(自动 Base64 编码)
kubectl create secret generic my-secret \
  --from-file=username=./username.txt \
  --from-file=password=./password.txt

# 从字面量创建
kubectl create secret generic my-secret \
  --from-literal=username=admin \
  --from-literal=password='S!B\*d$zDsb='

# 创建 Docker 仓库认证 Secret
kubectl create secret docker-registry regcred \
  --docker-server=registry.example.com \
  --docker-username=admin \
  --docker-password=123456 \
  --docker-email=user@example.com
(2) 通过 YAML 文件定义
apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque  # 默认为 Opaque
data:
  username: YWRtaW4=          # Base64 编码的 "admin"
  password: UyFCX2R6RHNiPQ==  # Base64 编码的 "S!B_d$zDsb="
(3) API

Kubernetes提供了丰富的API接口,可以通过编程方式创建和管理Secret。


4. 在 Pod 中使用 Secret
(1) 作为环境变量
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mycontainer
    image: nginx
    env:
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: my-secret    # Secret 名称
            key: username     # Secret 中的键
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: my-secret
            key: password
(2) 挂载为 Volume 文件
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mycontainer
    image: nginx
    volumeMounts:
      - name: secret-volume
        mountPath: "/etc/secret"
        readOnly: true
  volumes:
  - name: secret-volume
    secret:
      secretName: my-secret   # Secret 名称
      # 可选:指定 keys,默认挂载所有键
      items:
      - key: username
        path: my-username     # 文件名为 my-username
      - key: password
        path: my-password
(3) 命令行参数

敏感数据也可以作为命令行参数传递给容器,但这种方式相对容易在日志或命令行界面中暴露,因此应谨慎使用。


5. Secret 的安全管理

加密存储
• 默认情况下,Secret 数据以 Base64 编码存储在 etcd 中,未加密。
• 启用 etcd 加密 或使用 KMS 提供商 实现静态加密(需配置 Kubernetes 集群)。

RBAC 控制
通过 Role-Based Access Control (RBAC) 限制对 Secret 的访问权限。

最小权限原则
仅向 Pod 和用户授予必要的 Secret 访问权限。


6. 最佳实践
  1. 避免将 Secret 提交到版本控制系统
    使用 CI/CD 工具动态注入 Secret,或通过 Secret 管理工具(如 HashiCorp Vault)。

  2. 限制 Secret 的暴露范围
    • 使用 volumeMount 而非环境变量(环境变量可能被日志记录)。
    • 为不同服务分配不同的 Secret。

  3. 定期轮换 Secret
    更新 Secret 后,重启相关 Pod 以加载新数据(若使用环境变量需重启 Pod,Volume 挂载可能自动更新)。

  4. 使用 TLS Secrets 保护通信
    为 Ingress 或 Service 配置 TLS 证书。


7. 与 ConfigMap 的区别
特性SecretConfigMap
数据类型敏感信息(Base64 编码)非敏感配置(明文)
典型用途密码、令牌、密钥配置文件、命令行参数、环境变量
存储安全建议加密存储无需加密
YAML 字段data(Base64)或 stringData(明文)data(明文)

8. 示例:使用 TLS Secret 配置 HTTPS
apiVersion: v1
kind: Secret
metadata:
  name: tls-secret
type: kubernetes.io/tls
data:
  tls.crt: <Base64 编码的证书>
  tls.key: <Base64 编码的私钥>

# 在 Ingress 中引用
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  tls:
  - hosts:
    - example.com
    secretName: tls-secret
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-service
            port:
              number: 80

通过合理使用 Secret,可以显著提升 Kubernetes 应用的安全性,确保敏感信息在存储、传输和使用过程中的机密性。

9. 拓展

【一起来学kubernetes】19、Pod使用详解

【一起来学kubernetes】11、Deployment使用详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2319147.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PMP-项目运行环境

你好&#xff01;我是 Lydia-穎穎 ♥感谢你的陪伴与支持 ~~~ 欢迎一起探索未知的知识和未来&#xff0c;现在lets go go go!!! 1. 影响项目的要素 项目存在在不同的环境下&#xff0c;环境对于项目的交付产生不同的影响。需了解环境对于项目的影响&#xff0c;采取相应措施应对…

shell 脚本搭建apache

#!/bin/bash # Set Apache version to install ## author: yuan# 检查外网连接 echo "检查外网连接..." ping www.baidu.com -c 3 > /dev/null 2>&1 if [ $? -eq 0 ]; thenecho "外网通讯良好&#xff01;" elseecho "网络连接失败&#x…

Huawei 鲲鹏(ARM/Aarch64)服务器安装KVM虚拟机(非桌面视图)

提出问题 因需要进行ARM架构适配&#xff0c;需要在Huawei Taishan 200k&#xff08;CPU&#xff1a; Kunpeng 920 5231K&#xff09;上&#xff0c;创建几台虚拟机做为开发测试环境。 无奈好久没搞了&#xff0c;看了一下自己多年前写的文章&#xff1a;Huawei 鲲鹏&#xf…

《Python实战进阶》No28: 使用 Paramiko 实现远程服务器管理

No28: 使用 Paramiko 实现远程服务器管理 摘要 在现代开发与运维中&#xff0c;远程服务器管理是必不可少的一环。通过 SSH 协议&#xff0c;我们可以安全地连接到远程服务器并执行各种操作。Python 的 Paramiko 模块是一个强大的工具&#xff0c;能够帮助我们实现自动化任务&…

【Kafka】深入了解Kafka

集群的成员关系 Kafka使用Zookeeper维护集群的成员信息。 每一个broker都有一个唯一的标识&#xff0c;这个标识可以在配置文件中指定&#xff0c;也可以自动生成。当broker在启动时通过创建Zookeeper的临时节点把自己的ID注册到Zookeeper中。broker、控制器和其他一些动态系…

C++特性——RAII、智能指针

RAII 就像new一个需要delete&#xff0c;fopen之后需要fclose&#xff0c;但这样会有隐形问题&#xff08;忘记释放&#xff09;。RAII即用对象把这个过程给包起来&#xff0c;对象构造的时候&#xff0c;new或者fopen&#xff0c;析构的时候delete. 为什么需要智能指针 对于…

CentOS系类普通挂载磁盘挂载命令

检查磁盘是否有分区 lsblk如果 vdb 下面没有分区&#xff08;比如 vdb1&#xff09;&#xff0c;你需要先创建分区。 创建分区&#xff08;如果需要&#xff09; fdisk /dev/vdb然后在 fdisk 交互界面&#xff1a; 输入 n 创建新分区 选择 p 创建主分区 默认分区号和大小 输…

强化学习(赵世钰版)-学习笔记(9.策略梯度法)

本章是课程的导数第二章&#xff0c;旨在讲解策略的函数化形式。 之前的方法&#xff0c;描述一个策略都是用表格的形式&#xff0c;每一行代表一个状态&#xff0c;每一列代表一个行为&#xff0c;表格中的元素对应相关状态下执行相关行为的概率。 函数化的策略表征形式是指&a…

【c++】【STL】unordered_set 底层实现(简略版)

【c】【STL】unordered_set 底层实现&#xff08;简略版&#xff09; ps:这个是我自己看的不保证正确&#xff0c;觉得太长的后面会总结整个调用逻辑 unordered_set 内部实现 template <class _Kty, class _Hasher hash<_Kty>, class _Keyeq equal_to<_Kty>…

网络安全设备配置与管理-实验4-防火墙AAA服务配置

实验4-p118防火墙AAA服务配置 从这个实验开始&#xff0c;每一个实验都是长篇大论&#x1f613; 不过有好兄弟会替我出手 注意&#xff1a;1. gns3.exe必须以管理员身份打开&#xff0c;否则ping不通虚拟机。 win10虚拟机无法做本次实验&#xff0c;必须用学校给的虚拟机。首…

【论文阅读】Contrastive Clustering Learning for Multi-Behavior Recommendation

论文地址&#xff1a;Contrastive Clustering Learning for Multi-Behavior Recommendation | ACM Transactions on Information Systems 摘要 近年来&#xff0c;多行为推荐模型取得了显著成功。然而&#xff0c;许多模型未充分考虑不同行为之间的共性与差异性&#xff0c;以…

基于协同过滤推荐算法的景点票务数据系统(python-计算机毕设)

摘 要 I ABSTRACT II 第 1 章 引言 1 研究背景及意义 1 研究背景 1研究意义 1 国内外研究现状 2 智慧旅游 3旅游大数据 3 研究内容 4本章小结 4 第 2 章 相关技术概述 5 基于内容的推荐算法 5 基于内容的推荐算法原理 5基于内容的推荐算法实现 5 协同过滤推荐算法 6 协同过…

Ubuntu 24 常用命令方法

文章目录 环境说明1、账号管理1.1、启用 root 2、包管理工具 apt & dpkg2.1、apt 简介 & 阿里源配置2.2、dpkg 简介2.3、apt 和 dpkg 两者之间的关系2.4、常用命令 3、启用 ssh 服务4、防火墙5、开启远程登录6、关闭交换分区7、build-essential&#xff08;编译和开发软…

Flask多参数模版使用

需要建立目录templates&#xff1b; 把建好的html文件放到templates目录里面&#xff1b; 约定好参数名字&#xff0c;单个名字可以直接使用&#xff1b;多参数使用字典传递&#xff1b; 样例&#xff1a; from flask import render_template # 模板 (Templates) #Flask 使用…

自然语言处理|深入解析 PEGASUS:从原理到实践

一、引言 在信息爆炸的时代&#xff0c;互联网上的文本数据以极快的速度增长。无论是新闻资讯、学术论文、社交媒体动态&#xff0c;还是各类报告文档&#xff0c;我们每天接触到的文字信息量巨大。如何快速、准确地提取关键内容成为一项重要任务。文本摘要技术通过将长篇文本…

Spring AI Alibaba快速使用

AI 时代&#xff0c;Java 程序员也需要与时俱进&#xff0c;这两个框架必须掌握。 一个是 Spring AI一个是 Spring Alibaba AI。 Spring AI 是一个AI工程领域的应用程序框架&#xff0c;它的目标是将 Spring生态系统的设计原则应用于人工智能领域。 但是&#xff0c; Spring…

socks 协议介绍

SOCKS协议详解 一、基本定义与核心功能 SOCKS&#xff08;Socket Secure&#xff09;是一种网络传输协议&#xff0c;主要用于通过代理服务器转发客户端与目标服务器之间的通信请求。其核心功能包括隐藏用户真实IP地址、穿透防火墙限制以及支持多种网络协议&#xff08;如TCP…

Linux --centos安装显卡驱动

显卡下载页面 https://www.nvidia.com/en-us/drivers/unix/ 随便下载一个即可 安装过程 查看当前设备的显卡信息 lspci | grep -i vga安装gcc相关依赖 yum update -y yum update gcc yum install build-essential yum install gcc-multilibdkms yum groupinstall "Dev…

统信UOS中使用Vscode编程

写在前面&#xff1a;统信UOS其实就是套壳的Linux系统&#xff0c;所以有问题如果搜不到解决方法&#xff0c;可以参考Linux下的解决方法。 1.环境配置 Vscode : 1.85.0 Vscode就直接下载安装就行&#xff0c;然后安装插件&#xff1a;Volar、中文汉化包 node&#xff1a;18…

docker安装向量数据库Milvus及可视化工具 Attu

前置条件 1.安装了docker 2.服务器网络正常&#xff0c;可以连接到容器下载地址 3.服务器磁盘空间正常&#xff0c;docker磁盘占用过大&#xff0c;请参考docker容量占用过大解决办法 一、下载yml文件 可在文章资源下载或者自行下载&#xff1a;下载yml 下载这个单机版本的…