本文主要是介绍Kubernetes Secrets,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Kubernetes Secrets
- K8S Secrets配置原理
- 演示部署架构
- 发布命令
- Secrets的安全性
K8S Secrets配置原理
K8S Secrets用于支持敏感数据配置。Secrets是一种特殊的配置,可以提供较安全的存储和访问配置的机制。同样支持两种常见方式和POD进行绑定:
- 环境变量 - 跟ConfigMap一样,如果以环境变量的方式跟POD绑定,配置更新的时候,需要重启POD来使用最新的secret.
- 存储卷挂载到POD - Secrets可以做到热加载,不必要重启POD。
演示部署架构
结合上一篇文章中的所有yaml文件。K8S ConfigMap配置
我们将数据库的用户名,密码存到petclinic-secret.yml文件中。
修改1个文件:petclinic-config.yml
增加2个文件:petclinic-secret.yml
更新1个文件:petclinic-svc.yml
petclinic-config.yml 文件内容如下:
apiVersion: v1
kind: ConfigMap
metadata:name: petclinic-config-v2
data:SPRING_PROFILES_ACTIVE: mysqlDATASOURCE_URL: jdbc:mysql://mysql/petclincDATASOURCE_INIT_MODE: always# 下面TEST_CONFIG 只是为实验演示效果用,跟petclinic应用没有关系,可以不加。TEST_CONFIG: test_config_v2
petclinic-secret.yml文件内容如下:
注: 如果选择data,需要用base64将字符编码加密。方法如下:
echo -n petclinic | base64
apiVersion: v1
kind: Secret
metadata:name: petclinic-secret
type: Opaque
#data:
# DATASOURCE_USERNAME: cm9vdA==
# DATASOURCE_PASSWORD: cGV0Y2xpbmlj
stringData:DATASOURCE_USERNAME: rootDATASOURCE_PASSWORD: petclinic
petclinic-svc.yml文件内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:name: petclinic
spec:replicas: 1selector:matchLabels:app: petclinictemplate:metadata:labels:app: petclinicspec:containers:- name: petclinic# Run this imageimage: spring2go/spring-petclinic:1.0.0.RELEASEenvFrom:- configMapRef:name: petclinic-config-v2- secretRef:name: petclinic-secret
---
apiVersion: v1
kind: Service
metadata:# Unique key of the Service instancename: petclinic
spec:ports:# Accept traffic sent to port 80- name: http# port为集群内部服务前通信的端口port: 8080targetPort: 8080nodePort: 31080selector:# 下面标签app: petclinic表示本服务会路由指向所有app标签为petclinic的pod。app: petclinictype: NodePort
再准备好mysql-svc.yml文件:
apiVersion: v1
kind: Pod
metadata:name: mysqllabels:app: mysql
spec:containers:- name: mysql#mysql官方5.7镜像image: mysql:5.7env:#支持启动的时候配置数据库- name: MYSQL_ROOT_PASSWORD#root用户密码,实际生产环境要配置在ConfigMap/Secret中。value: petclinic- name: MYSQL_DATABASE#创建数据库value: petclinic
---
apiVersion: v1
kind: Service
metadata:name: mysql
spec:selector:app: mysqlports:- name: tcpport: 3306targetPort: 3306type: ClusterIP
发布命令
发布配置文件
kubectl apply -f petclinic-config.yml
kubectl apply -f petclinic-secret.yml
kubectl describe secret petclinic-secret
#用下面命令查看data,Stringdata已经转化成data,并且用base64加密。
kubectl get secret petclinic-secret -o yaml
发布mysql
kubectl apply -f mysql-svc.yml
发布petclinic
kubectl apply -f petclinic-svc.yml
查看
kubectl get all
浏览器校验 http://localhost:31080
登录POD验证配置信息
kubectl exec pod_name printenv
清理环境
kubectl delete cm petclinic-config-v2
kubectl delete secret petclinic-secret
kubectl delete deploy --all
kubectl delete svc --all
kubectl delete po --all
查看环境是否已干净
kubectl get all
Secrets的安全性
Secret是K8S提供的一种敏感信息配置对象,便于在微服务间共享敏感信息配置。
Secret仅提供有限安全:
- 协作时防止敏感数据泄露
- 为Secret资源设置单独安全访问策略
这篇关于Kubernetes Secrets的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!