提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- Secret
- 什么是Secret?
- Secret四种类型及其特点
- Secret应用案例
- (1)将明文密码进行base64编码
- (2)编写创建secret的YAML文件
- Secret的两种使用方式
- (1)通过环境变量的方式传递给pod
- (2)通过volume的方式挂载到pod内(建议使用)
- 热更新:
Secret
什么是Secret?
类似与ConfigMap 区别在于
ConfigMap存储明文
Secret存储密文
ConfigMap可以用作配置文件管理,
Secret用于密码、密钥、token等敏感数据配置管理
##Secret特性
1非敏感数据:专门用于存储非敏感的配置信息。
2.多种数据源:数据可以从命令行、文件、目录等多种来源创建。
3.动态更新:更新 ConfigMap 后,Pod 可以动态加载新的配置信息(需要应用支持热加载)
Secret四种类型及其特点
Opaque Secrets(不透明Secrets):
Opaque Secrets是最通用的Secret类型,可以存储任意类型的机密数据,如用户名/密码、API密钥等。
数据以Base64编码的形式存储,并且要求用户自行对数据进行加密。
Service Account Token Secrets(服务账户令牌Secrets):
这种类型的Secret由Kubernetes自动生成和管理,用于存储与Service Account相关的API访问令牌。
这些Secrets默认会挂载到Pod中,以便允许Pod内的应用程序使用与Service Account相关的API访问令牌进行安全通信。
Docker Registry Secrets(Docker注册表Secrets):
用于存储访问Docker私有注册表所需的认证信息,如用户名、密码和邮箱。
这些Secrets通常用于在Kubernetes中拉取私有Docker镜像时进行身份验证。
TLS Secrets(TLS证书Secrets):
用于存储TLS证书和私钥,以便在TLS终止、HTTPS等情况下使用。
这些Secrets可用于在Kubernetes Ingress或Service中配置SSL/TLS终止,从而实现加密通信。
Secret应用案例
(1)将明文密码进行base64编码
Opaque类型密码需要进行base64编码
[root@master ~]# echo -n 123 | base64
MTIz
假设密码为123,得到的编码为MTIz
(2)编写创建secret的YAML文件
[root@master ~]# vim secret-mysql.yml
apiVersion: v1
kind: Secret
metadata:name: secret-mysql
data:password: MTIz
[root@master ~]# kubectl apply -f secret-mysql.yml
Secret的两种使用方式
(1)通过环境变量的方式传递给pod
编写pod的YAML文件使用Secret
[root@master ~]# vim pod-mysql-secret.yml
apiVersion: v1
kind: Pod
metadata:name: pod-mysql-secret1
spec:containers:- name: mysqlimage: mysql:5.7env:- name: MYSQL_ROOT_PASSWORDvalueFrom:secretKeyRef:name: secret-mysqlkey: password
[root@master ~]# kubectl apply -f pod-mysql-secret.yml
等一会,因为本地没有,所以要下载mysql镜像
进入pod内,用传递的密码登录
[root@master ~]# kubectl exec -it pod-mysql-secret1 -- bash
[root@master ~]# kubectl exec -it pod-mysql-secret1 -- bash
root@pod-mysql-secret1:/# mysql -uroot -p123
登录成功即可
(2)通过volume的方式挂载到pod内(建议使用)
编写pod的YAML文件使用Secret
[root@master ~]# vim pod-mysql-secret2.yml
apiVersion: v1
kind: Pod
metadata:name: pod-mysql-secret2
spec:containers:- name: busyboximage: busyboxargs:- /bin/sh- -c- sleep 10000volumeMounts:- name: vol-secretmountPath: "/opt/passwd"readOnly: truevolumes:- name: vol-secretsecret:secretName: secret-mysql
验证:
[root@master ~]# kubectl exec pod-mysql-secret2 -- cat /opt/passwd/password
123
热更新:
[root@master ~]# echo -n 123456 | base64
MTIzNDU2
[root@master ~]# kubectl edit secrets secret-mysql
pod-mysql-secret2已更新
[root@master ~]# kubectl exec pod-mysql-secret2 -- cat /opt/passwd/password
123456
pod-mysql-secret1未更新
[root@master ~]# kubectl exec -it pod-mysql-secret1 -- bash
root@pod-mysql-secret1:/# mysql -uroot -p123456
完成
有问题请指出,全天在