• kubernetes-如何解决环境变量中敏感信息带来的安全隐患


    1.统一环境变量的优点

    1. 环境变量中存在很多的敏感信息,比如账号密码,直接存在放yaml文件中存在很大的安全性问题
    2. 方便维护管理环境变量
    3. 对于开发、测试、生成环境,由于配置的不同。如果不进行管理就需要修改部署yaml,就将带来额外的开销

    2.kubernetes提供configMap与Secret实现业务配置的统一管理

    配置统一管理的思想:将配置文件与镜像文件分离,使得容器化的应用程序具有可移植性

    在这里插入图片描述

    2.1 configMap,通常用来管理应用的配置文件或者环境变量

    定义configMap

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: myblog
      namespace: shi
    data:
      MYSQL_HOST: "127.0.0.1"
      MYSQL_PORT: "3306"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    创建与查看configmap

    $ kubectl create -f configmap.yaml
    $ kubectl -n luffy get cm myblog -oyaml
    
    • 1
    • 2

    使用txt文件创建configmap,注意创建命令的不同

    $ cat configmap.txt
    MYSQL_HOST=127.0.0.1
    MYSQL_PORT=3306
    $ kubectl create configmap myblog --from-env-file=configmap.txt
    
    • 1
    • 2
    • 3
    • 4

    2.2 Secret,管理敏感类的信息,默认会base64编码存储,有三种类型

    • Service Account :用来访问Kubernetes API,由Kubernetes自动创建,并且会自动挂载到Pod的/run/secrets/kubernetes.io/serviceaccount目录中;创建ServiceAccount后,Pod中指定serviceAccount后,自动创建该ServiceAccount对应的secret;
    • Opaque : base64编码格式的Secret,用来存储密码、密钥等;
    • kubernetes.io/dockerconfigjson :用来存储私有docker registry的认证信息。

    定义Secret

    apiVersion: v1
    kind: Secret
    metadata:
      name: myblog
      namespace: shi
    type: Opaque
    data:
      MYSQL_USER: cm9vdA==        #注意加-n参数, echo -n root|base64
      MYSQL_PASSWD: MTIzNDU2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    创建并查看Secret

    $ kubectl create -f secret.yaml
    $ kubectl -n luffy get secret
    
    • 1
    • 2

    使用txt文件创建Secret

    $ cat secret.txt
    MYSQL_USER=root
    MYSQL_PASSWD=123456
    $ kubectl -n luffy create secret generic myblog --from-env-file=secret.txt
    
    • 1
    • 2
    • 3
    • 4

    3.configMap与Secret在yaml中的使用

    configMap

     - name: MYSQL_HOST
          valueFrom:
            configMapKeyRef:
              name: myblog
              key: MYSQL_HOST
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Secret

    - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: myblog
              key: MYSQL_PASSWD
    
    • 1
    • 2
    • 3
    • 4
    • 5

    完整yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: mysql
      namespace: shi2
      labels:
        component: mysql
    spec:
      hostNetwork: true    # 声明pod的网络模式为host模式,效果同docker run --net=host
      volumes: 
      - name: mysql-data
        hostPath: 
          path: /opt/mysql/data
      nodeSelector:   # 使用节点选择器将Pod调度到指定label的节点
        component: mysql
      containers:
      - name: mysql
        image: mysql:5.7
        args:
        - --character-set-server=utf8mb4
        - --collation-server=utf8mb4_unicode_ci
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_USER
          valueFrom:
            secretKeyRef:
              name: myblog
              key: MYSQL_USER
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: myblog
              key: MYSQL_PASSWD
        - name: MYSQL_DATABASE
          valueFrom:
            configMapKeyRef:
              name: myblog
              key: MYSQL_DATABASE
        resources:
          requests:
            memory: 100Mi
            cpu: 50m
          limits:
            memory: 500Mi
            cpu: 100m
        readinessProbe:
          tcpSocket:
            port: 3306
          initialDelaySeconds: 5
          periodSeconds: 10
        livenessProbe:
          tcpSocket:
            port: 3306
          initialDelaySeconds: 15
          periodSeconds: 20
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
  • 相关阅读:
    Java集合
    linux 安装操作 redis
    社群用户不活跃怎么办?教你几招
    转型明显提速 工程机械智能化底色愈浓
    go语言学习之旅之Go语言函数
    Databend 开源周报 #66
    如何避免Facebook账号被封,要注意哪些地方?
    『SpringBoot 源码分析』run() 方法执行流程:(2)刷新应用上下文-准备阶段
    计算机毕业设计——校园二手市场
    体现技术深度(无法速成)
  • 原文地址:https://blog.csdn.net/apple_56973763/article/details/127777398