学习笔记三十:K8S配置管理中心Secret实现加密数据配置管理

K8S配置管理中心Secret实现加密数据配置管理

Secret概述

  • Configmap一般是用来存放明文数据的,如配置文件,对于一些敏感数据,如密码、私钥等数据时,要用secret类型。
  • Secret解决了密码、token、秘钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式使用。
  • 要使用 secret,pod 需要引用 secret。Pod 可以用两种方式使用 secret:作为 volume 中的文件被挂载到 pod 中的一个或者多个容器里,或者当 kubelet 为 pod 拉取镜像时使用。

secret三种可选参数:

  • generic: 通用类型,通常用于存储密码数据。
  • tls:此类型仅用于存储私钥和证书。
  • docker-registry: 若要保存docker仓库的认证信息的话,就必须使用此种类型来创建。

Secret类型

  • Service Account:用于被 serviceaccount 引用。serviceaccout 创建时 Kubernetes 会默认创建对应的 secret。Pod 如果使用了 serviceaccount,对应的 secret 会自动挂载到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录中。
  • Opaque:base64编码格式的Secret,用来存储密码、秘钥等。可以通过base64 --decode解码获得原始数据,因此安全性弱
  • kubernetes.io/dockerconfigjson:用来存储私有docker registry的认证信息。

使用Secret

通过环境变量引入Secret

把mysql的root用户的password创建成secret

python 复制代码
kubectl create secret generic mysql-password --from-literal=password=hahapod**lucky66
python 复制代码
kubectl get secret
NAME                          TYPE                                  DATA   AGE
mysql-password                Opaque                                1      30s
python 复制代码
kubectl describe secret mysql-password
Name:         mysql-password
Namespace:    default
Labels:       <none>
Annotations:  <none>
Type:  Opaque
Data
====
password:  20bytes   
#password的值是加密的,
#但secret的加密是一种伪加密,它仅仅是将数据做了base64的编码.

创建pod,引用secret

python 复制代码
cat pod-secret.yaml 
python 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: pod-secret
  labels:
     app: myapp
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
    ports:
    - name: http
      containerPort: 80
    env:
     - name: MYSQL_ROOT_PASSWORD   #它是Pod启动成功后,Pod中容器的环境变量名.
       valueFrom:
          secretKeyRef:
            name: mysql-password  #这是secret的对象名
            key: password      #它是secret中的key名
python 复制代码
kubectl apply -f pod-secret.yaml
python 复制代码
kubectl exec -it pod-secret -- /bin/sh
/ # printenv
MYSQL_ROOT_PASSWORD=hahapod**lucky66

通过volume挂载Secret

创建Secret

手动加密,基于base64加密

python 复制代码
echo -n 'admin' | base64
YWRtaW4=
python 复制代码
echo -n 'haha123456f' | base64
aGFoYTEyMzQ1NmY=
python 复制代码
echo aGFoYTEyMzQ1NmY=  | base64 -d

创建yaml文件

python 复制代码
vim secret.yaml
python 复制代码
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
  password: aGFoYTEyMzQ1NmY=
python 复制代码
kubectl apply -f secret.yaml
python 复制代码
kubectl describe secret mysecret
Name:         mysecret
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
password:  15 bytes
username:  5 bytes

将Secret挂载到Volume中

python 复制代码
vim pod_secret_volume.yaml
python 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: pod-secret-volume
spec:
  containers:
  - name: myapp
    image: registry.cn-beijing.aliyuncs.com/google_registry/myapp:v1
    volumeMounts:
    - name: secret-volume
      mountPath: /etc/secret
      readOnly: true
  volumes:
  - name: secret-volume
    secret:
      secretName: mysecret
python 复制代码
kubectl apply -f pod_secret_volume.yaml
python 复制代码
 kubectl exec -it pod-secret-volume -- /bin/sh
/ # ls /etc/secret
password  username
/ # 
/ # cat /etc/secret/username
admin/ # 
/ # 
/ # cat /etc/secret/password
haha123456f/ #

由上可见,在pod中的secret信息实际已经被解密。

相关推荐
strongwyy3 小时前
9、nRF52xx蓝牙学习(pca10056.h学习)
单片机·嵌入式硬件·学习
每天题库3 小时前
2025 年江苏保安员职业资格考试经验分享
学习·安全·考试·题库·考证
Starry_hello world6 小时前
Linux 的准备工作
linux·笔记·有问必答
viperrrrrrrrrr78 小时前
大数据学习(105)-Hbase
大数据·学习·hbase
IT _oA9 小时前
Active Directory 域服务
运维·服务器·网络·windows·笔记
袖清暮雨9 小时前
Python刷题笔记
笔记·python·算法
六bring个六10 小时前
QT上位机笔记
开发语言·笔记·qt
熬夜造bug10 小时前
LeetCode Hot100 刷题笔记(1)—— 哈希、双指针、滑动窗口
笔记·leetcode·hot100
行思理10 小时前
go语言应该如何学习
开发语言·学习·golang
胡八一11 小时前
Kubernetes 节点磁盘空间空了怎么办?解决 containerd overlay 100%问题
云原生·容器·kubernetes