Kubernetes 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: mysql
  DATASOURCE_URL: jdbc:mysql://mysql/petclinc
  DATASOURCE_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: root
  DATASOURCE_PASSWORD: petclinic

petclinic-svc.yml文件内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: petclinic
spec:
  replicas: 1
  selector:
    matchLabels:
      app: petclinic
  template:
    metadata:
      labels:
        app: petclinic
    spec:
      containers:
      - name: petclinic
        # Run this image
        image: spring2go/spring-petclinic:1.0.0.RELEASE
        envFrom:
          - configMapRef:
              name: petclinic-config-v2
          - secretRef:
              name: petclinic-secret
---
apiVersion: v1
kind: Service
metadata:
  # Unique key of the Service instance
  name: petclinic
spec:
  ports:
    # Accept traffic sent to port 80
    - name: http
      # port为集群内部服务前通信的端口
      port: 8080
      targetPort: 8080
      nodePort: 31080
  selector:
    # 下面标签app: petclinic表示本服务会路由指向所有app标签为petclinic的pod。
    app: petclinic
  type: NodePort

再准备好mysql-svc.yml文件:

apiVersion: v1
kind: Pod
metadata:
  name: mysql
  labels:
    app: mysql
spec:
  containers:
    - name: mysql
      #mysql官方5.7镜像
      image: mysql:5.7
      env:
        #支持启动的时候配置数据库
        - name: MYSQL_ROOT_PASSWORD
          #root用户密码,实际生产环境要配置在ConfigMap/Secret中。
          value: petclinic
        - name: MYSQL_DATABASE
          #创建数据库
          value: petclinic
---
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  selector:
    app: mysql
  ports:
    - name: tcp
      port: 3306
      targetPort: 3306
  type: 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资源设置单独安全访问策略
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值