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

K8S-Secret资源对象

目录

一、Secret概述

二、Secret 类型

kubectl 创建类型

三、Secret 使用

Opaque 类型 Secret 的使用

创建

yaml


一、Secret概述

k8s secrets用于存储和管理一些敏感数据,比如密码,token,密钥等敏感信息。它把 Pod 想要访问的加密数据存放到 Etcd 中。然后用户就可以通过在 Pod 的容器里挂载 Volume 的方式或者环境变量的方式访问到这些 Secret 里保存的信息了。

Secret 类似于 ConfigMap,但专门用于保存机密数据。

二、Secret 类型

内置类型用法
Opaque用户定义的任意数据
kubernetes.io/service-account-tokensymotion服务账号令牌
kubernetes.io/dockercfg~/.dockercfg 文件的序列化形式
kubernetes.io/dockerconfigjson~/.docker/config.json 文件的序列化形式
kubernetes.io/basic-auth用于基本身份认证的凭据
kubernetes.io/ssh-auth用于 SSH 身份认证的凭据
kubernetes.io/tls用于 TLS 客户端或者服务器端的数据
bootstrap.kubernetes.io/token启动引导令牌数据

kubectl 创建类型

[root@k8s-master01 ~]# kubectl create secret dotfile -h
Create a secret using specified subcommand.
​
Available Commands:docker-registry   创建一个给 Docker registry 使用的 secretgeneric           Create a secret from a local file, directory, or literal valuetls               创建一个 TLS secret
​
Usage:kubectl create secret [flags] [options]
​
Use "kubectl <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands).
  • docker-registry: 连接私有镜像仓库的凭证(据)

  • generic: 常见 secret, 该类型 secret 与 configmap使用相同

  • tls: 提供 tls 证书, 在 service mesh 中自动挂载

三、Secret 使用

使用场景:

  • 设置容器的环境变量

  • 向 Pod 提供 SSH 密钥或密码等凭据

  • 允许 kubelet 从私有镜像仓库中拉取镜像

Opaque 类型 Secret 的使用

创建
[root@k8s-master ~]# kubectl get secrets -n calico-apiserver 
NAME                     TYPE     DATA   AGE
calico-apiserver-certs   Opaque   2      7d[root@k8s-master ~]# kubectl describe secrets -n calico-apiserver 
Name:         calico-apiserver-certs
Namespace:    calico-apiserver
Labels:       <none>
Annotations:  <none>Type:  OpaqueData
====
tls.crt:  2530 bytes
tls.key:  1679 bytes[root@k8s-master ~]# kubectl create secret 
docker-registry  (创建一个给 Docker registry 使用的 Secret)
generic          (Create a secret from a local file, directory, or literal value)
tls              (创建一个 TLS secret)#它的选项跟configmap是一样的
[root@k8s-master ~]# kubectl create secret generic s1 --from-
--from-env-file  (Specify the path to a file to read lines of key=val pairs to create a secret.)
--from-file      (Key files can be specified using their file path, in which case a default name will b…)
--from-literal   (Specify a key and literal value to insert in secret (i.e. mykey=somevalue))#创建的secret的名字可以自定义,这里定义名称为s1
[root@k8s-master ~]# kubectl create secret generic s1 --from-literal k1=v1
secret/s1 created[root@k8s-master ~]# kubectl describe secrets s1
Name:         s1
Namespace:    default
Labels:       <none>
Annotations:  <none>Type:  OpaqueData    #数据
====
k1:  2 bytes  #所占字节数#中文字符,一个字符等于三个字节
[root@k8s-master ~]# kubectl create secret generic s2 --from-literal k2=超哥
secret/s2 created[root@k8s-master ~]# kubectl describe secrets s2
Name:         s2
Namespace:    default
Labels:       <none>
Annotations:  <none>Type:  OpaqueData
====
k2:  6 bytes

明文加密,密文解密简单演示

secret它是可以自动解密的

在创建过程它解密中不可以使用明文,会报错,所以要用密文

#加密
[root@k8s-master ~]# echo 1234 | base64
MTIzNAo=#解密
[root@k8s-master ~]# echo MTIzNAo= | base64 -d
1234#像这种明文解密是会报错的
#所以不能使用明文加密
[root@k8s-master ~]# echo 12345 | base64 -d
�m�64: 无效的输入#查看secret中的s1详细信息
[root@k8s-master ~]# kubectl get secrets s1 -o yaml
apiVersion: v1
data:k1: djE=    #把k1加密为这个
kind: Secret
metadata:creationTimestamp: "2025-08-18T16:23:37Z"name: s1namespace: defaultresourceVersion: "836505"uid: 7f0863fc-82a2-409e-abf6-6de72a20c81b
type: Opaque[root@k8s-master ~]# echo djE= | base64 -d
v1[root@k8s-master ~]#     #之前我们定义了k1等于v1,这里base64解密出来后就是v1
yaml

以 yaml 方式创建需要你提前进行 base64

secret它是可以自动解密的

在创建过程它解密中不可以使用明文,会报错,所以要用密文

#yaml文件
以 yaml 方式创建需要你提前进行 base64[root@k8s-master01 ~]# echo -n "admin" | base64
YWRtaW4=
[root@k8s-master01 ~]# echo -n "123456" | base64
MTIzNDU2#创建yaml文件,添加下面这段就行 apiVersion: v1
kind: Secret
metadata:name: secret-volumenamespace: default
type: Opaque
data:password: MTIzNDU2username: YWRtaW4=
immutable: true

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

相关文章:

  • 学习数组①
  • 1.Shell脚本修炼手册之---为什么要学Shell编程?
  • 【MySQL的卸载】
  • 读《精益数据分析》:规模化(Scale)—— 复制成功,进军新市场
  • PiscCode集成Hand Landmarker:实现高精度手部姿态检测与分析
  • JVM面试精选 20 题(终)
  • 【北京迅为】iTOP-4412精英版使用手册-第三十二章 网络通信-TCP套字节
  • 30.Linux cobbler自动化部署
  • 基于51单片机自动浇花1602液晶显示设计
  • STM32_0001 KEILMDK V5.36 编译一个STM32F103C8T6说core_cm3.h文件找不到以及编译器版本不匹配的解决办法
  • 多模型创意视频生成平台
  • 设计模式1-单例模式
  • PyTorch如何修改模型(魔改)?/替换模型,一般除了注意输入输出一致,还有其他要修改的吗?
  • 【Python】新手入门:python面向对象编程的三大特性是什么?python继承、封装、多态的特性都有哪些?
  • IT运维背锅权限泄露?集中式管控如何化解风险?
  • postman+newman+jenkins接口自动化
  • 次短路P2865 [USACO06NOV] Roadblocks G题解
  • cobbler
  • 换根DP(P3478 [POI 2008] STA-StationP3574 [POI 2014] FAR-FarmCraft)
  • Linux I/O 多路复用实战:深入剖析 Select 与 Poll
  • 在 Ubuntu Linux LTS 上安装 SimpleScreenRecorder 以录制屏幕
  • GPT-5 上线风波深度复盘:从口碑两极到策略调整,OpenAI 的变与不变
  • Jupyter Notebook 的终极进化:VS Code vs PyCharm,数据科学的IDE王者之争
  • 全球首款 8K 全景无人机影翎 A1 发布解读:航拍进入“先飞行后取景”时代
  • 扩展卡尔曼滤波(EKF)的一阶泰勒展开(雅可比矩阵)详解
  • 8 月中 汇报下近半个月都在做些什么
  • E10自定义统一认证+人员同步
  • C++高频知识点(三十)
  • IPSec安全概述
  • 【运维进阶】Linux 正则表达式