Mengontrol komunikasi seluruh cluster menggunakan kebijakan jaringan


Halaman ini menjelaskan cara mengonfigurasi kebijakan jaringan 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 yang ketat untuk semua beban kerja di seluruh cluster, di seluruh namespace, yang mengganti 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 (tingkat 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. Aturan CCNP ini berfungsi sebagai lapisan keamanan tingkat teratas, yang mengganti kebijakan 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.
  • 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 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 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 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

  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. Update 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"
}

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 workload

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 ingres 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 di port tertentu

Aturan berikut membatasi semua endpoint dengan label app=myService agar hanya dapat memunculkan paket menggunakan TCP di port 80, ke tujuan Lapisan 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 di 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 traffic jaringan

Anda dapat memantau dan memecahkan masalah traffic jaringan yang terpengaruh oleh kebijakan jaringan 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 menyertakan aturan Lapisan 7 (misalnya: pemfilteran HTTP) dan pemilih node, Anda mungkin melihat pesan error yang mirip 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 CCNPs. 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 lanjutan 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 mencoba mengonfigurasi kebijakan jaringan seluruh cluster Cilium (CCNP) di cluster tempat fitur belum diaktifkan secara eksplisit, Anda tidak akan dapat mengonfigurasinya dan mungkin 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 seluruh 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 CCNPs.

Langkah selanjutnya