赞
踩
Secret 是 Kubernetes 中用于存储敏感信息的资源,例如密码、API 密钥和 SSH 密钥。Secret 可以被 Pod 和其他 Kubernetes 资源使用,而无需将敏感信息暴露在配置文件或环境变量中。
Kubernetes 支持多种类型的 Secret,包括:
Opaque Secret: 用于存储任意类型的数据,例如密码和 API 密钥。
DockerConfig Secret: 用于存储 Docker 镜像仓库的认证信息。
TLS Secret: 用于存储 TLS 证书和密钥。
SSH Secret: 用于存储 SSH 密钥。
Secret 可用于以下场景:
存储数据库密码
存储 API 密钥
存储 SSH 密钥
存储 TLS 证书和密钥
存储任何其他敏感信息
选择合适的 Secret 类型取决于您要存储的数据类型。
如果您要存储任意类型的数据,请使用 Opaque Secret。
如果您要存储 Docker 镜像仓库的认证信息,请使用 DockerConfig Secret。
如果您要存储 TLS 证书和密钥,请使用 TLS Secret。
如果您要存储 SSH 密钥,请使用 SSH Secret。
您可以使用 kubectl 命令行工具或 Kubernetes API 创建 Secret。
示例:创建 Opaque Secret
apiVersion: v1
kind: Secret
metadata:
name: my-secret
data:
username: my-username
password: my-password
创建 DockerConfig Secret:
apiVersion: v1
kind: Secret
metadata:
name: my-dockerconfig-secret
data:
.dockercfg: $(echo -n "{\"auths\":{\"https://index.docker.io/v1/\":{\"username\":\"my-username\",\"password\":\"my-password\"}}}") | base64 -w 0
创建 TLS Secret:
apiVersion: v1
kind: Secret
metadata:
name: my-tls-secret
data:
tls.crt: $(cat my-tls.crt | base64 -w 0)
tls.key: $(cat my-tls.key | base64 -w 0)
创建 SSH Secret:
apiVersion: v1
kind: Secret
metadata:
name: my-ssh-secret
data:
ssh-privatekey: $(cat my-ssh-privatekey | base64 -w 0)
您可以使用以下两种方式将 Secret 注入到 Pod 中:
环境变量: 使用 envFrom
字段将 Secret 数据注入到 Pod 的环境变量中。
Volume: 将 Secret 挂载到 Pod 的 Volume 中。
YAML文件
示例:使用环境变量注入 Secret
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
envFrom:
- secretRef:
name: my-secret
创建 Pod
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
envFrom:
- secretRef:
name: my-secret
查看 Pod 环境变量
kubectl exec -it my-pod -- env | grep -i username
输出结果
username=my-username
示例:使用 Volume 注入 Secret
创建 Secret
apiVersion: v1
kind: Secret
metadata:
name: my-secret
data:
username: my-username
password: my-password
创建 Pod
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
volumeMounts:
- name: my-secret
mountPath: /etc/secret
volumes:
- name: my-secret
secret:
secretName: my-secret
查看 Pod 中的文件
kubectl exec -it my-pod -- cat /etc/secret/username
输出:
my-username
查看 Secret
kubectl get secret
编辑 Secret
编辑 Secret YAML 文件。
使用 kubectl 命令应用 YAML 文件
kubectl apply -f my-secret.yaml
删除 Secret
kubectl delete secret my-secret
安装 OpenSSL
查看系统是否已安装 OpenSSL
openssl version -a
下载 OpenSSL 源码
从 OpenSSL 官方网站: https://www.openssl.org/source/ 下载最新版本的 OpenSSL 源码。
解压 OpenSSL 源码
tar -xzf openssl-*.tar.gz
编译和安装 OpenSSL
cd openssl-*
./config
make
make 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: v1
kind: Secret
metadata:
name: my-secret
data:
secret-data: $(cat my-secret.yaml.enc | base64 -w 0)
使用环境变量注入 Secret 并解密
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
envFrom:
- 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 类型并使用安全实践,可以保护您的敏感信息并确保您的应用程序安全可靠。
关注我,我们一起学习更多知识,带你了解更多职场信息内容.
想要了解更多技术文章请关注公众号“职谷智享”,关注后回复关键字【秒杀】可以领取秒杀系统学习资料
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。