kubernetes基础知识之secret创建

B站影视 港台电影 2025-06-08 16:09 2

摘要:kubernetes secret 未显示设定时,默认的配置就是opaque类型。

kubernetes secret 未显示设定时,默认的配置就是opaque类型。

service创建的时候,不指定的话,默认就是ClusterIP的服务类型。

编码生成密文:

echo -n "明文" |base64

解码恢复明文:

echo -n "密文"| base64 -d

这里的d代表decode,解码的意思。

Base64是一种编码方式,它会对数据进行编码,编码以后的结果放入secret资源清单的配置文件。

secret.yaml:

apiVersion: v1

kind: Secret

metadata:

name: mysecret

namespace: default

type: Opaque

data:

password: xxx(密文)

username: XXX(密文)

这里使用的密文value,是经过base64算法编码以后的密码,但是这里的key是没有经过编码的。

编码和解码的过程,是base64位算法通过编解码库进行的,多次执行会生成相同的编码或者解码的结果。

一个没有被编码的数据,拿去解码的话,由于数据库中没有数据,所以解码之后会出现乱码,去解码一定得到的不是原数据。

当已经编码过的数据,放入pod中被调用的话,它的value会被自动解码。

如果对value没有进行编码,就写入了secret资源对象的资源清单文件中,那么在使用的时候会自动解码,就会出现乱码。

secret对象的value值必须经过base64编码,才可以去使用。

一定要把secret资源对象中key的value值进行编码才能去使用。

通过secret资源清单文件secret.yaml去创建secret:

kubectl create -f secret.yaml

查看 kubernetes集群中的secret:

kubectl get secret -n $default

通过describe去描述secret资源对象:

kubectl describe secret mysecret -n default

可以查看到数据段data中的字段有多少个字节,但是不会看到编码后的密码。

可以对比configmap:

kubectl get cm $configmap_name -n $default

或者:

kubectl describe cm $configmap -n $default

可以看到configmap是明文显示的数据。

但是kubectl describe secret $secret_name -n $namespace_name的时候,它的key是明文的,但是它的value是经过编码的密文,它不会以明文的形式告诉用户编码值。它的key是明文的,但是value是一个隐藏的信息。

获取secret资源对象的value值,可以使用:

kubectl get secret mysecret -n default -o yaml

可以将secret资源对象输出为资源清单文件。

这样可以把拿到手的已经编码过的密文,经过解码得到原数据。

echo -n "密文" | base64 -d

通过base64算法的decode解码,得到原数据。这样就得到了需要的原数据或者说是数据本身。

所以这个secret资源对象编码之后的密文,是可以通过解码去恢复的,是可以获取到的。这个数据好像隐藏了,但是对于一个真正了解kubernetes集群特性的运维工程师来说,可以通过一条命令方案给还原回来。

不能把secret当成唯一的安全手段。

如果数据库密码要求没那么严格的,也是可以放在secret中,它相对于configmap来说更加安全一点,但是不能当作安全的唯一手段。

opaque类型的secret资源对象,可以做不同的内容。

桃红柳绿

鼓励的话语:人,只要不放弃努力,就一定可以东山再起!

来源:闪现哭唧唧

相关推荐