Kubernetes

GitLab と Kubernetes の安全な連携と CI/CD 設定ガイド

ⓘ本ページはプロモーションが含まれています

Contents

スポンサードリンク

前提条件と GitLab プロジェクトの作成

1‑1. GitLab アカウント・プロジェクト作成手順

手順 操作内容
GitLab にサインイン → 左上メニュー > 「New project」「Create blank project」 を選択
プロジェクト名は k8s-gitlab-agent など分かりやすく設定。VisibilityPrivate(推奨)
作成後、左サイドバー > 「Settings → CI/CD」Variables タブへ遷移し、後述の protected variables を登録

公式ドキュメント: https://docs.gitlab.com/ee/user/project/settings/#ci-cd-settings


Kubernetes クラスタ要件(バージョン・ネットワーク)

項目 推奨設定 参考リンク
Kubernetes バージョン v1.27 以上(GitLab の公式 Helm chart は >=1.27 <1.31 をサポート) https://docs.gitlab.com/ee/user/clusters/kubernetes.html#supported-kubernetes-versions
Helm Chart バージョン GitLab Agent for Kubernetes v2 用チャートは ~1.5.x 系(2026‑03 時点の最新は 1.5.4) https://docs.gitlab.com/charts/agent/
ネットワークアクセス Runner / Agent がクラスタ API エンドポイントへ Outbound 接続できる VPC/サブネットを使用。ファイアウォールで 443/tcp を許可 同上
RBAC デフォルトで cluster-admin は不要。最小権限の ServiceAccount と Role/RoleBinding だけで Flux と Helm の操作が可能 https://docs.gitlab.com/ee/user/clusters/kubernetes.html#rbac-requirements

protected variables の設定例とスコープ拡張

2‑1. 基本的な変数一覧

変数名 用途 推奨属性
KUBE_API_URL クラスタ API エンドポイント Protected, Masked
KUBE_TOKEN ServiceAccount トークン Protected, Masked
GITLAB_AGENT_TOKEN GitLab Agent v2 用トークン Protected, Masked
FLUX_GITLAB_TOKEN Flux が GitLab にアクセスする Personal Access Token(api スコープ) Protected, Masked

2‑2. スコープ例のバリエーション

変数名 Environment scope 有効になるブランチ・タグ
KUBE_TOKEN production main, release/*(保護ブランチ)
KUBE_TOKEN_STAGING staging develop, feature/*(保護なしでも OK)
FLUX_GITLAB_TOKEN (全環境) タグ (v*.*.*) と main のみ(Protected)
HELM_VALUES preview MR 用ブランチ mr-*/** で自動生成

ポイント
- Protected が付いている変数は、保護されたブランチ/タグ(GitLab の「Protected branches」設定に含まれる)からしか参照できません。
- 環境スコープを利用すると、production 用トークンが staging で誤って使用されるリスクを防げます。

公式ガイド: https://docs.gitlab.com/ee/ci/variables/#protected-environment-variables


GitLab Agent for Kubernetes (v2) のトークン取得と Helm デプロイ

3‑1. エージェントトークン作成手順

手順 操作
プロジェクト左メニュー > 「Infrastructure → Kubernetes clusters」 を開く
「Add a new cluster」→「Connect a cluster using the GitLab Agent」を選択
「Create new agent」 ボタンをクリックし、エージェント名(例:prod-agent)を入力
作成完了後に表示される Agent token をコピー

手順は GitLab Docs の Connect a cluster using the GitLab Agent に詳述: https://docs.gitlab.com/ee/user/clusters/agent/

3‑2. Kubernetes シークレット作成(CI 環境で実行する例)

  • シークレット名は Helm chart のデフォルト gitlab-agent-token に合わせておくと、values.yaml が簡潔になる。

3‑3. Helm chart を用いたエージェントインストール

Helm chart の公式インストールガイド: https://docs.gitlab.com/charts/agent/


Flux + Helm による GitOps 基盤構築

4‑1. Flux CLI インストール(Linux/macOS)

公式インストーラ: https://fluxcd.io/installation/

4‑2. flux bootstrap gitlab による初期化

4‑3. HelmRelease マニフェスト例

HelmRepository の作成例は公式ドキュメント参照: https://fluxcd.io/docs/components/source/helmrepositories/

4‑4. Git リポジトリ構成(ベストプラクティス)

  • 環境別ディレクトリ (clusters/production, clusters/staging) にそれぞれ kustomization.yaml を置くことで、同一リポジトリで複数環境を管理できる。
  • Review Apps 用ブランチ(例:feature/*)は clusters/preview/<branch>/ を追加すれば自動的に別名前空間へデプロイ可能。

公式ガイド: https://fluxcd.io/docs/guides/gitops/


.gitlab-ci.yml の最新記法(rules)とサンプルパイプライン

5‑1. only: / except: を廃止し、rules: に置き換える理由

  • GitLab 15.0 以降で非推奨となり、将来的に削除される。
  • rules:ブランチ・タグ・マージリクエスト それぞれの条件を柔軟に組み合わせられる。

5‑2. 完全サンプル(文字数増加・コメント付与)

主な変更点

変更前 変更後
only: / except: rules: に統一し、ブランチ・タグ・MR を個別に判定
protected variables の利用範囲が限定的 KUBE_CONFIG_CONTENT(本番用)、SSH_DEPLOY_KEY(GitOps 用)など、スコープごとに変数を分離
手動デプロイは when: manual + rules: でタグ・保護ブランチのみ許可 同上

values.yaml の実践的な例(replicaCount・resources 等)

以下は GitLab Agent for Kubernetes自前アプリケーション 両方に共通して使える設定例です。実運用では環境ごとに values.production.yaml / values.staging.yaml などを分割すると管理が楽になります。

詳細は公式チャートリファレンス → Values セクションに記載されています。
https://docs.gitlab.com/charts/agent/#values


運用ベストプラクティス、Review Apps、トラブルシューティング

7‑1. Review Apps の自動作成とクリーンアップ

手順 内容
Settings → CI/CD → EnvironmentsReview apps を有効化
.gitlab-ci.ymlreview_appstop_review_app ジョブを追加(上記参照)
マージリクエストが閉じられたら stop_review_app が手動または自動で名前空間と Helm リリースを削除

7‑2. RBAC・シークレット管理の最小権限化

  • ポイントcluster-admin を付与しない。必要最小限の API (pods, services, secrets) のみ許可する。

7‑3. シークレット暗号化と GitOps への安全な保存

  • GitOps でのベストプラクティス:シークレットはリポジトリに SealedSecret(bitnami/sealed-secrets)や SOPS 暗号化ファイルとして保存し、Flux が自動復元できる形にする。

7‑4. 典型的なエラーと対処フロー

症状 原因例 確認手順 推奨解決策
Agent が Disconnected gitlab-agent-token と UI のトークンが不一致 kubectl -n gitlab-agent get secret gitlab-agent-token -o yaml → token をデコードして比較 正しいトークンでシークレット再作成し、Helm リリースを helm upgrade --install で再適用
Flux が Failed to reconcile HelmRepository の認証情報が欠如 kubectl -n flux-system get helmrepositories -o yamlspec.secretRef.name を確認 flux create secret gitlab --url <repo> --personal-token $FLUX_GITLAB_TOKEN で Secret 作成し、HelmRepository に参照させる
CI ジョブで 403 Forbidden protected variable が保護されていないブランチから参照された パイプラインの Variables タブ → Protected チェック状態を確認 保護対象ブランチ(例:main, release/*)に限定し、.gitlab-ci.ymlrules: で条件付ける

詳細は GitLab Docs 「Kubernetes クラスタを GitLab に接続する手順」および「Flux トラブルシューティングガイド」に掲載。


まとめ

項目 要点
前提条件 GitLab プロジェクト作成 → K8s バージョン (≥ 1.27) 確認 → protected variables の適切なスコープ設定
エージェントトークン UI で取得 → gitlab-agent-token シークレット化 → Helm chart (gitlab/gitlab-agent) でデプロイ
GitOps 基盤 flux bootstrap gitlab により Flux + Helm の自動同期環境構築。HelmRelease でアプリ管理
CI/CD パイプライン rules: を用いた条件分岐、protected variables と environment scopes の併用で安全性確保
運用ベストプラクティス Review Apps 自動生成、最小権限 RBAC、シークレット暗号化(SealedSecret/SOPS)
トラブルシューティング 接続失敗・Flux 同期エラー・CI 権限エラーの典型パターンと対処フローを把握

これらの手順と設定をそのまま適用すれば、GitLab と Kubernetes の安全な連携が確立し、コード変更から本番環境へのデプロイまでが完全に自動化された GitOps ワークフローとして運用できます。


この記事は 2026 年 4 月時点の公式情報を元に作成しています。バージョンや API の変更が生じた場合は、必ず最新の公式ドキュメントをご確認ください。

スポンサードリンク

-Kubernetes