Komponen gatekeeper mengintegrasikan Open Policy Agent (OPA) ke dalam kluster Container Service for Kubernetes (ACK), memungkinkan Anda menentukan dan menerapkan kebijakan admission menggunakan Custom Resource Definitions (CRD) native Kubernetes. Gunakan gatekeeper untuk mengontrol resource yang dapat dibuat di kluster berdasarkan label, jenis resource, namespace, dan atribut lainnya, serta untuk mengelola label namespace.
Untuk mulai menggunakan gatekeeper, ikuti langkah-langkah berikut:
-
Instal gatekeeper dari halaman Add-ons di Konsol ACK. Lihat Manage components.
-
Buat templat constraint yang mendefinisikan logika kebijakan dalam Rego.
-
Buat constraint yang menerapkan templat tersebut ke namespace atau jenis resource tertentu.
-
Verifikasi bahwa constraint mengizinkan atau menolak permintaan sesuai harapan.
Untuk informasi lebih lanjut tentang OPA, lihat Open Policy Agent.
Cara kerja
Gatekeeper beroperasi sebagai admission webhook Kubernetes. Ketika permintaan pembuatan atau pembaruan resource mencapai API server, webhook validation.gatekeeper.sh mencegat permintaan tersebut dan mengevaluasinya terhadap semua constraint aktif.
Model kebijakan terdiri dari dua lapisan:
-
ConstraintTemplate: mendefinisikan logika kebijakan dalam Rego dan mendaftarkan jenis Custom Resource Definition (CRD) baru di kluster.
-
Constraint: instans dari ConstraintTemplate yang menentukan resource yang dikenai kebijakan beserta parameter yang harus diterapkan.
Untuk informasi lebih lanjut tentang penyusunan kebijakan, lihat How to use Gatekeeper.
Terapkan kebijakan label pod
Contoh berikut menunjukkan cara mewajibkan semua pod yang dibuat di namespace tertentu memiliki label yang ditentukan. Templat constraint memerlukan waktu sekitar 10 detik untuk diinisialisasi, dan constraint itu sendiri juga membutuhkan waktu sekitar 10 detik hingga aktif.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
-
Kluster ACK dengan gatekeeper yang telah diinstal
-
kubectlyang dikonfigurasi untuk menyambungkan ke kluster
Buat namespace dan beri label
Buat namespace uji coba dan tambahkan label yang akan dicocokkan oleh constraint:
kubectl create ns test-gatekeeper
kubectl label ns test-gatekeeper name=test-gatekeeper
Buat templat constraint
Templat constraint berikut mendaftarkan jenis CRD baru bernama K8sRequiredLabels dan mendefinisikan logika kebijakan dalam 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
# Pelanggaran dipicu ketika label yang diperlukan tidak ada pada resource.
violation[{"msg": msg, "details": {"missing_labels": missing}}] {
# Kumpulkan semua label pada resource yang masuk.
provided := {label | input.review.object.metadata.labels[label]}
# Kumpulkan semua label yang diperlukan oleh parameter constraint.
required := {label | label := input.parameters.labels[_]}
# Hitung himpunan label yang diperlukan tetapi tidak disediakan.
missing := required - provided
count(missing) > 0
msg := sprintf("you must provide labels: %v", [missing])
}
EOF
Tunggu sekitar 10 detik hingga templat constraint selesai diinisialisasi sebelum melanjutkan.
Buat constraint
Buat constraint yang menerapkan templat K8sRequiredLabels ke semua pod di namespace apa pun yang diberi label name=test-gatekeeper, sehingga setiap pod wajib memiliki label 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
Tunggu sekitar 10 detik hingga constraint menjadi aktif.
Verifikasi constraint
Jalankan pengujian berikut untuk memastikan constraint berperilaku sesuai harapan.
Uji 1: Pod tanpa label yang diperlukan ditolak.
kubectl -n test-gatekeeper run test-deny --image=nginx --restart=Never
Output yang diharapkan:
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 ditolak karena namespace test-gatekeeper sesuai dengan selector constraint dan pod tidak memiliki label gatekeeper-test-label.
Uji 2: Pod dengan label yang diperlukan diizinkan.
kubectl -n test-gatekeeper run test-pass -l gatekeeper-test-label=pass --image=nginx --restart=Never
Output yang diharapkan:
pod/test-pass created
Pod diterima karena memiliki label gatekeeper-test-label.
Uji 3: Pod di namespace yang tidak dibatasi diizinkan.
kubectl -n default run test-deny --image=nginx --restart=Never
Output yang diharapkan:
pod/test-deny created
Namespace default tidak memiliki label name=test-gatekeeper, sehingga constraint tidak berlaku.
Catatan rilis
Maret 2025
|
Version |
Image address |
Release date |
Description |
Impact |
|
v3.18.2.192-ge2860248-aliyun |
registry-cn-hangzhou.ack.aliyuncs.com/acs/gatekeeper:v3.18.2.192-ge2860248-aliyun |
2025-03-04 |
|
Jika terjadi pengecualian selama pembaruan komponen, perubahan pada resource kluster mungkin gagal. Lakukan pembaruan selama jam sepi. |
Desember 2024
|
Version |
Image address |
Release date |
Description |
Impact |
|
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 diperbarui ke versi 3.17.1. Komponen gatekeeper bergantung pada OPA Gatekeeper. Untuk informasi lebih lanjut, lihat v3.17.1. |
Jika terjadi pengecualian selama pembaruan komponen, perubahan pada resource kluster mungkin gagal. Lakukan pembaruan selama jam sepi. |
September 2024
|
Version |
Image address |
Release date |
Description |
Impact |
|
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 diperbarui ke versi 3.16.3. Komponen gatekeeper bergantung pada OPA Gatekeeper. Untuk informasi lebih lanjut, lihat v3.16.3. |
Jika terjadi pengecualian selama pembaruan komponen, perubahan pada resource kluster mungkin gagal. Lakukan pembaruan selama jam sepi. |
Maret 2024
|
Version |
Image address |
Release date |
Description |
Impact |
|
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 diperbarui ke versi 3.15.1. Komponen gatekeeper bergantung pada OPA Gatekeeper. Untuk informasi lebih lanjut, lihat v3.15.1. |
Jika terjadi pengecualian selama pembaruan komponen, perubahan pada resource kluster mungkin gagal. Lakukan pembaruan selama jam sepi. |
Oktober 2023
|
Version |
Image address |
Release date |
Description |
Impact |
|
v3.12.0.138-g1ee37e37-aliyun |
registry-cn-hangzhou.ack.aliyuncs.com/acs/gatekeeper:v3.12.0.138-g1ee37e37-aliyun |
2023-10-09 |
|
Jika terjadi pengecualian selama pembaruan komponen, perubahan pada resource kluster mungkin gagal. Lakukan pembaruan selama jam sepi. |
April 2023
|
Version |
Image address |
Release date |
Description |
Impact |
|
v3.10.0.130-g0e79597d-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.10.0.130-g0e79597d-aliyun |
2023-04-18 |
|
Jika terjadi pengecualian selama pembaruan komponen, perubahan pada resource kluster mungkin gagal. Lakukan pembaruan selama jam sepi. |
Juni 2022
|
Version |
Image address |
Release date |
Description |
Impact |
|
v3.8.1.113-geb7947ef-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.8.1.113-geb7947ef-aliyun |
2022-06-08 |
|
Jika terjadi pengecualian selama pembaruan komponen, perubahan pada resource kluster mungkin gagal. Lakukan pembaruan selama jam sepi. |
April 2022
|
Version |
Image address |
Release date |
Description |
Impact |
|
v3.7.1.93-gaf375989-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.7.1.93-gaf375989-aliyun |
2022-04-02 |
Fitur Mutation dapat diaktifkan di halaman Add-ons Konsol ACK. Fitur ini dinonaktifkan secara default. Untuk informasi lebih lanjut, lihat Mutation. |
Jika terjadi pengecualian selama pembaruan komponen, perubahan pada resource kluster mungkin gagal. Lakukan pembaruan selama jam sepi. |
Februari 2022
|
Version |
Image address |
Release date |
Description |
Impact |
|
v3.7.0.84-gf5fd3ffd-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.7.0.84-gf5fd3ffd-aliyun |
2022-02-15 |
Kinerja komponen dioptimalkan. Pemanfaatan CPU abnormal dalam kasus ekstrem telah diperbaiki. |
Jika terjadi pengecualian selama pembaruan komponen, perubahan pada resource kluster mungkin gagal. Lakukan pembaruan selama jam sepi. |
Januari 2022
|
Version |
Image address |
Release date |
Description |
Impact |
|
v3.7.0.82-gafe4391b-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.7.0.82-gafe4391b-aliyun |
2022-01-14 |
|
Jika terjadi pengecualian selama pembaruan komponen, perubahan pada resource kluster mungkin gagal. Lakukan pembaruan selama jam sepi. |
September 2021
|
Version |
Image address |
Release date |
Description |
Impact |
|
v3.6.0.62-g156146d-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.6.0.62-g156146d-aliyun |
2021-09-20 |
|
Jika terjadi pengecualian selama pembaruan komponen, perubahan pada resource kluster mungkin gagal. Lakukan pembaruan selama jam sepi. |
Maret 2021
|
Version |
Image address |
Release date |
Description |
Impact |
|
v3.3.0.24-8e68abc-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.3.0.24-8e68abc-aliyun |
2021-03-16 |
|
Jika terjadi pengecualian selama pembaruan komponen, perubahan pada resource kluster mungkin gagal. Lakukan pembaruan selama jam sepi. |
Agustus 2020
|
Version |
Image address |
Release date |
Description |
Impact |
|
v3.1.0.11-24bab09-aliyun |
registry.cn-hangzhou.aliyuncs.com/acs/gatekeeper:v3.1.0.11-24bab09-aliyun |
2020-08-20 |
OPA Gatekeeper diperbarui ke versi 3.1.0-beta.12. OPA Gatekeeper adalah proyek open source yang menjadi dasar gatekeeper. Komponen gatekeeper bergantung pada OPA Gatekeeper. |
Jika terjadi pengecualian selama pembaruan komponen, perubahan pada resource kluster mungkin gagal. Lakukan pembaruan selama jam sepi. |