Halaman ini menjelaskan cara mengonfigurasi kebijakan jaringan tingkat 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 cluster-wide-cluster (CCNP) Cilium, yang akan mengatasi batasan kebijakan jaringan untuk mengelola traffic administratif tingkat cluster. Kebijakan jaringan seluruh cluster Cilium menerapkan aturan jaringan yang ketat untuk semua workload di seluruh cluster, di seluruh namespace, sehingga menggantikan aturan khusus aplikasi.
Kebijakan jaringan seluruh cluster Cilium untuk GKE adalah CustomResourceDefinition (CRD) cakupan cluster yang menentukan kebijakan yang diterapkan oleh GKE. Dengan mengaktifkan kebijakan jaringan seluruh cluster Cilium di GKE, Anda dapat mengelola aturan jaringan secara terpusat untuk seluruh cluster. Anda dapat mengontrol akses dasar Lapisan 3 (level IP) dan Lapisan 4 (tingkat port) untuk traffic yang masuk dan keluar dari cluster.
Manfaat
Dengan kebijakan jaringan seluruh cluster Cilium, Anda dapat:
- Menerapkan keamanan terpusat: Dengan CCNP, Anda dapat menentukan aturan akses jaringan yang berlaku untuk seluruh jaringan Anda. Aturan CCNP ini berfungsi sebagai lapisan keamanan tingkat atas, yang menggantikan kebijakan apa pun yang berpotensi bertentangan di tingkat namespace.
- 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.
- Menetapkan 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 Anda secara keseluruhan.
Untuk mengimplementasikan CCNP, aktifkan GKE Dataplane V2 di cluster Anda. Pastikan CCNP CRD diaktifkan, lalu buat kebijakan yang menentukan aturan akses jaringan untuk cluster Anda.
Sebelum memulai
Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Jika ingin menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
initialize
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan
gcloud components update
.
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 CRD kebijakan jaringan seluruh cluster Cilium.
Batasan
Kebijakan jaringan seluruh cluster Cilium memiliki batasan berikut:
- Kebijakan Lapisan 7 tidak didukung.
- Pemilih node tidak didukung.
- Jumlah maksimum
CiliumClusterwideNetworkPolicy
per cluster adalah 1.000.
Mengaktifkan kebijakan jaringan seluruh cluster Cilium di cluster baru
Anda dapat mengaktifkan kebijakan jaringan seluruh cluster Cilium dalam cluster baru menggunakan Google Cloud CLI atau Google 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_NAME
dengan nama cluster Anda.COMPUTE_LOCATION
dengan lokasi cluster Anda.
Standar
gcloud container clusters create CLUSTER_NAME \
--location COMPUTE_LOCATION \
--enable-cilium-clusterwide-network-policy \
--enable-dataplane-v2
Ganti string berikut:
* CLUSTER_NAME
dengan nama cluster Anda.
* COMPUTE_LOCATION
dengan lokasi cluster Anda.
API
Untuk mengaktifkan kebijakan jaringan seluruh cluster Cilium, Anda harus menentukan opsi berikut saat membuat cluster baru:
Kolom datapathProvider
di objek networkConfig
.
{
"cluster": {
...
"networkConfig": {
"datapathProvider": "ADVANCED_DATAPATH",
"enableCiliumClusterwideNetworkPolicy": true
}
}
}
Pastikan ciliumclusterwidenetworkpolicies.cilium.io
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 Google 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_NAME
dengan nama cluster Anda.COMPUTE_LOCATION
dengan lokasi cluster Anda.
Update cluster menggunakan flag
--enable-cilium-clusterwide-network-policy
.gcloud container clusters update CLUSTER_NAME \ --location COMPUTE_LOCATION \ --enable-cilium-clusterwide-network-policy
Mulai 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 ciliumclusterwidenetworkpolicies.cilium.io
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
Menggunakan kebijakan jaringan seluruh cluster Cilium
Bagian ini mencantumkan contoh untuk mengonfigurasi kebijakan jaringan seluruh cluster Cilium.
Contoh 1: Mengontrol traffic masuk ke beban kerja
Contoh berikut memungkinkan semua endpoint dengan label role=backend
untuk
menerima koneksi masuk di port 80 dari endpoint dengan label
role=frontend
. Endpoint dengan label role=backend
akan menolak semua koneksi masuk 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: TCP
Terapkan manifes:
kubectl apply -f l4-rule-ingress.yaml
Contoh 2: Membatasi traffic keluar dari beban kerja pada port tertentu
Aturan berikut membatasi semua endpoint dengan label app=myService
agar hanya dapat mengeluarkan paket menggunakan TCP pada 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: TCP
Terapkan 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: TCP
Terapkan 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 cluster-wide dengan Logging kebijakan jaringan dan Kemampuan observasi GKE Dataplane V2.
Mencoba menggunakan kebijakan Lapisan 7 atau pemilih node
Gejala
Jika menggunakan GKE dengan GKE Dataplane V2 dan mencoba menentukan kebijakan CCNP yang menyertakan aturan Lapisan 7 (misalnya: pemfilteran HTTP) dan pemilih node, Anda mungkin melihat pesan error seperti berikut:
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 terkait CCNP. Kebijakan Lapisan 7, yang memungkinkan pemfilteran berdasarkan data level aplikasi (seperti header HTTP), dan pemilih node tidak didukung dalam integrasi Cilium GKE.
Resolusi
Jika Anda memerlukan kemampuan pemfilteran Lapisan 7 lanjutan di cluster GKE, pertimbangkan untuk menggunakan Anthos Service Mesh. Hal ini memberikan kontrol traffic tingkat aplikasi yang lebih terperinci.
Kebijakan jaringan seluruh cluster Cilium tidak diaktifkan
Gejala
Saat mencoba mengonfigurasi kebijakan jaringan seluruh cluster (CCNP) Cilium di cluster yang fiturnya belum diaktifkan secara eksplisit, Anda tidak akan dapat mengonfigurasinya dan mungkin akan melihat pesan error seperti berikut:
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 seluruh cluster Cilium mengandalkan Custom Resource Definition (CRD). Pesan error tersebut menunjukkan bahwa CRD tidak ada dalam cluster.
Resolusi
Aktifkan CRD kebijakan jaringan seluruh cluster Cilium sebelum menggunakan CCNP.