您的位置:首页 > 游戏 > 手游 > 龙岩市建筑设计院_安徽seo团队_必应搜索引擎国际版_网站建设山东聚搜网络

龙岩市建筑设计院_安徽seo团队_必应搜索引擎国际版_网站建设山东聚搜网络

2025/4/2 16:21:55 来源:https://blog.csdn.net/tuohuang0303/article/details/145515882  浏览:    关键词:龙岩市建筑设计院_安徽seo团队_必应搜索引擎国际版_网站建设山东聚搜网络
龙岩市建筑设计院_安徽seo团队_必应搜索引擎国际版_网站建设山东聚搜网络

一、Secret定义

由于configMap保存的配置参数都是明文,对于一些用户名密码等需要保密内容显得不那么友好,那么Secret就是用来对敏感性内容进行编码,避免明文,更加安全。

二、Secret特性

三、Secret类型

目前dockercfg新版本废弃了,采用了dockerconfigjson这个类型。

1、Opaque

(1)env环境变量方式

我们对用户名和密码分别通过base64进行编码:

[root@k8s-master01 configmap-update]# echo -n "admin" | base64
YWRtaW4=
[root@k8s-master01 configmap-update]# echo -n "123456789" | base64
MTIzNDU2Nzg5

1)创建secret资源对象

vim 7.secret.yaml 

apiVersion: v1
kind: Secret
metadata:name: mysecret
type: Opaque
data:password: MTIzNDU2Nzg5username: YWRtaW4=

[root@k8s-master01 7]# kubectl create -f 7.secret.yaml 
secret/mysecret created
[root@k8s-master01 7]# kubectl get secret
NAME       TYPE     DATA   AGE
mysecret   Opaque   2      11s

查看mysecret:

[root@k8s-master01 7]# kubectl describe secret mysecret
Name:         mysecret
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
username:  5 bytes
password:  9 bytes

[root@k8s-master01 7]# kubectl get secret mysecret -o yaml
apiVersion: v1
data:
  password: MTIzNDU2Nzg5
  username: YWRtaW4=

kind: Secret
metadata:
  creationTimestamp: "2025-02-01T07:31:52Z"
  name: mysecret
  namespace: default
  resourceVersion: "924842"
  uid: 3559a248-d669-4185-9022-9533a7ed38f6
type: Opaque

2)创建Deployment控制器

vim 8.deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: opaque-secret-envname: opaque-secret-env-deploy
spec:replicas: 5selector:matchLabels:app: op-se-env-podtemplate:metadata:labels:app: op-se-env-podspec:containers:- image: nginx:v1name: myapp-continaerports:- containerPort: 80env:- name: TEST_USERvalueFrom:secretKeyRef:name: mysecretkey: username- name: TEST_PASSWORDvalueFrom:secretKeyRef:name: mysecretkey: password

进入某一个opaque-secret-env-deploy容器内部查看环境变量:

从结果显示,所创建deployment资源清单文件指明的环境变量都应用到了pod容器内部,并且将secret对象里面的vaule编码后的值给反编码回了明文内容。

(2)Volumen卷挂载方式

实验1:

vim 9.pod.yaml

apiVersion: v1
kind: Pod
metadata:labels:name: secret-volumename: secret-volume-pod
spec:volumes:- name: volumes12secret:secretName: mysecret #secret下面没有items指明把哪些key-vaule挂载的话,就是把整个scret整个内容挂载containers:- image: nginx:v1name: myapp-containervolumeMounts:- name: volumes12mountPath: "/data"

 创建pod成功后,进入pod查看在/data目录下是否成功挂载。

可以看出,通过secret将其形成卷,然后在pod中挂载该卷到内部目录中。并且在内部目录文件数据里面已经是明文方式了,也就是说pod挂载的时候会将其解码成明文。

实验2:

另外,也可以通过在创建pod的时候在资源清单中,指明读写模式defaultMode:256 ​

我们删除原来的pod,重新创建新的pod。

结果:确实修改文件读写权限。

实验3:

我们验证下在volume挂载项中,指明只要特定参数。在pod中查看是否确实只挂载到了特定参数。

首先修改之前的yaml文件,指定只挂载username参数。并且指定挂载到my-group/my-username文件上面。由于在卷挂载volumenMounts有mountPaht: "/data",所以连起来最终挂载路径为:

/data/my-group/my-username

结果:确实只把username挂载到了pod内部目录上。并把username值写入了文件里面。

注意:选择其中一部分进行挂载,是不支持热更新的。从我们截图上可以看到my-username不是软链接文件。

热更新实验

1)删除当前的pod,使用9.pod.yaml创建pod。

[root@k8s-master01 7]# kubectl create -f 9.pod.yaml 
pod/secret-volume-pod created

[root@k8s-master01 7]# kubectl get pod
NAME                                        READY   STATUS      RESTARTS   AGE

secret-volume-pod                           1/1     Running     0          5s

2)进入pod,查看数据。

3)base64编码新的username

[root@k8s-master01 configmap-update]# echo -n 'flyinlinux' | base64
Zmx5aW5saW51eA==

4)修改secret中的username的值。

 

保存退出。

通过get secret  -o yaml命令查看修改的结果:

我们等待一段时间后,在pod里面查看username的值。

(3)可设置不可更改

同configMap一样,可以在资源清单中通过增加immutable: true的参数设定secret不可更改。

具体就不演示了。

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com