首页
/ 在GKE集群上部署Sealed-Secrets的完整指南

在GKE集群上部署Sealed-Secrets的完整指南

2025-07-07 01:42:03作者:郁楠烈Hubert

前言

Sealed-Secrets是一个Kubernetes控制器/操作符,用于将加密的Secret转换为Kubernetes原生Secret。本文将详细介绍如何在Google Kubernetes Engine(GKE)上部署和使用Sealed-Secrets,特别是针对私有GKE集群的特殊配置。

基础安装

在GKE集群上安装Sealed-Secrets前,如果你没有集群管理员权限,需要先创建ClusterRoleBinding:

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

这个绑定将为你提供必要的集群管理员权限来部署Sealed-Secrets控制器。

私有GKE集群的特殊配置

私有GKE集群有一个防火墙阻止控制平面直接与节点通信,这会导致kubeseal无法从控制器获取公钥。我们有两种解决方案:

方案一:离线密封

  1. 获取公钥证书: 由于防火墙阻止直接获取证书,你需要从控制器日志中复制证书内容。

  2. 保存证书: 将日志中的证书内容保存为cert.pem文件

  3. 使用离线模式密封Secret

    kubeseal --cert=cert.pem <secret.yaml >sealed-secret.yaml
    

方案二:配置防火墙规则

此方案允许控制平面与节点通信,需要创建特定的防火墙规则:

  1. 设置环境变量

    CLUSTER_NAME=your-cluster-name
    gcloud config set compute/zone your-zone-or-region
    
  2. 获取控制平面CIDR

    CP_IPV4_CIDR=$(gcloud container clusters describe $CLUSTER_NAME \
      | grep "masterIpv4CidrBlock: " \
      | awk '{print $2}')
    
  3. 获取网络信息

    NETWORK=$(gcloud container clusters describe $CLUSTER_NAME \
      | grep "^network: " \
      | awk '{print $2}')
    
  4. 获取网络目标标签

    NETWORK_TARGET_TAG=$(gcloud compute firewall-rules list \
      --filter network=$NETWORK --format json \
      | jq ".[] | select(.name | contains(\"$CLUSTER_NAME\"))" \
      | jq -r '.targetTags[0]' | head -1)
    
  5. 创建Sealed-Secrets通信规则

    gcloud compute firewall-rules create gke-to-kubeseal-8080 \
      --network "$NETWORK" \
      --allow "tcp:8080" \
      --source-ranges "$CP_IPV4_CIDR" \
      --target-tags "$NETWORK_TARGET_TAG" \
      --priority 1000
    
  6. 创建指标监控规则(可选)

    gcloud compute firewall-rules create gke-to-metrics-8081 \
      --network "$NETWORK" \
      --allow "tcp:8081" \
      --source-ranges "$CP_IPV4_CIDR" \
      --target-tags "$NETWORK_TARGET_TAG" \
      --priority 1000
    

最佳实践建议

  1. 安全考虑

    • 最小权限原则:仅授予必要的权限
    • 定期轮换加密密钥
    • 审计SealedSecret的使用情况
  2. 性能优化

    • 为Sealed-Secrets控制器配置适当的资源请求和限制
    • 考虑在多区域集群中部署多个副本
  3. 监控与告警

    • 设置控制器健康状态监控
    • 监控加密/解密操作失败情况

常见问题排查

  1. 权限问题

    • 确保ClusterRoleBinding正确配置
    • 验证kubectl上下文是否正确
  2. 网络连接问题

    • 检查防火墙规则是否生效
    • 验证控制平面CIDR是否正确
  3. 证书问题

    • 确保证书格式正确
    • 检查证书是否过期

通过本文的指导,你应该能够在GKE集群上成功部署和使用Sealed-Secrets,即使在私有集群环境中也能正常工作。