Halaman ini menjelaskan cara mengonfigurasi kebijakan jaringan di seluruh cluster untuk Google Kubernetes Engine (GKE).
Kebijakan jaringan dan kebijakan jaringan FQDN membantu Anda menentukan aturan traffic komunikasi antar-Pod. Kebijakan jaringan mengontrol cara Pod berkomunikasi satu sama lain dalam aplikasinya dan dengan endpoint eksternal.
Sebagai administrator cluster, Anda dapat mengonfigurasi kebijakan jaringan seluruh cluster Cilium (CCNP), yang mengatasi batasan kebijakan jaringan untuk mengelola traffic administratif seluruh cluster. Kebijakan jaringan seluruh cluster Cilium menerapkan aturan jaringan untuk semua workload di seluruh cluster. Dalam hierarki evaluasi kebijakan GKE, kebijakan ini berada di tingkat NetworkPolicy. Meskipun aturan Tolak eksplisit dalam CCNP menggantikan aturan izin dalam kebijakan cakupan namespace, aturan Izinkan CCNP memiliki prioritas yang sama dengan kebijakan namespace standar.
Semua aturan CCNP tunduk pada kebijakan di tingkat Admin.
Kebijakan jaringan cakupan cluster Cilium untuk GKE adalah CustomResourceDefinition (CRD) cakupan cluster yang menentukan kebijakan yang diterapkan oleh GKE. Dengan mengaktifkan kebijakan jaringan di seluruh cluster Cilium di GKE, Anda dapat mengelola aturan jaringan secara terpusat untuk seluruh cluster. Anda dapat mengontrol akses Layer 3 (tingkat IP) dan Layer 4 (tingkat port) dasar untuk traffic yang masuk dan keluar dari cluster.
Manfaat
Dengan kebijakan jaringan Cilium di seluruh cluster, Anda dapat:
- Menerapkan keamanan terpusat: dengan CCNP, Anda dapat menentukan aturan akses jaringan yang berlaku untuk seluruh cluster Anda. Aturan ini menggantikan kebijakan yang berpotensi bertentangan di tingkat namespace jika merupakan aturan Tolak eksplisit. Aturan Allow CCNP berada di tingkat yang sama dengan kebijakan namespace standar. Untuk mandat, gunakan tingkat Admin
di
ClusterNetworkPolicy. - Melindungi multi-tenancy: jika cluster Anda menghosting beberapa tim atau tenant, Anda dapat mengamankan isolasi dalam cluster bersama dengan menerapkan aturan CCNP, yang berfokus pada kontrol traffic jaringan. Anda dapat menerapkan pemisahan tingkat jaringan dengan menetapkan namespace atau grup namespace ke tim tertentu.
- Menentukan kebijakan default yang fleksibel: dengan CCNP, Anda dapat menentukan aturan jaringan default untuk seluruh cluster. Anda dapat menyesuaikan aturan ini jika diperlukan tanpa mengorbankan keamanan cluster secara keseluruhan.
Untuk menerapkan CCNP, aktifkan GKE Dataplane V2 di cluster Anda. Pastikan CustomResourceDefinition CCNP diaktifkan, lalu buat kebijakan yang menentukan aturan akses jaringan untuk cluster Anda.
Sebelum memulai
Sebelum memulai, pastikan Anda telah melakukan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Untuk menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
lakukan inisialisasi
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah
gcloud components update. Versi gcloud CLI yang lebih lama mungkin tidak mendukung menjalankan perintah dalam dokumen ini.
Persyaratan
Kebijakan jaringan seluruh cluster Cilium memiliki persyaratan berikut:
- Google Cloud CLI versi 465.0.0 atau yang lebih baru.
- Anda harus memiliki cluster GKE yang menjalankan salah satu versi berikut:
- 1.28.6-gke.1095000 atau yang lebih baru
- 1.29.1-gke.1016000 atau yang lebih baru
- Cluster Anda harus menggunakan GKE Dataplane V2.
- Anda harus mengaktifkan CustomResourceDefinition kebijakan jaringan di seluruh cluster Cilium.
Batasan
Kebijakan jaringan Cilium di seluruh cluster memiliki batasan berikut:
- Kebijakan Lapisan 7 tidak didukung.
- Pemilih node tidak didukung.
- Jumlah maksimum
CiliumClusterwideNetworkPolicyper cluster adalah 1000.
Mengaktifkan kebijakan jaringan Cilium di seluruh cluster dalam cluster baru
Anda dapat mengaktifkan kebijakan jaringan di seluruh cluster Cilium di cluster baru menggunakan Google Cloud CLI atau Kubernetes Engine API.
gcloud
Untuk mengaktifkan kebijakan jaringan seluruh cluster Cilium di cluster baru, buat cluster baru dengan flag --enable-cilium-clusterwide-network-policy.
Autopilot
gcloud container clusters create-auto CLUSTER_NAME \
--location COMPUTE_LOCATION \
--enable-cilium-clusterwide-network-policy
Ganti kode berikut:
CLUSTER_NAMEdengan nama cluster Anda.COMPUTE_LOCATIONdengan lokasi cluster Anda.
Standar
gcloud container clusters create CLUSTER_NAME \
--location COMPUTE_LOCATION \
--enable-cilium-clusterwide-network-policy \
--enable-dataplane-v2
Ganti kode berikut:
CLUSTER_NAMEdengan nama cluster Anda.COMPUTE_LOCATIONdengan lokasi cluster Anda.
API
Untuk mengaktifkan kebijakan jaringan seluruh cluster Cilium, Anda harus menentukan opsi berikut saat membuat cluster baru:
Kolom datapathProvider dalam objek networkConfig.
{
"cluster": {
...
"networkConfig": {
"datapathProvider": "ADVANCED_DATAPATH",
"enableCiliumClusterwideNetworkPolicy": true
}
}
}
Pastikan ciliumclusterwidenetworkpolicies.cilium.io
CustomResourceDefinition ada dalam output perintah berikut:
kubectl get crds ciliumclusterwidenetworkpolicies.cilium.io
Outputnya akan mirip dengan berikut ini:
ciliumclusterwidenetworkpolicies.cilium.io 2023-09-19T16:54:48Z
Mengaktifkan kebijakan jaringan seluruh cluster Cilium di cluster yang ada
Anda dapat mengaktifkan kebijakan jaringan seluruh cluster Cilium di cluster yang ada menggunakan Google Cloud CLI atau Kubernetes Engine API.
gcloud
Pastikan cluster telah mengaktifkan GKE Dataplane V2.
gcloud container clusters describe CLUSTER_NAME \ --location COMPUTE_LOCATION \ --format="value(networkConfig.datapathProvider)" \Ganti kode berikut:
CLUSTER_NAMEdengan nama cluster Anda.COMPUTE_LOCATIONdengan lokasi cluster Anda.
Perbarui cluster menggunakan flag
--enable-cilium-clusterwide-network-policy.gcloud container clusters update CLUSTER_NAME \ --location COMPUTE_LOCATION \ --enable-cilium-clusterwide-network-policyMulai ulang DaemonSet anetd.
kubectl rollout restart ds -n kube-system anetd && \ kubectl rollout status ds -n kube-system anetd
API
Pastikan cluster diaktifkan untuk GKE Dataplane V2:
{
"update": {
"desiredEnableCiliumClusterwideNetworkPolicy": true
},
"name": "cluster"
}
To update an existing cluster, run the following update cluster command:
{
"update": {
"desiredEnableCiliumClusterwideNetworkPolicy": true
}
"name": "cluster"
}
Pastikan CustomResourceDefinition ciliumclusterwidenetworkpolicies.cilium.io ada di
output perintah berikut:
kubectl get crds ciliumclusterwidenetworkpolicies.cilium.io
Outputnya akan mirip dengan berikut ini:
ciliumclusterwidenetworkpolicies.cilium.io 2023-09-19T16:54:48Z
Menggunakan kebijakan jaringan seluruh cluster Cilium
Bagian ini mencantumkan contoh untuk mengonfigurasi kebijakan jaringan seluruh cluster Cilium.
Contoh 1: Mengontrol traffic masuk ke workload
Contoh berikut memungkinkan semua endpoint dengan label role=backend menerima koneksi ingress di port 80 dari endpoint dengan label role=frontend. Endpoint dengan label role=backend akan menolak semua koneksi ingress
yang tidak diizinkan oleh kebijakan ini.
Simpan manifes berikut sebagai
l4-rule-ingress.yaml:apiVersion: "cilium.io/v2" kind: CiliumClusterwideNetworkPolicy metadata: name: "l4-rule-ingress" spec: endpointSelector: matchLabels: role: backend ingress: - fromEndpoints: - matchLabels: role: frontend toPorts: - ports: - port: "80" protocol: TCPTerapkan manifes:
kubectl apply -f l4-rule-ingress.yaml
Contoh 2: Membatasi traffic keluar dari workload pada port tertentu
Aturan berikut membatasi semua endpoint dengan label app=myService agar hanya
dapat mengirimkan paket menggunakan TCP di port 80, ke tujuan Lapisan 3 mana pun:
Simpan manifes berikut sebagai
l4-rule-egress.yaml:apiVersion: "cilium.io/v2" kind: CiliumClusterwideNetworkPolicy metadata: name: "l4-rule-egress" spec: endpointSelector: matchLabels: app: myService egress: - toPorts: - ports: - port: "80" protocol: TCPTerapkan manifes:
kubectl apply -f l4-rule-egress.yaml
Contoh 3: Membatasi traffic keluar dari workload pada port dan CIDR tertentu
Contoh berikut membatasi semua endpoint dengan label role=crawler agar hanya
dapat mengirim paket di port 80, protokol TCP, ke CIDR tujuan
192.10.2.0/24.
Simpan manifes berikut sebagai
cidr-l4-rule.yaml:apiVersion: "cilium.io/v2" kind: CiliumClusterwideNetworkPolicy metadata: name: "cidr-l4-rule" spec: endpointSelector: matchLabels: role: crawler egress: - toCIDR: - 192.0.2.0/24 toPorts: - ports: - port: "80" protocol: TCPTerapkan manifes:
kubectl apply -f cidr-l4-rule.yaml
Memantau dan memecahkan masalah traffic jaringan
Anda dapat memantau dan memecahkan masalah traffic jaringan yang terpengaruh oleh kebijakan jaringan di seluruh cluster cilium dengan Logging kebijakan jaringan dan Kemampuan observasi GKE Dataplane V2.
Mencoba menggunakan kebijakan Lapisan 7 atau pemilih node
Gejala
Jika Anda menggunakan GKE dengan GKE Dataplane V2 dan mencoba menentukan kebijakan CCNP yang mencakup aturan Layer 7 (misalnya: pemfilteran HTTP) dan pemilih node, Anda mungkin melihat pesan error yang serupa dengan berikut ini:
Error
Error from server (GKE Warden constraints violations): error when creating
"ccnp.yaml": admission webhook
"warden-validating.common-webhooks.networking.gke.io" denied the request: GKE
Warden rejected the request because it violates one or more constraints.
Violations details: {"[denied by gke-cilium-network-policy-limitation]":["L7
rules are not allowed in CiliumClusterwideNetworkPolicy"]} Requested by user:
'user@example.com', groups: 'system:authenticated'.
Kemungkinan penyebab
GKE memiliki batasan khusus pada CCNP. Kebijakan Lapisan 7, yang memungkinkan pemfilteran berdasarkan data tingkat aplikasi (seperti header HTTP), dan pemilih node tidak didukung dalam integrasi Cilium GKE.
Resolusi
Jika Anda memerlukan kemampuan pemfilteran Lapisan 7 tingkat lanjut di cluster GKE, pertimbangkan untuk menggunakan Cloud Service Mesh. Hal ini memberikan kontrol traffic tingkat aplikasi yang lebih terperinci.
Kebijakan jaringan seluruh cluster Cilium tidak diaktifkan
Gejala
Saat Anda mencoba mengonfigurasi kebijakan jaringan seluruh cluster Cilium (CCNP) di cluster yang fiturnya belum diaktifkan secara eksplisit, Anda tidak akan dapat mengonfigurasinya dan mungkin akan melihat pesan error yang mirip dengan berikut ini:
Error
error: resource mapping not found for name: "l4-rule" namespace: "" from
"ccnp.yaml": no matches for kind "CiliumClusterwideNetworkPolicy" in version
"cilium.io/v2" ensure CRDs are installed first
Kemungkinan penyebab
Kebijakan jaringan di seluruh cluster Cilium mengandalkan Definisi Resource Kustom (CRD). Pesan error menunjukkan bahwa CustomResourceDefinition tidak ada di cluster.
Resolusi
Aktifkan CustomResourceDefinition kebijakan jaringan seluruh cluster Cilium sebelum menggunakan CCNP.
Langkah berikutnya
Pelajari cara menerapkan batasan keamanan di seluruh cluster menggunakan ClusterNetworkPolicy.
Membaca CiliumClusterwideNetworkPolicy