GitOpsワークフローにおけるKubernetesシークレットの管理(非推奨)

caution
この機能はGitLab 16.2で非推奨となりました。GitOpsでクラスターのリソースを管理するには、Fluxインテグレーションを使う必要があります。

Kubernetesのシークレットを暗号化されていない形でgit リポジトリに保存してはいけません。GitOpsワークフローを使用する場合は、以下の手順に従ってシークレットをセキュアに管理することができます。

  1. シークレットを管理するためにSealed Secretsコントローラーをセットアップします。
  2. クラスターがGitLabコンテナレジストリからイメージをプルできるように、Docker認証情報をデプロイします。

前提条件

このセットアップには

シークレットを管理するSealed Secretsコントローラのセットアップ

Sealed Secretsコントローラを使用すると、暗号化されたシークレットをgit リポジトリに安全に保存できます。コントローラはシークレットを標準のKubernetesSecret kindリソースに復号化します。

  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. SealedSecretsの説明書に従い、kubeseal コマンドラインユーティリティをインストールします。
  7. クラスターに直接アクセスせずにシークレットを暗号化するために必要な公開鍵を取得します:

    kubeseal --fetch-cert > public.pem
    
  8. リポジトリに公開鍵をコミットします。

Sealed Secrets コントローラの動作の詳細については、使用法を参照ください。

Docker認証情報のデプロイ

GitLabコンテナレジストリからコンテナをデプロイするには、適切なDockerレジストリ認証情報をクラスターに設定する必要があります。docker-registry タイプのシークレットをデプロイすることで実現できます。

  1. 少なくともread-registry の権限を持つ GitLab トークンを生成します。トークンはパーソナルアクセストークンでもプロジェクトアクセストークンでも構いません。
  2. Kubernetesシークレットマニフェスト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. シークレットをSealedSecret マニフェストに暗号化します:

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