在 GitOps 工作流程中管理 Kubernetes secret

您永远不应该将 Kubernetes secret 以未加密的形式存储在 git 存储库中。如果您使用 GitOps 工作流程,则可以按照以下步骤安全地管理您的 secret。

  1. 设置 Sealed Secrets 控制器来管理 secrets。
  2. 部署 Docker 凭证,以便集群可以从极狐GitLab Container Registry 中提取镜像。

先决条件

此设置需要:

设置 Sealed Secrets 控制器以管理 secrets

您可以使用 Sealed Secrets 控制器 将加密的 secrets 安全地存储在 git 仓库中。控制器将 secret 解密为标准的 Kubernetes Secret 类资源。

  1. 进入 Sealed Secrets 发布页面,下载最新的 controller.yaml 文件。
  2. 在极狐GitLab 中,转到包含 Kubernetes 清单的项目并上传 controller.yaml 文件。
  3. 打开代理配置文件 (config.yaml),如果需要,更新 paths.glob 模板以匹配 Sealed Secrets 清单。
  4. 提交并推送更改到极狐GitLab。
  5. 确认 Sealed Secrets 控制器安装成功:

    kubectl get pods -lname=sealed-secrets-controller -n kube-system
    
  6. 按照 Sealed Secrets 说明,安装 kubeseal 命令行实用程序。
  7. 在不直接访问集群的情况下获取加密秘密所需的公钥:

    kubeseal --fetch-cert > public.pem
    
  8. 将公钥提交到仓库。

有关 Sealed Secrets 控制器如何工作的更多详细信息,请查看使用说明

部署 Docker 凭据

要从极狐GitLab 容器镜像库部署容器,您必须使用正确的 Docker 镜像库凭据配置集群。您可以通过部署 docker-registry 类型的 secrets 来实现此目的。

  1. 生成至少具有 read-registry 权限的极狐GitLab 令牌。令牌可以是个人或项目访问令牌。
  2. 创建 Kubernetes secret 清单 YAML 文件。根据需要更新值:

     kubectl create secret docker-registry gitlab-credentials --docker-server=registry.gitlab.example.com --docker-username=<gitlab-username> --docker-password=<gitlab-token> --docker-email=<gitlab-user-email> -n <namespace> --dry-run=client -o yaml > gitlab-credentials.yaml
    
  3. 将 secret 加密到 SealedSecret 清单中:

    kubeseal --format=yaml --cert=public.pem < gitlab-credentials.yaml > gitlab-credentials.sealed.yaml