ゲートキーパー コンポーネントは、Open Policy Agent (OPA) を Container Service for Kubernetes (ACK) クラスターに統合し、Kubernetes ネイティブのカスタムリソース定義 (CRD) を使用してアドミッションポリシーを定義および適用できるようにします。ゲートキーパーを使用すると、ラベル、リソースタイプ、名前空間、その他の属性に基づいて、クラスター内で作成可能なリソースを制御できます。また、名前空間のラベル管理にも利用可能です。
ゲートキーパーの使用を開始するには、以下の手順を実行してください:
-
ACK コンソールの[アドオン] ページからゲートキーパーをインストールします。 詳細については、「コンポーネントの管理」をご参照ください。
-
Rego でポリシー論理を定義する制約テンプレートを作成します。
-
特定の名前空間またはリソースタイプにテンプレートを適用する制約を作成します。
-
制約が、期待通りにリクエストを許可または拒否することを確認します。
OPA の詳細については、「Open Policy Agent」をご参照ください。
仕組み
ゲートキーパーは、Kubernetes のアドミッション Webhook として動作します。リソースの作成または更新リクエストが API サーバーに到達すると、validation.gatekeeper.sh Webhook がそのリクエストをインターセプトし、すべてのアクティブな制約に対して評価を行います。
ポリシーモデルは 2 つのレイヤーで構成されます:
-
ConstraintTemplate:Rego でポリシー論理を定義し、クラスター内に新しいカスタムリソース定義 (CRD) の種類を登録します。
-
Constraint:ConstraintTemplate のインスタンスであり、ポリシーを適用する対象のリソースと、適用するパラメーターを指定します。
ポリシー作成の詳細については、「Gatekeeper の使い方」をご参照ください。
Pod のラベルポリシーの適用
以下の例では、特定の名前空間で作成されるすべての Pod に指定されたラベルを必須とする方法を示します。制約テンプレートの初期化には約 10 秒かかります。制約自体も、アクティブになるまでに約 10 秒かかります。
前提条件
開始する前に、以下の条件を満たしていることを確認してください:
-
ゲートキーパーがインストール済みの ACK クラスター
-
クラスターに接続するよう設定済みの
kubectl
名前空間の作成とラベルの付与
テスト用の名前空間を作成し、制約でマッチングするラベルを付与します:
kubectl create ns test-gatekeeper
kubectl label ns test-gatekeeper name=test-gatekeeper
制約テンプレートの作成
以下の制約テンプレートは、K8sRequiredLabels という新しい CRD 種別を登録し、Rego でポリシー論理を定義します:
kubectl apply -f - <<EOF
apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
name: k8srequiredlabels
spec:
crd:
spec:
names:
kind: K8sRequiredLabels
validation:
openAPIV3Schema:
properties:
labels:
type: array
items:
type: string
targets:
- target: admission.k8s.gatekeeper.sh
rego: |
package k8srequiredlabels
# 必須ラベルがリソースに存在しない場合、違反がトリガーされます。
violation[{"msg": msg, "details": {"missing_labels": missing}}] {
# 入力リソースのすべてのラベルを収集します。
provided := {label | input.review.object.metadata.labels[label]}
# 制約パラメーターで指定されたすべての必須ラベルを収集します。
required := {label | label := input.parameters.labels[_]}
# 必須だが提供されていないラベルの集合を計算します。
missing := required - provided
count(missing) > 0
msg := sprintf("以下のラベルを指定する必要があります:%v", [missing])
}
EOF
制約テンプレートの初期化が完了するまで、約 10 秒待機してください。
制約の作成
以下の制約は、K8sRequiredLabels テンプレートを、name=test-gatekeeper というラベルが付与されたすべての名前空間内のすべての Pod に適用し、各 Pod に gatekeeper-test-label ラベルを必須とします:
kubectl apply -f - <<EOF
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sRequiredLabels
metadata:
name: pod-must-have-gatekeeper-test-label
spec:
match:
kinds:
- apiGroups: [""]
kinds: ["Pod"]
namespaceSelector:
matchExpressions:
- key: name
operator: In
values: ["test-gatekeeper"]
parameters:
labels: ["gatekeeper-test-label"]
EOF
制約がアクティブになるまで、約 10 秒待機してください。
制約の検証
以下のテストを実行して、制約が正しく動作することを確認します。
テスト 1:必須ラベルのない Pod は拒否されます。
kubectl -n test-gatekeeper run test-deny --image=nginx --restart=Never
予期される出力:
Error from server ([denied by pod-must-have-gatekeeper-test-label] you must provide labels: {"gatekeeper-test-label"}): admission webhook "validation.gatekeeper.sh" denied the request: [denied by pod-must-have-gatekeeper-test-label] you must provide labels: {"gatekeeper-test-label"}
この Pod は拒否されます。理由は、test-gatekeeper 名前空間が制約のセレクターと一致し、かつ Pod に gatekeeper-test-label ラベルが付与されていないためです。
テスト 2:必須ラベル付きの Pod は許可されます。
kubectl -n test-gatekeeper run test-pass -l gatekeeper-test-label=pass --image=nginx --restart=Never
予期される出力:
pod/test-pass created
この Pod は許可されます。理由は、gatekeeper-test-label ラベルが付与されているためです。
テスト 3:制約が適用されない名前空間内の Pod は許可されます。
kubectl -n default run test-deny --image=nginx --restart=Never
予期される出力:
pod/test-deny created
default 名前空間には name=test-gatekeeper ラベルが付与されていないため、この制約は適用されません。
リリースノート
2025 年 3 月
|
バージョン |
イメージアドレス |
リリース日 |
説明 |
影響 |
|
v3.18.2.192-ge2860248-aliyun |
registry-cn-hangzhou.ack.aliyuncs.com/acs/gatekeeper:v3.18.2.192-ge2860248-aliyun |
2025-03-04 |
|
コンポーネントの更新中に例外が発生した場合、クラスター内のリソース変更が失敗する可能性があります。更新は、トラフィックが少ない時間帯に実施してください。 |
2024 年 12 月
|
バージョン |
イメージアドレス |
リリース日 |
説明 |
影響 |
|
v3.17.1.174-g6383c639-aliyun |
registry-cn-hangzhou.ack.aliyuncs.com/acs/gatekeeper:v3.17.1.174-g6383c639-aliyun |
2024-12-09 |
OPA Gatekeeper をバージョン 3.17.1 に更新しました。ゲートキーパーコンポーネントは OPA Gatekeeper に依存しています。詳細については、「v3.17.1」をご参照ください。 |
コンポーネントの更新中に例外が発生した場合、クラスター内のリソース変更が失敗する可能性があります。更新は、トラフィックが少ない時間帯に実施してください。 |
2024 年 9 月
|
バージョン |
イメージアドレス |
リリース日 |
説明 |
影響 |
|
v3.16.3.158-g5e73c0ad-aliyun |
registry-cn-hangzhou.ack.aliyuncs.com/acs/gatekeeper:v3.16.3.158-g5e73c0ad-aliyun |
2024-09-25 |
OPA Gatekeeper をバージョン 3.16.3 に更新しました。ゲートキーパーコンポーネントは OPA Gatekeeper に依存しています。詳細については、「v3.16.3」をご参照ください。 |
コンポーネントの更新中に例外が発生した場合、クラスター内のリソース変更が失敗する可能性があります。更新は、トラフィックが少ない時間帯に実施してください。 |
2024 年 3 月
|
バージョン |
イメージアドレス |
リリース日 |
説明 |
影響 |
|
v3.15.1.150-g29b8b2a8-aliyun |
registry-cn-hangzhou.ack.aliyuncs.com/acs/gatekeeper:v3.15.1.150-g29b8b2a8-aliyun |
2024-03-27 |
OPA Gatekeeper をバージョン 3.15.1 に更新しました。ゲートキーパーコンポーネントは OPA Gatekeeper に依存しています。詳細については、「v3.15.1」をご参照ください。 |
コンポーネントの更新中に例外が発生した場合、クラスター内のリソース変更が失敗する可能性があります。更新は、トラフィックが少ない時間帯に実施してください。 |
2023 年 10 月
|
バージョン |
イメージアドレス |
リリース日 |
説明 |
影響 |
|
v3.12.0.138-g1ee37e37-aliyun |
registry-cn-hangzhou.ack.aliyuncs.com/acs/gatekeeper:v3.12.0.138-g1ee37e37-aliyun |
2023-10-09 |
|
コンポーネントの更新中に例外が発生した場合、クラスター内のリソース変更が失敗する可能性があります。更新は、トラフィックが少ない時間帯に実施してください。 |
2023 年 4 月
|
バージョン |
イメージアドレス |
リリース日 |
説明 |
影響 |
|
v3.10.0.130-g0e79597d-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.10.0.130-g0e79597d-aliyun |
2023-04-18 |
|
コンポーネントの更新中に例外が発生した場合、クラスター内のリソース変更が失敗する可能性があります。更新は、トラフィックが少ない時間帯に実施してください。 |
2022 年 6 月
|
バージョン |
イメージアドレス |
リリース日 |
説明 |
影響 |
|
v3.8.1.113-geb7947ef-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.8.1.113-geb7947ef-aliyun |
2022-06-08 |
|
コンポーネントの更新中に例外が発生した場合、クラスター内のリソース変更が失敗する可能性があります。更新は、トラフィックが少ない時間帯に実施してください。 |
2022 年 4 月
|
バージョン |
イメージアドレス |
リリース日 |
説明 |
影響 |
|
v3.7.1.93-gaf375989-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.7.1.93-gaf375989-aliyun |
2022-04-02 |
Mutation 機能は、ACK コンソールの **[アドオン]** ページから有効化できます。デフォルトでは無効化されています。詳細については、「Mutation」をご参照ください。 |
コンポーネントの更新中に例外が発生した場合、クラスター内のリソース変更が失敗する可能性があります。更新は、トラフィックが少ない時間帯に実施してください。 |
2022 年 2 月
|
バージョン |
イメージアドレス |
リリース日 |
説明 |
影響 |
|
v3.7.0.84-gf5fd3ffd-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.7.0.84-gf5fd3ffd-aliyun |
2022-02-15 |
コンポーネントのパフォーマンスを最適化しました。極端なケースにおける異常な CPU 使用率の問題を修正しました。 |
コンポーネントの更新中に例外が発生した場合、クラスター内のリソース変更が失敗する可能性があります。更新は、トラフィックが少ない時間帯に実施してください。 |
2022 年 1 月
|
バージョン |
イメージアドレス |
リリース日 |
説明 |
影響 |
|
v3.7.0.82-gafe4391b-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.7.0.82-gafe4391b-aliyun |
2022-01-14 |
|
コンポーネントの更新中に例外が発生した場合、クラスター内のリソース変更が失敗する可能性があります。更新は、トラフィックが少ない時間帯に実施してください。 |
2021 年 9 月
|
バージョン |
イメージアドレス |
リリース日 |
説明 |
影響 |
|
v3.6.0.62-g156146d-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.6.0.62-g156146d-aliyun |
2021-09-20 |
|
コンポーネントの更新中に例外が発生した場合、クラスター内のリソース変更が失敗する可能性があります。更新は、トラフィックが少ない時間帯に実施してください。 |
2021 年 3 月
|
バージョン |
イメージアドレス |
リリース日 |
説明 |
影響 |
|
v3.3.0.24-8e68abc-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.3.0.24-8e68abc-aliyun |
2021-03-16 |
|
コンポーネントの更新中に例外が発生した場合、クラスター内のリソース変更が失敗する可能性があります。更新は、トラフィックが少ない時間帯に実施してください。 |
2020 年 8 月
|
バージョン |
イメージアドレス |
リリース日 |
説明 |
影響 |
|
v3.1.0.11-24bab09-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.1.0.11-24bab09-aliyun |
2020-08-20 |
OPA Gatekeeper をバージョン 3.1.0-beta.12 に更新しました。OPA Gatekeeper は、ゲートキーパーの基盤となるオープンソースプロジェクトです。ゲートキーパーコンポーネントは OPA Gatekeeper に依存しています。 |
コンポーネントの更新中に例外が発生した場合、クラスター内のリソース変更が失敗する可能性があります。更新は、トラフィックが少ない時間帯に実施してください。 |