3.8 Secret传递敏感数据

2024-05-16 06:48
文章标签 传递 secret 敏感数据 3.8

本文主要是介绍3.8 Secret传递敏感数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一. Opaque 类型 Secret
    • 1 创建Secret
      • 1.1 通过yaml创建Secret
      • 1.2 通过文件创建Secret
    • 2 利用Secret
      • 2.1 将Secret挂载到Volume中
      • 2.2 将Secret导入到容器环境变量中
  • 二、service account 类型 Secret
  • 三、kubernetes.io/dockerconfigjson 类型secret

前文介绍的都是通过镜像或者ConfigMap向容器传递数据或配置,都是明文进行传递的数据或配置是敏感的,比如账户密码等密钥之类的数据,用Secret加密方式传递可以保证数据安全性。Secret结构与ConfigMap类似,都是键值对形式。Secret有以下3种方式

  • Opaque:使用base64编码格式的信息,但base64编码的信息也可以用base64 --decode解码,安全性相对较弱;
  • service account:用于被 service account 引用,用来访问k8s的API。serviceaccout 创建时 Kubernetes 会默认创建对应的 secret。Pod 如果使用了 serviceaccount,对应的 secret 会自动挂载到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录中;
  • kubernetes.io/dockerconfigjson:用于存储docker registry的认证信息。

一. Opaque 类型 Secret

Opaque类型的Secret,创建secret时传递的value值都是base64编码后的值,传到容器里面的值是base64解码后的值。

1 创建Secret

1.1 通过yaml创建Secret

例如lzj通过base64编码后的值为bHpqCg==,lzj@lzj通过base64编码后的值为bHpqQGx6ago=,下面创建secret.yaml文件

apiVersion: v1
kind: Secret
metadata:name: mysecret
type: Opaque
data:username: bHpqCg==password: bHpqQGx6ago=

创建secret,kubectl apply -f secret.yaml

1.2 通过文件创建Secret

首先创建一个user.conf文件,文件中添加内容:

lzj
lzj@lzj

通过文件创建secret

kubectl create secret generic mysecret2 --from-file=user.conf

查看创建的mysecret2,kubectl get secret mysecret2 -o yaml,发现user.conf内容已经被编码base64进行传递

apiVersion: v1
data:user.conf: bHpqCmx6akBsemoK
kind: Secret
metadata:creationTimestamp: "2020-08-19T15:23:41Z"name: mysecret2namespace: defaultresourceVersion: "8630508"selfLink: /api/v1/namespaces/default/secrets/mysecret2uid: de58bb77-3ce6-4930-a607-61fc6bb1e6d2
type: Opaque

2 利用Secret

2.1 将Secret挂载到Volume中

将上面创建的mysecret2挂载到volume中,容器从volume卷中读取账户密码文件。首先创建pod为例,如下所示:

apiVersion: v1
kind: Pod
metadata:name: secret-pod1
spec:containers:- name: mynginx1image: nginximagePullPolicy: IfNotPresentvolumeMounts:- name: usermountPath: /home/confreadOnly: truevolumes:- name: usersecret:secretName: mysecret2

创建pod ,kubectl apply -f pod1.yaml,然后进容器查看传递的mysecret2,发现传递到容器的user.conf已经被解码

[root@k8s-master01 pod]# kubectl exec -it secret-pod1 -- /bin/sh
# cd /home/conf
# ls
user.conf
# cat user.conf
lzj
lzj@lzj

2.2 将Secret导入到容器环境变量中

将上面创建的mysecret导入到容器环境变量中,创建mysecret用的base64编码的值,导入到容器中后就是解码的值了。首先创建pod的yaml如下

apiVersion: v1
kind: Pod
metadata:name: secret-pod2
spec:containers:- image: busyboxname: buysbox1imagePullPolicy: IfNotPresentcommand: ["/bin/sh", "-c", "sleep 300"]env:- name: USER_NAMEvalueFrom:secretKeyRef:name: mysecretkey: username- name: USER_PASSWORDvalueFrom:secretKeyRef:name: mysecretkey: password

创建该pod,并进入容器查看环境变量,发现已经时解码后的值

[root@k8s-master01 pod]# kubectl apply -f pod2.yaml 
pod/secret-pod2 created[root@k8s-master01 pod]# kubectl exec secret-pod2 -it -- /bin/sh
/ # env
......
USER_PASSWORD=lzj@lzj
USER_NAME=lzj
......

二、service account 类型 Secret

Serice Account类型的Secret会默认挂载到所有容器中,Serice Account用来访问k8s API,由k8s自动创建,并且创建后会自动挂载到/var/run/secrets/kubernetes.io/serviceaccount目录中。对于每一个pod执行describe命令可以查看到挂载的default-token-sk5fk的secret。

[root@k8s-master01 pod]# kubectl describe pod secret-pod2
Name:         secret-pod2
Namespace:    default
......Mounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-sk5fk (ro)
Conditions:Volumes:default-token-sk5fk:Type:        Secret (a volume populated by a Secret)SecretName:  default-token-sk5fkOptional:    false[root@k8s-master01 pod]# kubectl get secret
NAME                  TYPE                                  DATA   AGE
default-token-sk5fk   kubernetes.io/service-account-token   3      82d
mysecret              Opaque                                2      2d2h
mysecret2             Opaque                                1      2d

三、kubernetes.io/dockerconfigjson 类型secret

创建docker仓库用来鉴权的registry,比如创建一个对docker hub的鉴权,在k8s中运行容器时,可以直接从docker hub上pull镜像。达到此功能,需创建一个docker-registry类型的secret,然后指定登录docker hub的用户名、密码、邮箱,然后在创建pod时运用该secret即可。
1、首先创建一个docker-registry类型的secret

kubectl create secret docker-registry myregistry --docker-server=hub.docker.com --docker-username=xxxxxxx --docker-password=xxxxxx --docker-email=xxxxx@163.com

2、创建pod,利用secret从docker hub中拉取镜像

apiVersion: v1
kind: Pod
metadata:name: myhello
spec:containers:- name: myhelloimage: softwarebird/my_helloimagePullSecrets:- name: myregistry

通过yaml创建pod,容器会从docker hub上拉取softwarebird/my_hello最新的镜像。

这篇关于3.8 Secret传递敏感数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/994170

相关文章

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

90、k8s之secret+configMap

一、secret配置管理 配置管理: 加密配置:保存密码,token,其他敏感信息的k8s资源 应用配置:我们需要定制化的给应用进行配置,我们需要把定制好的配置文件同步到pod当中容器 1.1、加密配置: secret: [root@master01 ~]# kubectl get secrets ##查看加密配置[root@master01 ~]# kubectl get se

JAVA基础:值传递和址传递

1 值传递和址传递 值传递 方法调用时,传递的实参是一个基本类型的数据 形参改变,实参不变 public static void doSum(int num1,int num2){}main(){doSum(10,20);int i = 10 ;int j = 20 ;doSum(i,j) ;}   public static void t1(int num){num = 20

六、Maven依赖管理、依赖传递和依赖冲突

1.Maven依赖管理 Maven 依赖管理是 Maven 软件中最重要的功能之一。Maven 的依赖管理能够帮助开发人员自动解决软件包依赖问题,使得开发人员能够轻松地将其他开发人员开发的模块或第三方框架集成到自己的应用程序或模块中,避免出现版本冲突和依赖缺失等问题。 我们通过定义 POM 文件,Maven 能够自动解析项目的依赖关系,并通过 Maven 仓库自动下载和管理依赖,从而避免了手动

【鸿蒙HarmonyOS NEXT】页面之间相互传递参数

【鸿蒙HarmonyOS NEXT】页面之间相互传递参数 一、环境说明二、页面之间相互传参 一、环境说明 DevEco Studio 版本: API版本:以12为主 二、页面之间相互传参 说明: 页面间的导航可以通过页面路由router模块来实现。页面路由模块根据页面url找到目标页面,从而实现跳转。通过页面路由模块,可以使用不同的url访问不同的页面,包括跳转到U

xml数据作为表单参数在网络传递也需要用urlencode处理

xml数据作为表单参数在网络传递也需要用urlencode处理。才能确保数据被正确的传递和解析。需要加深对数据在web上传递的理解。

url参数中带有号,需要用先把url做个解析,使其方便在网络上传递

需求:提交异步通知地址给宝付的投标接口,发现投标成功后,异步通知地址没有被调用 排查:通过和宝付技术对接,发现是203,地址重定向错误。深入排查,发现异步通知返回的地址中&号之后的参数宝付没有收到 结论:表单提交的参数中的异步通知地址中的&号没有做urlencode()处理导致传递丢失参数。 地址参数中带有&号,java在做提交的时候,不能正确传递&,导致地址中&之后的内容丢失。故此需要ur

【大数据Java基础-JAVA 面向对象06】类成员(二)类结构 方法(三) JAVA的值传递机制

java的值传递机制 1.针对于方法内变量的赋值举例: System.out.println("***********基本数据类型:****************"); int m = 10; int n = m; System.out.println("m = " + m + ", n = " + n); n = 20; System.out.println("m = " + m + ",

页面jsp编码utf-8,传递中文参数到java后台出现乱码

1、前台页面jsp的编码是contentType=”text/html; charset=utf-8” 后台编码是gdk,传递中文参数时出现乱码,后台接收到传递的参数时需要进行转换才能解决乱码问题。 new String(this.getParameter("teacherName").getBytes("iso-8859-1"),"utf-8") 2、google浏览器显示正常,但是IE浏

Delphi Dll中传递Pchar类型参数是否需要加var

比如原来有个函数是这样的: procedure GetMsg(ret: Integer; var Msg: string); stdcall; //返回消息 begin   Msg := 'OK'; end; 现在改成这样: procedure GetMsg(ret: Integer; var Msg: PChar); stdcall; //返回消息 begin   StrPCopy(Msg, '