Kubernetes Secret
Secret 是 Kubernetes 中用于存储敏感信息的资源,例如密码、API 密钥和 SSH 密钥。Secret 可以被 Pod 和其他 Kubernetes 资源使用,而无需将敏感信息暴露在配置文件或环境变量中。
1. Secret 类型
Kubernetes 支持多种类型的 Secret,包括:
-
Opaque Secret: 用于存储任意类型的数据,例如密码和 API 密钥。
-
DockerConfig Secret: 用于存储 Docker 镜像仓库的认证信息。
-
TLS Secret: 用于存储 TLS 证书和密钥。
-
SSH Secret: 用于存储 SSH 密钥。
2. Secret 用途
Secret 可用于以下场景:
-
存储数据库密码
-
存储 API 密钥
-
存储 SSH 密钥
-
存储 TLS 证书和密钥
-
存储任何其他敏感信息
3. Secret 类型选择
选择合适的 Secret 类型取决于您要存储的数据类型。
-
如果您要存储任意类型的数据,请使用 Opaque Secret。
-
如果您要存储 Docker 镜像仓库的认证信息,请使用 DockerConfig Secret。
-
如果您要存储 TLS 证书和密钥,请使用 TLS Secret。
-
如果您要存储 SSH 密钥,请使用 SSH Secret。
4. 创建 Secret
您可以使用 kubectl 命令行工具或 Kubernetes API 创建 Secret。
示例:创建 Opaque Secret
apiVersion: v1kind: Secretmetadata:name: my-secretdata:username: my-usernamepassword: my-password
-
创建 DockerConfig Secret:
apiVersion: v1kind: Secretmetadata:name: my-dockerconfig-secretdata:.dockercfg: $(echo -n "{\"auths\":{\"https://index.docker.io/v1/\":{\"username\":\"my-username\",\"password\":\"my-password\"}}}") | base64 -w 0
-
创建 TLS Secret:
apiVersion: v1kind: Secretmetadata:name: my-tls-secretdata:tls.crt: $(cat my-tls.crt | base64 -w 0)tls.key: $(cat my-tls.key | base64 -w 0)
-
创建 SSH Secret:
apiVersion: v1kind: Secretmetadata:name: my-ssh-secretdata:ssh-privatekey: $(cat my-ssh-privatekey | base64 -w 0)
5. 使用 Secret
您可以使用以下两种方式将 Secret 注入到 Pod 中:
-
环境变量: 使用
envFrom字段将 Secret 数据注入到 Pod 的环境变量中。 -
Volume: 将 Secret 挂载到 Pod 的 Volume 中。
-
YAML文件
示例:使用环境变量注入 Secret
apiVersion: v1kind: Podmetadata:name: my-podspec:containers:- name: my-containerenvFrom:- secretRef:name: my-secret
创建 Pod
apiVersion: v1kind: Podmetadata:name: my-podspec:containers:- name: my-containerenvFrom:- secretRef:name: my-secret
查看 Pod 环境变量
kubectl exec -it my-pod -- env | grep -i username输出结果username=my-username
示例:使用 Volume 注入 Secret
创建 Secret
apiVersion: v1kind: Secretmetadata:name: my-secretdata:username: my-usernamepassword: my-password
创建 Pod
apiVersion: v1kind: Podmetadata:name: my-podspec:containers:- name: my-containervolumeMounts:- name: my-secretmountPath: /etc/secretvolumes:- name: my-secretsecret:secretName: my-secret
查看 Pod 中的文件
kubectl exec -it my-pod -- cat /etc/secret/username输出:my-username
6.管理 Secret
查看 Secret
kubectl get secret
编辑 Secret
-
编辑 Secret YAML 文件。
-
使用 kubectl 命令应用 YAML 文件
kubectl apply -f my-secret.yaml
删除 Secret
kubectl delete secret my-secret
7.示例:使用 OpenSSL 加密 Secret 数据
安装 OpenSSL
-
查看系统是否已安装 OpenSSL
openssl version -a
-
下载 OpenSSL 源码
从 OpenSSL 官方网站: https://www.openssl.org/source/ 下载最新版本的 OpenSSL 源码。
-
解压 OpenSSL 源码
tar -xzf openssl-*.tar.gz
-
编译和安装 OpenSSL
cd openssl-*./configmakemake install
-
配置环境变量
-
在
/etc/ld.so.conf文件的末尾添加以下内容:
-
/usr/local/ssl/lib
-
-
运行以下命令更新环境变量:
-
ldconfig
-
验证 OpenSSL 安装
openssl version -a输出OpenSSL 3.0.13 7 MAR 2024
生成加密密钥
openssl genrsa -out my-secret.key 2048
加密 Secret 数据
openssl aes-256-cbc -in my-secret.yaml -out my-secret.yaml.enc -kfile my-secret.key
创建 Secret
apiVersion: v1kind: Secretmetadata:name: my-secretdata:secret-data: $(cat my-secret.yaml.enc | base64 -w 0)
使用环境变量注入 Secret 并解密
apiVersion: v1kind: Podmetadata:name: my-podspec:containers:- name: my-containerenvFrom:- secretRef:name: my-secret
输出解密 Secret 数据
kubectl exec -it my-pod -- sh -c 'echo $SECRET_DATA | base64 -d | openssl aes-256-cbc -d -kfile my-secret.key'# 这是您的明文 Secret 数据
Secret 是 Kubernetes 中用于存储敏感信息的强大工具。 通过选择合适的 Secret 类型并使用安全实践,可以保护您的敏感信息并确保您的应用程序安全可靠。
关注我,我们一起学习更多知识,带你了解更多职场信息内容.
想要了解更多技术文章请关注公众号“职谷智享”,关注后回复关键字【秒杀】可以领取秒杀系统学习资料










![[WUSTCTF2020]朴实无华](https://img-blog.csdnimg.cn/direct/4424d1e80e4046348651d79a5c195217.png)









