k8s存储介绍(二)Secret

news2025/3/28 10:42:47

Kubernetes(K8s)提供了一种安全的方式来存储和管理敏感信息,如密码、OAuth 令牌和 SSH 密钥,这就是 Secret。使用 Secret 可以避免将敏感数据硬编码到 Pod 规范或容器镜像中,从而提高安全性和可管理性。

1. Secret 的类型

K8s 支持多种类型的 Secret,主要包括:

  • Opaque(不透明类型):默认类型,可用于存储任意数据。

  • kubernetes.io/dockerconfigjson:用于存储 Docker 认证信息。

  • kubernetes.io/service-account-token:用于存储 Kubernetes ServiceAccount 令牌。

  • kubernetes.io/basic-auth:用于存储用户名和密码。

  • kubernetes.io/ssh-auth:用于存储 SSH 密钥。

  • kubernetes.io/tls:用于存储 TLS 证书。

  • bootstrap.kubernetes.io/token:用于集群引导时的 token。

2. 创建 Secret 的方式

K8s 支持三种主要方式创建 Secret:

2.1 使用 kubectl 命令创建 Secret

示例 1:创建 Opaque 类型的 Secret
kubectl create secret generic my-secret \
  --from-literal=username=admin \
  --from-literal=password=secret123

上述命令创建了一个名为 my-secret 的 Secret,其中包含 usernamepassword 两个键值对。

示例 2:从文件创建 Secret
echo -n "admin" > username.txt
echo -n "secret123" > password.txt
kubectl create secret generic my-secret-from-file \
  --from-file=username.txt \
  --from-file=password.txt

2.2 使用 YAML 清单创建 Secret

我们可以使用 YAML 文件定义 Secret,例如:

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
  namespace: default
type: Opaque
data:
  username: YWRtaW4=  # "admin" 的 base64 编码
  password: c2VjcmV0MTIz  # "secret123" 的 base64 编码

然后使用 kubectl apply -f my-secret.yaml 创建该 Secret。

2.3 通过 API 或 SDK 创建 Secret

在编程环境中,我们可以使用 Kubernetes API 或者客户端 SDK(如 Python、Go 语言的 SDK)来创建 Secret。

3. 在 Pod 中使用 Secret

Secret 创建后,可以通过环境变量挂载为文件的方式供 Pod 使用。

3.1 通过环境变量使用 Secret

apiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
spec:
  containers:
  - name: my-container
    image: nginx
    env:
    - name: SECRET_USERNAME
      valueFrom:
        secretKeyRef:
          name: my-secret
          key: username
    - name: SECRET_PASSWORD
      valueFrom:
        secretKeyRef:
          name: my-secret
          key: password

3.2 以文件方式挂载 Secret

apiVersion: v1
kind: Pod
metadata:
  name: secret-volume-pod
spec:
  containers:
  - name: my-container
    image: nginx
    volumeMounts:
    - name: secret-volume
      mountPath: "/etc/secret"
      readOnly: true
  volumes:
  - name: secret-volume
    secret:
      secretName: my-secret

这样,Secret 的数据会被挂载到 /etc/secret 目录下,每个键都会成为该目录下的一个文件,文件内容就是解码后的值。

4. 更新 Secret

Kubernetes 不支持直接更新 Secret,而是需要删除并重新创建。

kubectl delete secret my-secret
kubectl create secret generic my-secret --from-literal=username=newadmin --from-literal=password=newsecret123

或者使用 kubectl apply -f my-secret.yaml 进行更新。

5. 保护 Secret 的最佳实践

  1. 使用 RBAC 控制访问:确保只有需要访问 Secret 的用户和服务账户才有权限。

  2. 避免直接暴露 Secret:尽量通过 Pod 挂载,而不是打印或存储到日志。

  3. 使用加密存储 Secret:启用 Kubernetes etcd 加密,以保护存储在 etcd 中的 Secret。

  4. 定期轮换 Secret:定期更新 Secret 并更新相关的 Pod。

  5. 使用外部 Secret 管理工具:如 HashiCorp Vault、AWS Secrets Manager 或 Azure Key Vault。

6. 结论

Kubernetes Secret 提供了一种安全、灵活的方式来管理敏感信息。通过不同的类型、创建方式和使用方式,可以满足不同的需求,同时遵循最佳实践可以确保 Secret 的安全性。

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

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

相关文章

QT开发(4)--各种方式实现HelloWorld

目录 1. 编辑框实现 2. 按钮实现 前面已经写过通过标签实现的了,所以这里就不写了,通过这两个例子,其他的也是同理 1. 编辑框实现 编辑框分为单行编辑框(QLineEdit)双行编辑框(QTextEdit)&am…

Flutter 输入组件 Radio 详解

1. 引言 在 Flutter 中,Radio 是用于单选的按钮组件,适用于需要用户在多个选项中选择一个的场景,如表单、设置选项等。Radio 通过 value 和 groupValue 进行状态管理,并结合 onChanged 监听选中状态的变化。本文将介绍 Radio 的基…

3.23学习总结

完成了组合Ⅲ,和电话号码的字母组合两道算法题,都是和回溯有关的,很类似。 学习了static的关键字和继承有关知识

力扣刷题-热题100题-第23题(c++、python)

206. 反转链表 - 力扣(LeetCode)https://leetcode.cn/problems/reverse-linked-list/solutions/551596/fan-zhuan-lian-biao-by-leetcode-solution-d1k2/?envTypestudy-plan-v2&envIdtop-100-liked 常规法 记录前一个指针,当前指针&am…

vue3 项目的最新eslint9 + prettier 配置

注意:eslint目前升级到9版本了 在 ESLint v9 中,配置文件已经从 .eslintrc 迁移到了 eslint.config.js 配置的方式和之前的方式不太一样了!!!! 详见自己的语雀文档:5、新版eslint9prettier 配…

SAP GUI Script for C# SAP脚本开发快速指南与默认主题问题

SAP GUI Script for C# 快速指南 SAP 脚本的快速使用与设置. 解决使用SAP脚本执行后,默认打开的SAP是经典主题的问题 1. 解决默认主题问题 如果您使用的是SAP GUI 740,并遇到无法打开对话框的问题,请先将主题设置为经典主题(Classic Theme…

FFmpeg + ‌Qt‌ 简单视频播放器代码

一个基于 ‌FFmpeg 4.x‌ 和 ‌Qt‌ 的简单视频播放器代码示例,实现视频解码和渲染到 Qt 窗口的功能。 1)ffmpeg库界面,视频解码支持软解和硬解方式。 2)QImage/QPixmap显示视频图片。 ‌1. Qt 项目配置(.pro 文件&…

Unity跨平台构建快速回顾

知识点来源:人间自有韬哥在,豆包 目录 一、发布应用程序1. 修改发布必备设置1.1 打开设置面板1.2 修改公司名、游戏项目名、版本号和默认图标1.3 修改 Package Name 和 Minimum API Level 2. 发布应用程序2.1 配置 Build Settings2.2 选择发布选项2.3 构…

【嵌入式学习2】内存管理

## C语言编译过程 预处理:宏定义展开、头文件展开、条件编译,这里并不会检查语法,将#include #define这些头文件内容插入到源码中 gcc -E main.c -o main.i 编译:检查语法,将预处理后文件编译生成汇编文件&#xff…

TDengine又新增一可视化工具 Perspective

概述 Perspective 是一款开源且强大的数据可视化库,由 Prospective.co 开发,运用 WebAssembly 和 Web Workers 技术,在 Web 应用中实现交互式实时数据分析,能在浏览器端提供高性能可视化能力。借助它,开发者可构建实时…

【Linux文件IO】Linux中标准IO的API的描述和基本用法

Linux中标准IO的API的描述和基本用法 一、标准IO相关API1、文件的打开和关闭示例代码: 2、文件的读写示例代码:用标准IO(fread、fwrite)实现文件拷贝(任何文件均可拷贝) 3、文件偏移设置示例代码: 4、fgets fputs fget…

Ant Design Vue Select 选择器 全选 功能

Vue.js的组件库Ant Design Vue Select 选择器没有全选功能&#xff0c;如下图所示&#xff1a; 在项目中&#xff0c;我们自己实现了全选和清空功能&#xff0c;如下所示&#xff1a; 代码如下所示&#xff1a; <!--* 参数配置 - 风力发电 - 曲线图 * 猴王软件学院 - 大强 …

系统与网络安全------网络应用基础(1)

资料整理于网络资料、书本资料、AI&#xff0c;仅供个人学习参考。 TCP/IP协议及配置 概述 TCP/IP协议族 计算机之间进行通信时必须共同遵循的一种通信规定 最广泛使用的通信协议的集合 包括大量Internet应用中的标准协议 支持跨网络架构、跨操作系统平台的数据通信 主机…

JDK 24 发布,新特性解读!

一、版本演进与技术格局新动向 北京时间3月20日&#xff0c;Oracle正式发布Java SE 24。作为继Java 21之后的第三个非LTS版本&#xff0c;其技术革新力度远超预期——共集成24项JEP提案&#xff0c;相当于Java 22&#xff08;12项&#xff09;与Java 23&#xff08;12项&#…

k8s中service概述(二)NodePort

NodePort 是 Kubernetes 中一种用于对外暴露服务的 Service 类型。它通过在集群的每个节点上开放一个静态端口&#xff08;NodePort&#xff09;&#xff0c;使得外部用户可以通过节点的 IP 地址和该端口访问集群内部的服务。以下是关于 NodePort Service 的详细说明&#xff1…

Oracle归档配置及检查

配置归档位置到 USE_DB_RECOVERY_FILE_DEST&#xff0c;并设置存储大小 startup mount; !mkdir /db/archivelog ALTER SYSTEM SET db_recovery_file_dest_size100G SCOPEBOTH; ALTER SYSTEM SET db_recovery_file_dest/db/archivelog SCOPEBOTH; ALTER SYSTEM SET log_archive…

刷机维修进阶教程-----adb禁用错了系统app导致无法开机 如何保数据无损恢复机型

在刷机维修过程中 。我们会遇到一些由于客户使用adb指令来禁用手机app而导致手机无法开机进入系统的故障机型。通常此类问题机型有好几种解决方法。但如果客户需要保数据来恢复机型。其实操作也是很简单的.还有类似误删除应用导致不开机等等如何保数据。 通过博文了解💝💝�…

Vue3 实战:基于 mxGraph 与 WebSocket 的动态流程图构建

本文将详细介绍如何在 Vue3 项目中集成 mxGraph 可视化库&#xff0c;并通过 WebSocket 实现画布元素的实时更新。适合有 Vue 基础的前端开发者学习参考。 一、技术栈准备 Vue3&#xff1a;采用 Composition API 开发mxGraph&#xff1a;JavaScript 流程图库&#xff08;版本 …

Ubuntu AX200 iwlwifi-cc-46.3cfab8da.0.tgz无法下载的解决办法

文章目录 前言一、检查网卡是否被识别二、确认内核模块是否可用1.AX200 wifi 要求内核5.12.检查 iwlwifi.ko 是否存在&#xff1a;3.如果未找到&#xff0c;可能是内核模块未正确生成。尝试安装 linux-modules-extra&#xff1a;4.再次检查 iwlwifi.ko 是否存在&#xff1a;5.确…

蓝桥杯,利用 Vue.js 构建简易任务管理器

在日常开发中&#xff0c;我们经常需要处理各种任务和计划。一个简单且高效的任务管理器可以帮助我们更好地组织和安排时间。今天&#xff0c;我将向大家展示如何使用 Vue.js 构建一个简易的任务管理器。这个项目不仅能够帮助我们更好地理解 Vue.js 的基本语法和功能&#xff0…