All Products
Search
Document Center

Container Service for Kubernetes:Optimalkan skalabilitas NetworkPolicy di kluster Terway berskala besar

Last Updated:Mar 26, 2026

Pada kluster ACK berskala besar yang menggunakan Terway, setiap agen Felix di tiap node terhubung langsung ke server API untuk mengambil aturan NetworkPolicy—menyebabkan beban berlebih pada server API saat skala meningkat. Topik ini menjelaskan cara mengatasi bottleneck tersebut dengan men-deploy Typha sebagai lapisan cache antara server API dan Felix, atau dengan menonaktifkan fitur NetworkPolicy jika kebijakan jaringan tidak lagi diperlukan.

Latar Belakang

Terway mengimplementasikan NetworkPolicy menggunakan agen Felix dari Calico. Pada kluster dengan lebih dari 100 node, setiap instans Felix secara independen melakukan watch terhadap server API Kubernetes untuk pembaruan kebijakan. Karena jumlah koneksi watch meningkat sebanding dengan jumlah node, beban pada server API tumbuh secara linear seiring peningkatan ukuran kluster.

Typha berada di antara server API dan semua instans Felix, berperan sebagai repeater yang mengurangi jumlah koneksi watch langsung ke server API.

Pilih pendekatan Anda:

PendekatanKapan digunakan
Deploy TyphaKebijakan jaringan masih diperlukan; kluster memiliki lebih dari 100 node
Nonaktifkan NetworkPolicyKebijakan jaringan tidak lagi diperlukan dan Anda ingin menghilangkan seluruh overhead terkait
Peringatan

Setelah menonaktifkan fitur NetworkPolicy, Anda tidak dapat lagi menggunakan kebijakan jaringan untuk mengontrol komunikasi antar Pod.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

Deploy Typha sebagai repeater

Typha berperan sebagai repeater antara server API Kubernetes dan agen Felix. Deploy minimal 3 replika Typha, tambahkan 1 replika untuk setiap 200 node tambahan.

  1. Masuk ke Konsol ACK.

  2. Perbarui Terway ke versi terbaru. Untuk detailnya, lihat Kelola komponen.

    Komponen berbeda tergantung mode Terway. Untuk perbandingan, lihat Bandingkan mode Terway.
  3. Buat file bernama calico-typha.yaml dan tambahkan konten berikut. Ganti {REGION-ID} dengan ID wilayah kluster Anda. Atur nilai replicas menjadi 1 per 200 node dengan minimum 3. Jika kluster Anda menjalankan Kubernetes versi sebelum 1.21, ubah policy/v1 menjadi policy/v1beta1 pada bagian PodDisruptionBudget.

    apiVersion: v1
    kind: Service
    metadata:
      name: calico-typha
      namespace: kube-system
      labels:
        k8s-app: calico-typha
    spec:
      ports:
        - port: 5473
          protocol: TCP
          targetPort: calico-typha
          name: calico-typha
      selector:
        k8s-app: calico-typha
    
    ---
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: calico-typha
      namespace: kube-system
      labels:
        k8s-app: calico-typha
    spec:
      replicas: 3  # 1 replika per 200 node; minimum 3
      revisionHistoryLimit: 2
      selector:
        matchLabels:
          k8s-app: calico-typha
      template:
        metadata:
          labels:
            k8s-app: calico-typha
          annotations:
            cluster-autoscaler.kubernetes.io/safe-to-evict: 'true'
        spec:
          nodeSelector:
            kubernetes.io/os: linux
          hostNetwork: true
          tolerations:
            - operator: Exists
          serviceAccountName: terway
          priorityClassName: system-cluster-critical
          containers:
          - image: registry-vpc.{REGION-ID}.aliyuncs.com/acs/typha:v3.20.2
            name: calico-typha
            ports:
            - containerPort: 5473
              name: calico-typha
              protocol: TCP
            env:
              - name: TYPHA_LOGSEVERITYSCREEN
                value: "info"
              - name: TYPHA_LOGFILEPATH
                value: "none"      # Nonaktifkan logging ke file (tidak diperlukan di Kubernetes)
              - name: TYPHA_LOGSEVERITYSYS
                value: "none"      # Nonaktifkan syslog (tidak diperlukan di Kubernetes)
              - name: TYPHA_CONNECTIONREBALANCINGMODE
                value: "kubernetes"  # Pantau API Kubernetes untuk menyeimbangkan kembali koneksi Felix
              - name: TYPHA_DATASTORETYPE
                value: "kubernetes"
              - name: TYPHA_HEALTHENABLED
                value: "true"
            livenessProbe:
              httpGet:
                path: /liveness
                port: 9098
                host: localhost
              periodSeconds: 30
              initialDelaySeconds: 30
            readinessProbe:
              httpGet:
                path: /readiness
                port: 9098
                host: localhost
              periodSeconds: 10
    
    ---
    
    apiVersion: policy/v1  # Gunakan policy/v1beta1 untuk Kubernetes < 1.21
    kind: PodDisruptionBudget
    metadata:
      name: calico-typha
      namespace: kube-system
      labels:
        k8s-app: calico-typha
    spec:
      maxUnavailable: 1
      selector:
        matchLabels:
          k8s-app: calico-typha
    
    ---
    
    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    metadata:
      name: bgppeers.crd.projectcalico.org
    spec:
      scope: Cluster
      group: crd.projectcalico.org
      versions:
      - name: v1
        served: true
        storage: true
        schema:
          openAPIV3Schema:
            type: object
            properties:
              apiVersion:
                type: string
      names:
        kind: BGPPeer
        plural: bgppeers
        singular: bgppeer
  4. Terapkan manifes tersebut.

    kubectl apply -f calico-typha.yaml
  5. Verifikasi bahwa semua Pod Typha sedang berjalan.

    kubectl get pods -l k8s-app=calico-typha -n kube-system

    Semua Pod harus menampilkan 1/1 pada kolom READY dan Running pada kolom STATUS sebelum Anda melanjutkan. Output-nya mirip dengan:

    NAME                            READY   STATUS    RESTARTS   AGE
    calico-typha-66498ddfbd-2pzsr   1/1     Running   0          69s
    calico-typha-66498ddfbd-lrtzw   1/1     Running   0          50s
    calico-typha-66498ddfbd-scckd   1/1     Running   0          62s
  6. Konfigurasikan Terway agar mengarahkan koneksi Felix melalui Typha.

    kubectl edit cm eni-config -n kube-system

    Di dalam blok eni_conf, tambahkan atau perbarui bidang berikut:

      felix_relay_service: calico-typha
      disable_network_policy: "false"  # Abaikan baris ini jika kunci tersebut tidak ada
  7. Mulai ulang Terway untuk menerapkan perubahan.

    kubectl get pod -n kube-system | grep terway | awk '{print $1}' | xargs kubectl delete -n kube-system pod

    Output yang diharapkan mirip dengan:

    pod "terway-eniip-8hmz7" deleted
    pod "terway-eniip-dclfn" deleted
    pod "terway-eniip-rmctm" deleted
    ...

Nonaktifkan fitur NetworkPolicy

Jika kebijakan jaringan tidak lagi diperlukan, nonaktifkan fitur NetworkPolicy untuk menghilangkan seluruh beban terkait Felix dari server API.

Peringatan

Setelah menonaktifkan fitur NetworkPolicy, Anda tidak dapat lagi menggunakan kebijakan jaringan untuk mengontrol komunikasi antar Pod.

  1. Edit ConfigMap Terway dan atur nilai disable_network_policy menjadi "true".

    kubectl edit cm -n kube-system eni-config

    Tambahkan atau perbarui bidang berikut:

    disable_network_policy: "true"
  2. Mulai ulang Terway untuk menerapkan perubahan.

    kubectl get pod -n kube-system | grep terway | awk '{print $1}' | xargs kubectl delete -n kube-system pod

    Output yang diharapkan mirip dengan:

    pod "terway-eniip-8hmz7" deleted
    pod "terway-eniip-dclfn" deleted
    pod "terway-eniip-rmctm" deleted
    ...

Verifikasi hasil

Setelah men-deploy Typha, proxy NetworkPolicy mulai menggunakan komponen Typha, yang mengurangi beban pada server API. Anda dapat memantau trafik yang didistribusikan ke instans Server Load Balancer (SLB) untuk memeriksa apakah beban pada server API telah berkurang.