All Products
Search
Document Center

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

Last Updated:Aug 21, 2026

Di kluster Terway, NetworkPolicy mengontrol akses antar Pod. Pada kluster dengan lebih dari 100 node, pengawasan (watch) Felix per node meningkatkan beban pada API server. Deploy Typha atau nonaktifkan NetworkPolicy untuk mengurangi beban tersebut.

Latar Belakang

Terway menerapkan NetworkPolicy menggunakan agen Calico Felix. Di kluster yang memiliki lebih dari 100 node, setiap instans Felix melakukan pengawasan terhadap API server secara independen, sehingga beban pada API server meningkat secara linear seiring pertambahan ukuran kluster.

Typha berada di antara API server dan instans Felix, mengurangi jumlah koneksi pengawasan langsung.

Pilih pendekatan Anda:

Pendekatan Kapan digunakan
Deploy Typha Kebijakan jaringan masih diperlukan; kluster memiliki lebih dari 100 node
Nonaktifkan NetworkPolicy Kebijakan jaringan tidak lagi diperlukan dan Anda ingin menghilangkan seluruh overhead terkait
Peringatan

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

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

Deploy Typha sebagai repeater

Deploy minimal tiga replika Typha, tambahkan satu replika untuk setiap 200 node tambahan.

  1. Login ke Konsol ACK.

  2. Perbarui Terway ke versi terbaru di Manage components.

    Add-on bervariasi tergantung mode Terway. Lihat Bandingkan mode Terway.
  3. Buat file bernama calico-typha.yaml dengan konten berikut. Ganti {REGION-ID} dengan ID wilayah Anda. Atur nilai replicas menjadi satu untuk setiap 200 node (minimal tiga). Untuk Kubernetes versi di bawah 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; minimal 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 ulang 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 status 1/1 READY dan Running STATUS sebelum Anda melanjutkan. Output yang diharapkan:

    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

    Pada blok eni_conf, tambahkan atau perbarui:

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

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

    Output yang diharapkan:

    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 NetworkPolicy untuk menghilangkan beban API server yang terkait dengan Felix.

Peringatan

Setelah menonaktifkan NetworkPolicy, Anda tidak dapat 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:

    disable_network_policy: "true"
  2. Mulai ulang Terway.

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

    Output yang diharapkan:

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

Verifikasi hasil

Setelah mendeploy Typha, pantau trafik pada instans Server Load Balancer (SLB) untuk memverifikasi bahwa beban API server telah berkurang.