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


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: mycontainerimage: nginxenv:- name: SECRET_USERNAMEvalueFrom:secretKeyRef:name: my-secret    # Secret 名称key: username     # Secret 中的键- name: SECRET_PASSWORDvalueFrom:secretKeyRef:name: my-secretkey: password
(2) 挂载为 Volume 文件
apiVersion: v1
kind: Pod
metadata:name: mypod
spec:containers:- name: mycontainerimage: nginxvolumeMounts:- name: secret-volumemountPath: "/etc/secret"readOnly: truevolumes:- name: secret-volumesecret:secretName: my-secret   # Secret 名称# 可选:指定 keys,默认挂载所有键items:- key: usernamepath: my-username     # 文件名为 my-username- key: passwordpath: 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.comsecretName: tls-secretrules:- host: example.comhttp:paths:- path: /pathType: Prefixbackend:service:name: my-serviceport:number: 80

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

9. 拓展

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

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

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

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

相关文章

opencv中stitch图像融合

openv版本: opencv249 vs &#xff1a;2010 qt : 4.85 #include "quanjing.h"#include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <open…

1201. 【高精度练习】蜜蜂路线

题目描述 一只蜜蜂在图5.1-2所示的数字蜂房上爬动&#xff0c;已知它只能从标号小的蜂房爬到标号大的相邻蜂房&#xff0c; 现在问你&#xff1a;蜜蜂从蜂房M开始爬到蜂房N&#xff0c;l≤M 输入 M&#xff0c;N的值。 输出 一个数表示爬行路线种数。 样例输入 1 14 样…

linux下基本命令和扩展命令(安装和登录命令、文件处理命令、系统管理相关命令、网络操作命令、系统安全相关命令、其他命令)欢迎补充噢

基本命令 ls: 列出目录内容 ls&#xff1a;列出当前目录内容ls -l&#xff1a;以长格式列出&#xff08;显示详细信息&#xff09;ls -a&#xff1a;显示隐藏文件ls -lh&#xff1a;以易读格式显示文件大小 pwd: 显示当前工作目录 pwd&#xff1a;显示当前目录的绝对路径 cd:…

《C++11 基于CAS无锁操作的atomic原子类型》

count; count--; 我们知道&#xff0c;/--操作并不是原子性的&#xff0c;其实对应三条汇编指令来完成的。 读取&#xff1a;从内存中把变量的值读取到寄存器修改&#xff1a;在寄存器里将变量的值1/-1写入&#xff1a;把修改后的值写入到内存 在单线程环境下&#xff0c;这…

C++常用多线程模式

文章目录 1. Fork - Join模式2. Producer - Consumer模式3. Readers - Writers模式4. Work Thread模式5. Actor模式6、 Pipeline模式概述应用场景C实现示例代码解释 1. Fork - Join模式 原理&#xff1a;将一个大任务分解为多个子任务&#xff0c;这些子任务在不同的线程中并行…

【时时三省】(C语言基础)习题2 scanf函数

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 用下面的scanf函数输入数据&#xff0c;使a 3&#xff0c;b 7&#xff0c;x 8.5&#xff0c;y 71.82&#xff0c;c1 A&#xff0c;c2 x在键盘上应如何输入? 分析第一个 scanf 函数&…

微信小程序计算属性与监听器:miniprogram-computed

小程序框架没有提供计算属性相关的 api &#xff0c;但是官方为开发者提供了拓展工具库 miniprogram-computed。 该工具库提供了两个功能&#xff1a; 计算属性 computed监听器 watch 一、安装 miniprogram-computed 在项目的根目录下&#xff0c;使用如下命令&#xff0c;…

SOFAStack-00-sofa 技术栈概览

SOFAStack 前言 大家好&#xff0c;我是老马。 sofastack 其实出来很久了&#xff0c;第一次应该是在 2022 年左右开始关注&#xff0c;但是一直没有深入研究。 最近想学习一下 SOFA 对于生态的设计和思考。 &#x1f31f; 核心项目 ⚙️ SOFABoot GitHub: sofastack/sofa…

企业模板(QiMoban)是一个专注于企业官网搭建的高效平台

企业模板(QiMoban.com )是一个专注于为企业提供高效、低成本网站建设解决方案的平台&#xff0c;主要面向中小企业和创业者。其核心优势在于帮助用户快速搭建企业官网&#xff0c;提升品牌形象并拓展业务渠道。以下是关于企业模板(QiMoban.com )的详细分析&#xff1a; 适用场…

Oracle 数据库安全评估(DBSAT)简明过程

下载DBSAT 从这里下载。 实际是从MOS中下载&#xff0c;即&#xff1a;Oracle Database Security Assessment Tool (DBSAT) (Doc ID 2138254.1)。 最新版本为3.1.0 (July 2024)&#xff0c;名为dbsat.zip&#xff0c;近45MB。 $ ls -lh dbsat.zip -rw-rw-r-- 1 oracle oins…

【Linux 维测专栏 1 -- Hung Task 分析与验证】

文章目录 Linux Hung Task 简介1. Hung Task 概述2. D 状态与 Hung Task3. Hung Task 的工作原理4. Hung Task 的配置5. Hung Task 的典型输出6. Hung Task 的应用场景7. kernel 配置7.1 编译选项7.2 参数控制7.3 验证方法4. 扩展接口 8. 注意事项 Linux Hung Task 简介 1. Hu…

GCC 预定义宏:解锁编译器的隐藏信息

GCC 预定义宏&#xff1a;解锁编译器的隐藏信息 在 GCC 编译器中&#xff0c;有许多内置的预定义宏&#xff0c;它们可以提供编译环境的信息&#xff0c;如文件名、行号、时间、版本等。这些宏在调试、日志记录、条件编译等场景中非常有用。本文将介绍常见的 GCC 预定义宏&…

公链开发费用及其构成内容详析

在区块链技术迅速发展的今天&#xff0c;公链&#xff08;Public Blockchain&#xff09;作为去中心化、不可篡改、高安全性的重要应用之一&#xff0c;在金融、供应链、游戏等多个领域得到了广泛应用。然而&#xff0c;开发一条公链并非易事&#xff0c;它不仅需要高度专业技能…

Java求101-200之间有多少素数

Java学习笔记 今天看教程看到了这个题&#xff0c;对于一名打过算法竞赛的选手还是很简单的&#xff0c;但由于之前是c组的&#xff0c;所以用java写一下&#xff0c;练一下手。 代码&#xff1a; package com.itheima.hello;public class Test1 {public static void main(S…

DM 达梦上的日志挖掘 DBMS_LOGMNR

适用场景 在 DM 中&#xff0c;用户可以使用 DBMS_LOGMNR 包对归档日志进行挖掘&#xff0c;重构出 DDL 和 DML 等操作&#xff0c;并通过获取的信息进行更深入的分析&#xff1b;同样&#xff0c;可以对归档日志文件进行恢复被误操作的数据&#xff0c;并进行故障跟踪&#x…

JavaWeb之WebSocket

目录 一、 websocket 概念二、WebSocket原理三、WebSocket特点四、WebSocket应用场景五、Websocket基本使用1、创建Websocket对象2、Websocket事件3、Websocket方法4、前端服务程序 六、聊天室案例1、Tomcat版本&#xff1a;8.0.442、Maven 依赖&#xff1a;3、前端代码4、后端…

Unity Shader编程】之透明物体渲染

以下是针对您提出的关于 Unity Shader 渲染 Pass 的查看方法、多个 Pass 的影响、Pass 的含义&#xff0c;以及 Unity 渲染物体的流程和处理多个透明/半透明/不透明物体的详细解答。 1. Unity Shader 渲染 Pass 的查看方法 查看 Pass 的方法 通过 Shader 代码&#xff1a; 打开…

字符指针的三道例题+算法改进

目录 一.杨氏矩阵 1.初级 2.想把下标带回来 二.字符串左旋 算法改进 三.判断是否为字符串旋转结果 算法改进 四. 3个字符函数 1.strcat 2.strncat 3.strstr 一.杨氏矩阵 数字矩阵&#xff0c;每行从左到右递增&#xff0c;每列从上到下递增&#xff0c;编写程序在矩…

VSCode中搜索插件显示“提取扩展时出错。Failed to fetch”问题解决!

大致的问题如下&#xff0c;在VSCode的插件商店搜索插件时提示如下&#xff1a; 导致的情况有以下几点&#xff1a; 1、代理问题&#xff0c;如果是代理引起的&#xff0c;可以继续使用代理后也能搜索和安装插件。 2、还有可能是你的所连接的网络设置了防火墙&#xff0c;比较…

双指针(2)—三数之和

文章目录 题目解析解法&#xff08;排序双指针&#xff09;&#xff1a;哈希解法附加Java代码&#xff1a; 力扣题目&#xff1a;三数之和 题目解析 解法&#xff08;排序双指针&#xff09;&#xff1a; **算法思路&#xff1a;** 本题与两数之和类似&#xff0c;是⾮常经典的…