GitOpsワークフローにおけるKubernetesシークレットの管理(非推奨)
Kubernetesのシークレットを暗号化されていない形でgit
リポジトリに保存してはいけません。GitOpsワークフローを使用する場合は、以下の手順に従ってシークレットをセキュアに管理することができます。
- シークレットを管理するためにSealed Secretsコントローラーをセットアップします。
- クラスターがGitLabコンテナレジストリからイメージをプルできるように、Docker認証情報をデプロイします。
前提条件
このセットアップには
- GitOpsワークフロー用に設定されたKubernetes用のGitLabエージェント。
- セットアップを完了するためのクラスターへのアクセス。
シークレットを管理するSealed Secretsコントローラのセットアップ
Sealed Secretsコントローラを使用すると、暗号化されたシークレットをgit
リポジトリに安全に保存できます。コントローラはシークレットを標準のKubernetesSecret
kindリソースに復号化します。
-
Sealed Secretsリリースページにアクセスし、最新の
controller.yaml
ファイルをダウンロードしてください。 - GitLabで、Kubernetesマニフェストを含むプロジェクトに移動し、
controller.yaml
ファイルをアップロードします。 - エージェント設定ファイル (
config.yaml
) を開き、必要であれば、paths.glob
パターンを Sealed Secrets マニフェストと一致するように更新します。 - 変更をコミットして GitLab にプッシュします。
-
Sealed Secrets コントローラーが正常にインストールされたことを確認します:
kubectl get pods -lname=sealed-secrets-controller -n kube-system
- SealedSecretsの説明書に従い、
kubeseal
コマンドラインユーティリティをインストールします。 -
クラスターに直接アクセスせずにシークレットを暗号化するために必要な公開鍵を取得します:
kubeseal --fetch-cert > public.pem
- リポジトリに公開鍵をコミットします。
Sealed Secrets コントローラの動作の詳細については、使用法を参照ください。
Docker認証情報のデプロイ
GitLabコンテナレジストリからコンテナをデプロイするには、適切なDockerレジストリ認証情報をクラスターに設定する必要があります。docker-registry
タイプのシークレットをデプロイすることで実現できます。
- 少なくとも
read-registry
の権限を持つ GitLab トークンを生成します。トークンはパーソナルアクセストークンでもプロジェクトアクセストークンでも構いません。 -
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
-
シークレットを
SealedSecret
マニフェストに暗号化します:kubeseal --format=yaml --cert=public.pem < gitlab-credentials.yaml > gitlab-credentials.sealed.yaml