当前位置:   article > 正文

揭秘 Kubernetes Secret:安全存储敏感信息的秘密武器

揭秘 Kubernetes Secret:安全存储敏感信息的秘密武器

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-username  password: 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-container    envFrom:    - secretRef:        name: my-secret

创建 Pod

apiVersion: v1kind: Podmetadata:  name: my-podspec:  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: v1kind: Secretmetadata:  name: my-secretdata:  username: my-username  password: my-password

创建 Pod​​​​​​​

apiVersion: v1kind: Podmetadata:  name: my-podspec:  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

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-*
./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: 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-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 类型并使用安全实践,可以保护您的敏感信息并确保您的应用程序安全可靠。

关注我,我们一起学习更多知识,带你了解更多职场信息内容.

想要了解更多技术文章请关注公众号“职谷智享”,关注后回复关键字【秒杀】可以领取秒杀系统学习资料

在这里插入图片描述

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/500118
推荐阅读
相关标签
  

闽ICP备14008679号