Mengontrol komunikasi seluruh cluster menggunakan kebijakan jaringan


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

  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 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.

  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 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:

  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 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.

  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 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:
'[email protected]', 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.

Langkah selanjutnya