Mengontrol komunikasi seluruh cluster menggunakan kebijakan jaringan


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 aplikasi dan dengan endpoint eksternal.

Sebagai administrator cluster, Anda dapat mengonfigurasi kebijakan jaringan di seluruh cluster Cilium (CCNP), yang mengatasi batasan kebijakan jaringan untuk mengelola traffic administratif di seluruh cluster. Kebijakan jaringan seluruh cluster Cilium menerapkan aturan jaringan yang ketat untuk semua beban kerja di seluruh cluster, di seluruh namespace, dengan menggantikan aturan khusus aplikasi.

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 dasar Layer 3 (tingkat IP) dan Layer 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 yang berpotensi berkonflik 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.
  • 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 CRD CCNP 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 lakukan inisialisasi 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 di seluruh cluster Cilium.

Batasan

Kebijakan jaringan seluruh cluster Cilium memiliki batasan berikut:

  • Kebijakan Layer 7 tidak didukung.
  • Pemilih node tidak didukung.
  • Jumlah maksimum CiliumClusterwideNetworkPolicy per cluster adalah 1.000.

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 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 kode 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 dalam 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 di seluruh cluster Cilium di cluster yang ada

Anda dapat mengaktifkan kebijakan jaringan di seluruh cluster Cilium di cluster yang ada menggunakan Google Cloud CLI atau Google Kubernetes Engine API.

gcloud

  1. 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.
  2. Perbarui cluster menggunakan flag --enable-cilium-clusterwide-network-policy.

    gcloud container clusters update CLUSTER_NAME \
        --location COMPUTE_LOCATION \
        --enable-cilium-clusterwide-network-policy
    
  3. 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"
}

Verifikasi bahwa 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 di 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.

  1. 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
    
  2. Terapkan 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 Layer 3 mana pun:

  1. 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
    
  2. Terapkan manifes:

    kubectl apply -f l4-rule-egress.yaml
    

Contoh 3: Membatasi traffic keluar dari beban kerja 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.

  1. 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
    
  2. Terapkan manifes:

    kubectl apply -f cidr-l4-rule.yaml
    

Memantau dan memecahkan masalah lalu lintas 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 Layer 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 Layer 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 di 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 cakupan cluster Cilium mengandalkan Definisi Resource Kustom (CRD). Pesan error menunjukkan bahwa CRD tidak ada di cluster.

Resolusi

Aktifkan CRD kebijakan jaringan seluruh cluster Cilium sebelum menggunakan CCNP.

Langkah berikutnya