GKE密钥安全实战:Sealed Secrets加密部署指南

GKE密钥安全实战:Sealed Secrets加密部署指南

【免费下载链接】sealed-secrets A Kubernetes controller and tool for one-way encrypted Secrets 【免费下载链接】sealed-secrets 项目地址: https://gitcode.com/GitHub_Trending/se/sealed-secrets

为什么需要Sealed Secrets?

你还在为GKE集群中敏感数据泄露发愁吗?Kubernetes原生Secret资源以Base64编码存储,一旦集群被入侵就会导致密钥明文泄露。Sealed Secrets通过单向加密技术,让你可以安全地将密钥提交到代码仓库,彻底解决"密钥管理两难"问题。

读完本文你将掌握:

  • 在GKE集群部署Sealed Secrets控制器的完整流程
  • 两种加密密钥的实战方法(在线/离线模式)
  • 私有GKE集群的网络配置解决方案
  • 密钥加密与解密的自动化验证

部署前准备

环境要求

  • GKE集群版本≥1.16
  • 本地安装kubectl(安装指南
  • GKE集群管理员权限(或创建ClusterRoleBinding权限)

资源清单说明

Sealed Secrets提供三种部署方式,GKE推荐使用Helm Chart或Manifest文件: | 部署方式 | 适用场景 | 配置复杂度 | |---------|---------|-----------| | Manifest | 快速测试 | ⭐ | | Helm Chart | 生产环境 | ⭐⭐ | | Carvel Package | 多集群管理 | ⭐⭐⭐ |

GKE部署架构

控制器部署步骤

1. 配置管理员权限

GKE默认限制集群管理员权限,执行以下命令创建必要权限绑定:

USER_EMAIL=your-gcp-email@example.com
kubectl create clusterrolebinding $USER-cluster-admin-binding \
  --clusterrole=cluster-admin \
  --user=$USER_EMAIL

2. 使用Helm部署控制器

# 添加Helm仓库
helm repo add sealed-secrets https://bitnami-labs.github.io/sealed-secrets

# 安装控制器(生产环境推荐)
helm install sealed-secrets-controller sealed-secrets/sealed-secrets \
  --namespace kube-system \
  --set image.repository=docker.io/bitnami/sealed-secrets-controller

配置文件位置:helm/sealed-secrets/values.yaml

3. 验证控制器状态

kubectl get pods -n kube-system -l app.kubernetes.io/name=sealed-secrets

正常输出应显示1个Running状态的Pod:

NAME                                     READY   STATUS    RESTARTS   AGE
sealed-secrets-controller-7f9b6c7c85-xqz4m   1/1     Running   0          2m

密钥加密实战

在线加密模式(推荐)

  1. 创建原始Secret文件(secret.yaml):
apiVersion: v1
kind: Secret
metadata:
  name: db-credentials
  namespace: default
type: Opaque
data:
  username: YWRtaW4=  # 明文: admin
  password: cGFzc3dvcmQ=  # 明文: password
  1. 安装kubeseal客户端:
# Linux系统
wget https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.22.0/kubeseal-0.22.0-linux-amd64.tar.gz
tar zxvf kubeseal-0.22.0-linux-amd64.tar.gz
sudo install kubeseal /usr/local/bin/
  1. 加密Secret:
kubeseal < secret.yaml > sealed-secret.yaml

生成的加密文件可安全提交到Git仓库:示例配置

私有GKE集群特殊配置

网络架构问题

私有GKE集群的控制平面无法直接访问节点网络,导致kubeseal无法获取公钥。有两种解决方案:

A. 离线加密模式
  1. 从控制器日志提取公钥:
kubectl logs -n kube-system deployment/sealed-secrets-controller | grep "PublicKey" -A 20
  1. 保存公钥到本地文件:
# 复制日志中的PEM格式公钥到cert.pem
cat > cert.pem << EOF
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvd...
...省略中间内容...
-----END PUBLIC KEY-----
EOF
  1. 使用离线模式加密:
kubeseal --cert=cert.pem < secret.yaml > sealed-secret.yaml
B. 创建防火墙规则
CLUSTER_NAME=your-cluster-name
ZONE=us-central1-a

# 获取控制平面CIDR
CP_IPV4_CIDR=$(gcloud container clusters describe $CLUSTER_NAME --zone $ZONE \
  | grep "masterIpv4CidrBlock: " | awk '{print $2}')

# 创建8080端口访问规则
gcloud compute firewall-rules create gke-to-kubeseal-8080 \
  --network default \
  --allow tcp:8080 \
  --source-ranges $CP_IPV4_CIDR \
  --target-tags gke-$CLUSTER_NAME-node \
  --priority 1000

网络配置示意图

密钥解密验证

自动解密测试

提交加密后的SealedSecret到集群:

kubectl apply -f sealed-secret.yaml

控制器会自动解密生成原生Secret:

kubectl get secret db-credentials -o jsonpath='{.data.password}' | base64 -d

应输出原始明文密码。

状态监控

通过以下命令检查控制器日志:

kubectl logs -n kube-system deployment/sealed-secrets-controller -f

正常解密会显示类似日志:

2023/10/23 08:15:02 Updating secret default/db-credentials

常见问题解决

权限错误

症状Error from server (Forbidden)
解决:检查ClusterRoleBinding是否正确创建:

kubectl describe clusterrolebinding sealed-secrets-controller

解密失败

症状no key could decrypt secret
解决:确认使用的公钥与控制器私钥匹配,重新执行:

kubeseal --fetch-cert > cert.pem

完整故障排查指南见官方文档

生产环境最佳实践

  1. 密钥轮换:每90天更新一次加密密钥对
kubectl delete secret -n kube-system sealed-secrets-key
# 控制器会自动生成新密钥对
  1. 备份私钥
kubectl get secret -n kube-system sealed-secrets-key -o yaml > backup-secrets-key.yaml
  1. 多环境隔离:为不同GKE集群使用独立密钥对

生产环境配置

总结

Sealed Secrets为GKE集群提供了企业级密钥管理方案,通过本文你已掌握:

  • 控制器的三种部署方法(重点Helm和Manifest)
  • 私有GKE集群的网络适配方案
  • 在线/离线两种加密工作流
  • 生产环境的密钥轮换策略

立即访问项目仓库开始实践:

git clone https://gitcode.com/GitHub_Trending/se/sealed-secrets

项目文档库:site/content/docs/latest/
示例配置:docs/examples/

【免费下载链接】sealed-secrets A Kubernetes controller and tool for one-way encrypted Secrets 【免费下载链接】sealed-secrets 项目地址: https://gitcode.com/GitHub_Trending/se/sealed-secrets

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值