GitLabチャートのRBAC設定
Kubernetes 1.7までは、クラスター内の権限はありませんでした。1.7のローンチにより、クラスター内でどのサービスがアクションを実行できるかを決定するロールベースのアクセス制御システム(RBAC)が導入されました。
RBACはGitLabのいくつかの異なる側面に影響を与えます:
- Helmを使ったGitLabのインストール
- Prometheus モニタリング
- GitLab Runner
- クラスター内のPostgreSQLデータベース(RBACが有効な場合)
- 証明書マネージャ
RBACが有効になっていることの確認
現在のクラスターのロールをリストアップしてみて、失敗したらRBAC
。
このコマンドは、RBAC
が無効な場合はfalse
、そうでない場合はtrue
を出力します。
kubectl get clusterroles > /dev/null 2>&1 && echo true || echo false
サービスアカウント
GitLab Chartは特定のタスクを実行するためにServiceアカウントを使用します。これらのアカウントと関連するロールはChartによって作成・管理されます。
サービスアカウントは以下の表で説明されています。それぞれのサービスアカウントについて、表は次のようになっています:
- 名前の接尾辞(接頭辞はリリース名)。
- 簡単な説明。例えば、どこで使われているか、何に使われているかなど。
- 関連するロールと、どのリソースにどのレベルでアクセスできるか。アクセス・レベルは、読み取り専用(R) 、書き込み専用(W)、または読み取り/書き込み(RW)のいずれかです。リソースのグループ名は省略されます。
- ロールのスコープ。これはクラスター(C) または名前空間(NS)のいずれかです。インスタンスによっては、ロールのスコープはどちらかの値で設定できます(NS/Cで示されます)。
名前接尾辞 | 説明 | ロール | スコープ |
---|---|---|---|
gitlab-runner | GitLab Runnerはこのアカウントで実行されます。 | リソース(RW) | NS/C |
ingress-nginx | NGINX Ingress がサービスのアクセスポイントを制御するために使用します。 | シークレット、ポッド、エンドポイント、イングレス(R); イベント(W); コンフィグマップ、サービス(RW) | NS/C |
shared-secrets | 共有シークレットを作成するジョブはこのアカウントで実行されます。(プリインストール/アップグレードフックで) | シークレット(RW) | NS |
cert-manager | 証明書マネージャを制御するジョブは、このアカウントで実行されます。 | 発行者、証明書、CertificateRequest、順序(RW) | NS/C |
GitLab Chartは他のChartもRBACを使っていて、独自のサービスアカウントやロールバインディングを作成していることに依存しています。以下はその概要です:
- Prometheus monitoringはデフォルトで複数の独自のサービスアカウントを作成します。これらはすべてクラスター・レベルのロールに関連付けられます。詳細はPrometheusのChartドキュメントを参照してください。
- Certificate managerはデフォルトでサービスアカウントを作成し、クラスター・レベルのネイティブ・リソースとともにカスタム・リソースを管理します。詳細については、cert-managerチャートRBACテンプレートを参照してください。
- クラスタ内でPostgreSQLデータベースを使用する場合(これがデフォルトです)、サービスアカウントは有効になりません。有効にすることはできますが、PostgreSQLサービスの実行にのみ使用され、特定のロールには関連付けられません。詳細はPostgreSQLのChartを参照してください。