主机论坛_虚拟主机_美国主机_美国虚拟主机_云主机技术_全球主机交流聚集地—Web Hosting Talk 中文站

找回密码
立即注册
发新帖

0

收听

5

听众

1015

主题
发表于 2022-6-27 15:33:13 | 查看: 26| 回复: 0
KubernetesSecret对象怎么用?针对这个问题,今天小编总结这篇有关Secret使用方法的文章,可供感兴趣的小伙伴们参考借鉴,希望对大家有所帮助。
Secretsecret也是k8s中的一个资源对象,主要用于保存轻量的敏感信息,比如数据库用户名和密码,令牌,认证密钥等。
我们可以将这类敏感信息放在secret对象中,如果把它们暴露到镜像或者pod spec中稍显不妥,将其放在secret对象中可以更好地控制及使用,并降低意外暴露的风险。
Secret可以使用volume或者环境变量的方式来使用这些轻量级数据。Secret有三种类型:
Service Account:用来访问kubernetes API,由k8s自动创建,并且会自动挂载到pod/run/secrets/kubernetes.io/serviceaccount 目录中。Opaquebase64编码格式的Secret,用来存储密码,密钥等。kubernetes.io/dockerconfigjson: 用来存储私有docker registry的认证信息。secret可以通过命令行或YAML文件来创建,假设我们需要存放在secret对象中的信息:
1, 用户名:root
2,密码:123456
1,创建Secret创建Secret有以下四种方法:
1.1 通过--from-literal(以文字的方法创建)
[root@master ~]# kubectl create secret generic mysecret --from-literal=username=root --from-literal=password=123456secret/mysecret created//查看创建的secret

//查看该secret的详细信息:

特点:每个--from-literal只能对应一条信息。比较繁琐。
1.2 通过--from-file(以文件的方式创建)
[root@master ~]# echo root > username[root@master ~]# echo 123456 > password[root@master ~]# kubectl create secret generic newsecret --from-file=username --from-file=passwordsecret/newsecret created//查看创建的secret
[root@master ~]# kubectl get secrets | grep newsecretnewsecret       Opaque                2   64s特点:同样是每个文件对应一条信息。每个文件中只能保存一个,为了保证机密性,导入后有必要将本地的文件删除掉。
1.3 通过--from-env-file(以变量的方式创建)
[root@master ~]# cat > env.txt <<EOF> username=root> password=123456> EOF[root@master ~]# kubectl create secret generic env-secret --from-env-file=env.txtsecret/env-secret created
特点:可以在文件里面保存多条信息,文件env.txt中每条key=value对应一条信息条目。
1.4 通过yaml配置文件:
#文件中的敏感数据必须是通过 base64 编码后的结果。
[root@master ~]# echo root | base64cm9vdAo=[root@master ~]# echo 123456 | base64MTIzNDU2Cg==#编写yaml文件:
apiVersion: v1kind: Secretmetadata: name: secret-appdata:    #该字段为存放数据的字段,与其他资源对象不同,没有spec字段。 username: cm9vdAo= password: MTIzNDU2Cg==//创建secert
[root@master ~]# kubectl apply -f secret.yaml secret/secret-app created//反向解析加密数据:
[root@master ~]# echo -n cm9vdAo= | base64 --decoderoot[root@master ~]# echo -n MTIzNDU2Cg== | base64 --decode123456特点:便于保存,跨主机使用时会非常方便。
2,如何使用secret一,以volume方式使用secret
pod通过volume的方式使用secret
pod的配置文件如下所示:
apiVersion: v1kind: Podmetadata: name: secret-podspec: containers: - name: secret-pod  image: busybox  args:   - /bin/sh   - -c   - sleep 10; touch /tmp/healthy; sleep 3000  volumeMounts:  - name: foo   mountPath: /etc/foo   readOnly: true volumes: - name: foo  secret:   secretName: secret-app1)定义volume foo,来源为secretsecret-app
2)将foo mount到容器路径/etc/foo,可指定读写权限为readOnly
//创建pod并在容器中读取secret
[root@master secret]# kubectl apply -f secret-pod.yaml pod/secret-pod created[root@master secret]# kubectl exec -it secret-pod /bin/sh/ # cd /etc/foo//etc/foo # lspassword username/etc/foo # cat password 123456/etc/foo # cat username root可以看到,k8s会在指定路径/etc/foo下为每条敏感数据创建一个文件,文件名就是数据条目的key,这里是/etc/foo/username/etc/foo/passwordvalue则以铭文存放在文件中。
2)我们也可以自定义存放数据的文件名,完整的配置文件如下:
apiVersion: v1kind: Podmetadata: name: secret-podspec: containers: - name: secret-pod  image: busybox  args:   - /bin/sh   - -c   - sleep 10; touch /tmp/healthy; sleep 3000  volumeMounts:  - name: foo   mountPath: /etc/foo   readOnly: true volumes: - name: foo  secret:   secretName: secret-app   items:   - key: username:    path: my-group/my-username   - key: password    path: my-group/my-password这时数据分别存放在/etc/foo/my-group/my-username/etc/foo/my-group/my-password中。
//验证数据存放位置:
[root@master secret]# kubectl delete -f secret-pod.yaml pod "secret-pod" deleted[root@master secret]# kubectl apply -f secret-pod.yaml pod/secret-pod created[root@master secret]# kubectl exec -it secret-pod /bin/sh/ # cd /etc/foo//etc/foo # lsmy-group/etc/foo # cd my-group//etc/foo/..2020_02_03_05_37_09.892671465/my-group # cat my-password 123456/etc/foo/..2020_02_03_05_37_09.892671465/my-group # cat my-username root3)以volume方式使用secret支持动态更新:secret更新后,容器中的数据也会更新。
//我们有需求将password更新为“123456.com”
[root@master secret]# echo 123456.com | base64MTIzNDU2LmNvbQo=修改secret配置文件:
apiVersion: v1kind: Secretmetadata: name: secret-appdata: username: cm9vdAo= password: MTIzNDU2LmNvbQo=//更新secret
[root@master secret]# kubectl apply -f secret.yaml secret/secret-app configured//验证password是否更新成功:
[root@master secret]# kubectl exec -it secret-pod /bin/sh/ # cd /etc/foo/my-group//etc/foo/..2020_02_03_05_40_42.995350019/my-group # cat my-password 123456.com特点:如果secert的数据发生变化,引用数据的资源对象内的数据也会随之改变,当secret更新-----pod也会更新。
二:以环境变量的方式使用
通过volume使用secret时,容器必须从文件读取数据,会稍嫌麻烦,k8s还支持通过环境变量来使用secret
pod配置文件示例如下:
apiVersion: v1kind: Podmetadata: name: secret-podspec: containers: - name: secret-pod  image: busybox  args:   - /bin/sh   - -c   - sleep 10; touch /tmp/healthy; sleep 3000  env:   - name: SECRET_USERNAME    valueFrom:     secretKeyRef:      name: secret-app      key: username   - name: SECRET_PASSWORD    valueFrom:     secretKeyRef:      name: secret-app      key: password//创建pod并读取secret
[root@master secret]# kubectl apply -f secret-pod.yaml pod/secret-pod created[root@master secret]# kubectl exec -it secret-pod /bin/sh/ # echo $SECRET_USERNAMEroot/ # echo $SECRET_PASSWORD123456.com2)验证:接下来我们修改secretpassword的值,查看pod内的数据是否会改变?
经过测试,发现pod中的值是不会发生改变的。
特点:环境变量读取secret很方便,但无法支撑secret动态更新。
configMapSecret可以为pod提供密码,Token,私钥等敏感数据。而对于一些非敏感数据,比如应用的配置信息,则可以用ConfigMapConfigMapsecret非常相似,主要不同的是,他保存的数据是以明文的方式存放。假设我们需要存放在ConfigMap对象中的信息:
config1=xxx
config2=yyy
1,创建ConfigMap同样拥有以下四种方法:
1.1 通过--from-literal创建:
[root@master configMap]# kubectl create configmap configmap1 --from-literal=config1=xxx --from-literal=config2=yyyconfigmap/configmap1 created//查看configmap信息:

可以看到保存的数据是以明文的方式存放。
特点:每个--from-literal对应一条信息。
1.2 通过--from-file创建:
[root@master configMap]# echo xxx > config1[root@master configMap]# echo yyy > config2//创建configmap[root@master configMap]# kubectl create configmap configmap2 --from-file=config1 --from-file=config2configmap/configmap2 created特点:每个文件对应一条信息,每个文件中只能保存一个,为了机密性,导入后需要将本地的文件删除掉。
1.3 通过--from-env-file的方式创建:
[root@master configMap]# cat > env.txt <<EOF> config1=xxx> config2=yyy> EOF//创建configmap
[root@master configMap]# kubectl create configmap configmap3 --from-env-file=env.txt configmap/configmap3 created特点:可以再文件里面保存多条信息,文件env.txt中每条key=value 对应一条信息条目。
1.4 通过yaml配置文件:
#文件中的敏感数据必须是通过 base64 编码后的结果。
configmap配置文件如下:
apiVersion: v1kind: ConfigMapmetadata: name: configmap-appdata: config1: xxx  #文件中的数据直接以明文输入即可 config2: yyy//创建configmap
[root@master configMap]# kubectl apply -f configmap.yaml configmap/configmap-app created特点:便于保存,跨主机使用时会非常方便。
2,数据的引用与Secret一样,pod也可以通过volume或者环境变量的方式使用secret
一:volume方式
yaml配置文件如下:
apiVersion: v1kind: Podmetadata: name: configmap-podspec: containers: - name: configmap-pod  image: busybox  args:   - /bin/sh   - -c   - sleep 10; touch /tmp/healthy; sleep 3000  volumeMounts:  - name: foo   mountPath: /etc/foo volumes: - name: foo  configMap:   name: configmap-app//创建pod,并在pod中读取数据:
[root@master configMap]# kubectl apply -f configmap-pod.yaml pod/configmap-pod created[root@master configMap]# kubectl exec -it configmap-pod /bin/sh/ # cd /etc/foo//etc/foo # lsconfig1 config2/etc/test # cat config1xxx/etc/test # cat config2yyy二:env环境变量方式
yaml配置文件内容如下所示:
apiVersion: v1kind: Podmetadata: name: configmap-podspec: containers: - name: configmap-pod  image: busybox  args:   - /bin/sh   - -c   - sleep 10; touch /tmp/healthy; sleep 3000  env:   - name: CONFIG1    valueFrom:     configMapKeyRef:      name: configmap-app      key: config1   - name: CONFIG2    valueFrom:     configMapKeyRef:      name: configmap-app      key: config2//创建pod并查看pod中的数据:
[root@master configMap]# kubectl delete -f configmap-pod.yaml pod "configmap-pod" deleted[root@master configMap]# kubectl apply -f configmap-pod.yaml pod/configmap-pod created[root@master configMap]# kubectl exec -it configmap-pod /bin/sh/ # echo $CONFIG1xxx/ # echo $CONFIG2yyy经过测试:同样configmapsecret的两种引用方式一样,volume挂载的方式,如果configmap的数据更新,引用的资源对象内的数据也会更新,而以env环境变量的方式,则不支持动态更新(可自己进行测试验证)。
注意:以上只是例子,要知道在大多数情况下,配置信息都是以文件形式提供,所以创建ConfigMap时一般只采用--from-fileYAML方式,而读取ConfigMap时通常采用volume方式。
看完这篇文章,你们学会使用Kubernetes中的Secret了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注Vecloud行业资讯频道,感谢各位的阅读!

SD-WAN-MPLS组网http://www.kd010.com/

收藏回复 显示全部楼层 道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|小黑屋|WebHostingTalk中文站

GMT+8, 2024-4-23 21:54 , Processed in 0.069418 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表