kubernetes-如何解决环境变量中敏感信息带来的安全隐患
k8s提供两类资源,configMap和Secret,可以用来实现业务配置的统一管理, 允许将配置文件与镜像文件分离,以使容器化的应用程序具有可移植性 。
·
1.统一环境变量的优点
- 环境变量中存在很多的敏感信息,比如账号密码,直接存在放yaml文件中存在很大的安全性问题
- 方便维护管理环境变量
- 对于开发、测试、生成环境,由于配置的不同。如果不进行管理就需要修改部署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"
创建与查看configmap
$ kubectl create -f configmap.yaml
$ kubectl -n luffy get cm myblog -oyaml
使用txt文件创建configmap,注意创建命令的不同
$ cat configmap.txt
MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
$ kubectl create configmap myblog --from-env-file=configmap.txt
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
创建并查看Secret
$ kubectl create -f secret.yaml
$ kubectl -n luffy get secret
使用txt文件创建Secret
$ cat secret.txt
MYSQL_USER=root
MYSQL_PASSWD=123456
$ kubectl -n luffy create secret generic myblog --from-env-file=secret.txt
3.configMap与Secret在yaml中的使用
configMap
- name: MYSQL_HOST
valueFrom:
configMapKeyRef:
name: myblog
key: MYSQL_HOST
Secret
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: myblog
key: MYSQL_PASSWD
完整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
更多推荐
已为社区贡献3条内容
所有评论(0)