12-敏感的资料怎么存在K8S-Secret

news/2024/5/4 2:30:44/文章来源:https://blog.csdn.net/guofangsky/article/details/127521007

 

12-敏感的资料怎么存在K8S-Secret

前言

今天的学习笔记将介绍Kubernetes另一个组件secret。secret协助开发者将一些敏感信息,像是数据库账密、访问其它server的access token、ssh key,用非明文的方式(opaque)存放在Kubernetes中。今天的学习笔记内容如下:

  • 什么是secret

  • 实操:Kubernetes中如何创建secret对象

  • 实操:如何挂载secret对象到pod中

小提醒:今天的源码可以在demo-secret中找到。

什么是secret

正如前言提及的,secret是Kubernetes提供给开发者一种存放敏感信息的方式。Kubernetes本身也使用相同的机制(secret mechanism)存放access token,限制API的存取权限,确保不会有外部服务随意操作Kubernetes API。

在Kubernetes存取敏感资料(sensitive data)有以下几种常见的使用方式:

  • 将secret当成环境变量(environment variable)使用;

  • 将secret file挂载(mount)在pod某个文件路径下使用;

  • 将这些sensitive data统一存放在某一个docker image中,并将这个image存放在私有的image registry中,通过image pull下载到Kubernetes cluster中,让其它pod存取。

今天实操的部分,将针对上述提到的前两点进行介绍。

实操:Kubernetes中如何创建secret对象

在Kubernetes中,创建secret对象又一下几种方法:

  1. 从文件导入sensitive data

    我们可以先将sensitive data存在某一个文件中,通过kubectl create命令产生一个secret对象。

    以账号密码为例,我们先将账号、密码分别存入两个不同的文件,

    $ echo -n "root" > ./username.txt
    $ echo -n "rootpass" > ./password.txt

    接着使用kubectl create secret generic命令创建一个secret对象,

    $ kubectl create secret generic demo-secret-from-file \
    --from-file=./username.txt \
    --from-file=./password.txt
    secret "demo-secret-from-file" created

    用kubectl describe命令查看demo-secret-from-file对象,

     

    若用kubectl get查看所有的secret,

    $ kubectl get secrets
    NAME                    TYPE                                  DATA      AGE
    default-token-cljjb     kubernetes.io/service-account-token   3         4m
    demo-secret-from-file   Opaque                                2         3m

    会发现除了刚刚创建好的demo-secret-from-file,还有一组default-token-cljjb对象,这是Kubernetes内部帮我们创建好的对象。里面存放着一个token,开发者可以通过这组access token来操控Kubernetes API。

  2. 从命令输入sensitive data

    我们也可以通过kubectl create命令搭配--from-literal直接在命令后面输入信息,以上述的账密为例,

    $ kubectl create secret generic demo-secret-from-literal \
    > --from-literal=username=root \
    > --from-literal=password=rootpass
    ​
    secret "hello-secret-literal" created

    用kubectl describe查看demo-secret-from-literal详情,

     

  3. 通过yaml创建secret对象

    我们也可以通过配置文件创建一个secret对象。

    首先,需将账号密码用 base64 编码,以username=root,password=rootpaas为例,

    $ echo -n "root" | base64
    cm9vdA==
    ​
    $ echo -n "rootpass" | base64
    cm9vdHBhc3M=

    并将编码过的资料写入my-secret.yaml中,

    apiVersion: v1
    kind: Secret
    metadata:name: demo-secret-from-yaml
    type: Opaque
    data:username: cm9vdA==password: cm9vdHBhc3M=

    通过kubectl create创建一个新对象,

    $ kubectl create -f ./my-secret.yaml
    secret "demo-secret-from-yaml" created

    最后可以使用kubectl get secret查看今天创建的3个secret对象,

    $ kubectl get secrets
    NAME                TYPE                            DATA    AGE
    default-token-cljjb kubernetes.io/service-account-token 3   8m
    demo-secret-from-file           Opaque  2   7m
    demo-secret-from-literal        Opaque  2   2m
    demo-secret-from-yaml           Opaque  2   16s

    下个章节将通过这些我们创建好的secret对象,介绍如何将这些secret对象挂载到pod使用。

    如何挂载secret对象到pod中

    1. 将secret当成环境变量(environment variable)使用

      以my-pod.yaml为例,

      apiVersion: v1
      kind: Pod
      metadata:name: my-podlabels:app: webserver
      spec:containers:- name: demo-podimage: zxcvbnius/docker-demoports:- containerPort: 3000env:- name: SECRET_USERNAMEvalueFrom:secretKeyRef:name: demo-secret-from-yamlkey: username- name: SECRET_PASSWORDvalueFrom:secretKeyRef:name: demo-secret-from-yamlkey: password

      在my-pod.yaml中,我们设置env会从指定的secret对象找出对应的值。值得一提的是,如果该secret对象是从--from-file创建,那么Kubernetes会把文件名称当成key、文件内容当成value。

      使用kubectl create创建my-pod,命令如下,

      $ kubectl create -f ./my-pod.yaml
      pod "my-pod" created

      当my-pod创建完毕后,

      $ kubectl get pods my-pod
      NAME	READY	STATUS	RESTARTS	AGE
      my-pod	1/1		Running	0			5m

      我们可以通过kubectl exec进入到my-pod中,

      $ kubectl exec -it my-pod -- /bin/bash

      查看SECRET_USERNAME/SECRET_PASSWORD,如我们在demo-secret-from-yaml设置一致,

      $ kubectl exec -it my-pod -- /bin/bash
      root@my-pod:/app#echo $SECRET_USERNAME
      root
      root@my-pod:/app#echo $SECRET_PASSWORD
      rootpaas
    2. 将secret file挂载(mount)在pod某个文件路径下使用

      我们也可以将secret挂载到,pod底下的某个路径文件,以my-pod-with-mounting-secret.yaml为例,

      apiVersion: v1
      kind: Pod
      metadata:name: my-pod-with-mounting-secretlabels:app: webserver
      spec:containers:- name: demo-podimage: zxcvbnius/docker-demoports:- containerPort: 3000volumeMounts:- name: secret-volumemountPath: /etc/credsreadOnly: truevolumes:- name: secret-volumesecret:secretName: demo-secret-from-yaml

      如同创建my-pod.yaml一样,使用kubectl create命令创建一个新的pod对象,

      $ kubectl create -f ./my-pod-with-mounting-secret.yaml
      pod "my-pod-with-mounting-secret" created

      通过kubectl exec进入my-pod-with-mounting-secret这个对象,且可以在我们指定挂载的/etc/creds找到存在 demo-secret-from-yaml中的材料,

      $ kubectl exec -it my-pod-with-mounting-secret -- /bin/bash
      root@my-pod-with-mounting-secret:/app# ls /etc/creds
      root@my-pod-with-mounting-secret:/app# echo "$(cat /etc/creds/username)"
      root@my-pod-with-mounting-secret:/app# echo "$(cat /etc/creds/password)"

      通过以上两种方式,我们便能再pod中存取secret对象。

      总结

      当我们有些敏感信息需要传入Kubernetes时,使用secret是个不错的选择。然而,需要留意的是,一旦建立secret对象,其他人也可以在Kubernetes cluster上存取secret中的敏感信息。因此,我们需要搭配 Service Account 来限制其他人的存取权限,在之后28-如何在K8S管理不同的项目-namespace也会与大家分享如何设置。

      Q&A

      依然欢迎大家给予建议与回复, 如果能够一键三连 点个赞给些鼓励也是很开心的 :)

      参考链接

      • Kubernetes官网

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

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

相关文章

【数据结构与算法分析】0基础带你学数据结构与算法分析06--树(TREE)

目录 前言 树的属性 树的实现 树的遍历与应用 深度有限遍历 (DFS) 广度优先遍历 (BFS) Not all roots are buried down in the ground, some are at the top of a tree. — Jinvirle 前言 Tree 是一些结点的集合,这个集合可以是空集;若不是空集…

中国锚杆行业竞争格局及投资风险分析报告

锚杆的概念 锚杆(又称土锚杆、土钉)是在天然土层侧壁钻孔,放置拉杆,注浆锚固而成。根据所用材料,拉杆可分为粗钢筋、高强度钢丝束、钢绞线等。通过计算确定了侧墙上锚杆的截面积、层数、间距和长度。钻孔直径应由设计确定。常用的孔道灌浆有水…

【QT + OsgEarth】(四)加载国界线矢量图

效果图 实现过程 获取国界线矢量图在.earth文件中加载矢量图文件在Qt程序中获取图层节点并控制参数 加载矢量图文件 < image > 标签定义要栅格化的shp文件 driver&#xff1a;使用agglite&#xff0c;将矢量文件栅格成为栅格文件< features > 子标签读取shp文件…

亿可控_第3章 指标数据持久化与设备详情展示

亿可控_第3章 指标数据持久化与设备详情展示 文章目录亿可控_第3章 指标数据持久化与设备详情展示第3章 指标数据持久化与设备详情展示学习目标1. InfluxDB入门及介绍1.1 InfluxDB简介1.2 InfluxDB相关概念1.3 InfluxDB的基本操作1.3.1 InfluxDB数据库操作1.3.2 InfluxDB数据表…

SANGFOR深信服短信插件

设置说明 第一步&#xff1a;先配置短信通知服务器&#xff08;以下以HTTP为例&#xff09;。 步骤1、设置短信通知服务器&#xff0c;在[系统管理/系统配置/高级配置/通知设置]&#xff0c;点击<新增短信通知服务器>&#xff0c;勾选启用&#xff0c;可启用短信通知服…

mdio bcm5482访问

查看硬件原理图&#xff0c;5482通过mdio访问自己的寄存器&#xff0c;M4通过cpld对5482进行初始化操作(复位/解复位&#xff09; 可以看到bcm5482的MDC和MDIO用的是port P 的pin4和pin5,所以基地址为GPIO_PORTP_BASE. 对应的分别是引脚4和引脚5&#xff0c;所以由此可以封装出…

SHEIN算法工程师面试题7道|含解析

8本电子书免费送给大家&#xff0c;见文末。 1、数据处理的常用方法有哪些&#xff1f; 对于离群点 当作缺失值进行处理删掉离群点所在的样本实用统计值进行填充 对于缺失值 可以用均值或均位数进行填充可以用特定值&#xff0c;如-1可以用np.nan表示 对于类别特征 编码方…

SPI示例学习

Service Provider Interface 它是从Java 6开始引入的&#xff0c;是一种基于ClassLoader来发现并加载服务的机制。 服务发现机制&#xff1a;通过在ClassPath路径下的META-INFO/services文件夹中查找文件&#xff0c;并自动加载文件里所定义的类。 SPI机制可以很好的解决不同…

到了2023年,PMP项目管理师证书含金量会如何?考试难度大么?

先介绍一下PMP PMP考试是由PMI(美国项目管理协会Project Management Institute)组织和出题,严格评估项目管理人员知识技能是否具有高品质的资格认证考试。1999年&#xff0c;PMP考试在所有认证考试中第一个获得ISO9001国际质量认证,从而成为全球最权威的认证考试之一。 pmp考…

Oracle技术分享 数据库序列间断场景

文档课题&#xff1a;模拟数据库序列间断场景. 1、概念 Gaps insequence values can occur when: a、Arollback occurs 应用出现回滚&#xff0c;但序列不会回滚 b、Thesystem crashes c、Asequence is used in another table 2、实际操作2.1、系统crash SQL>selec…

云原生时代下 K8s CGroup/CRI 的优劣势

目录前言一、CGroup1.1 基本概念1.2 cgroupfs 驱动1.2.1 基本概念1.2.2 什么是 cgroup v21.2.3 cgroup v2 使用要求1.3 systemd cgroup 驱动1.3.1 基本概念1.3.2 kubelet 设置 cgroup 驱动二、CRI2.1 Containerd2.1.1 基本概念2.1.2 配置 CGroup 驱动2.2 CRI-O2.2.1 基本概念2.…

【LeetCode每日一题】【单调队列】2022-10-26 862. 和至少为K的最短子数组 Java实现

文章目录题目链接题目思路前缀和暴力法优化一优化二另一种写法题目链接 https://leetcode.cn/problems/shortest-subarray-with-sum-at-least-k/ 题目 思路 https://leetcode.cn/problems/shortest-subarray-with-sum-at-least-k/solution/liang-zhang-tu-miao-dong-dan-dia…

【电子通识】芯片资料(数据手册/规格书)查询常用网站和方法

目录 1.AlldataSheet 网站&#xff08;建议使用&#xff09; 2.ICpdf 网站 3.CIC中国IC网 网站 4.datasheet&#xff08;不建议使用&#xff09; 5.半导小芯 &#xff08;建议使用&#xff09; 6.立创商城 &#xff08;建议使用&#xff09; 在做硬件的芯片选型、产品维修…

MySQL体系结构

MySQL体系结构初识MySQLOLTPOLAPSQL数据库术语MySQL体系结构连接池缓冲组件执行select语句的过程总结后言初识MySQL 按照数据结构来组织、存储和管理数据的仓库&#xff1b;是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。 MySQL是关系型数据库&…

从位运算理解位图

位图是一种较难理解的数据结构&#xff0c;想了解位图&#xff0c;我需要先温习一下基础&#xff0c;复习下一些二进制的知识 位运算 1个字节8个二进制位 二进制每逢二进一&#xff0c;下面是二进制对应的十进制转换方式 二进制十进制0000 00012^010000 00102^120000 00112…

Shell编程案例

Shell编程案例 文章目录Shell编程案例熟悉shell编程的有关机制&#xff0c;如标准流。学习Linux环境变量设置文件及其内容/etc/profile/etc/bashrc/etc/environment~/.profile~/.bashrc熟悉编程有关基础命令技巧和规则sed掌握shell 程序执行的三种基本方式使用for循环语句,完成…

万字长文的CSS与JavaScript简易学习

近期学习web笔记&#xff0c;可供参考 目录 css: css导入方式&#xff1a; css选择器&#xff1a; javascript: javascript介绍&#xff1a; js引入方式&#xff1a; js书写语法&#xff1a; js变量&#xff1a; 5种原始类型&#xff1a; 运算符&#xff1a; JavaScr…

Spring Aop的学习(一):Spring Aop的简单入门

1. 什么是AOP AOP(Aspect Oriented Programming):面向切面编程,是OOP(面向对象编程)的一个延续,其和OOP一样,也是一种编程思想。不过AOP是一种横向开发模式。 2. AOP的作用及应用场景作用 AOP的主要作用就是减少代码量,提高代码的可重用性,有利于未来的可操作性与可维护性…

2022-2023-1 20221424《计算机基础与程序设计》第9周学习总结

2022-2023-1 20221424《计算机基础与程序设计》第9周学习总结 作业信息这个作业属于哪个课程 2022-2023-1-计算机基础与程序设计这个作业要求在哪里 2022-2023-1计算机基础与程序设计第一周作业这个作业的目标 操作系统责任,内存与进程管理,分时系统,CPU调度,文件、文件系统…

《JavaSE-第十五章》之文件(二)

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页&#xff1a;KC老衲爱尼姑的博客主页 博主的github&#xff0c;平常所写代码皆在于此 刷题求职神器 共勉&#xff1a;talk is cheap, show me the code 作者是爪哇岛的新手&#xff0c;水…