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 |
Setelah menonaktifkan NetworkPolicy, Anda tidak dapat menggunakan kebijakan jaringan untuk mengontrol komunikasi antar Pod.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
-
Kluster ACK yang dikelola dengan plugin jaringan Terway dan lebih dari 100 node.
-
kubectl telah terhubung ke kluster.
Deploy Typha sebagai repeater
Deploy minimal tiga replika Typha, tambahkan satu replika untuk setiap 200 node tambahan.
-
Login ke Konsol ACK.
-
Perbarui Terway ke versi terbaru di Manage components.
Add-on bervariasi tergantung mode Terway. Lihat Bandingkan mode Terway.
-
Buat file bernama
calico-typha.yamldengan konten berikut. Ganti{REGION-ID}dengan ID wilayah Anda. Atur nilaireplicasmenjadi satu untuk setiap 200 node (minimal tiga). Untuk Kubernetes versi di bawah 1.21, ubahpolicy/v1menjadipolicy/v1beta1pada 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 -
Terapkan manifes tersebut.
kubectl apply -f calico-typha.yaml -
Verifikasi bahwa semua Pod Typha sedang berjalan.
kubectl get pods -l k8s-app=calico-typha -n kube-systemSemua Pod harus menampilkan status
1/1READY danRunningSTATUS 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 -
Konfigurasikan Terway agar mengarahkan koneksi Felix melalui Typha.
kubectl edit cm eni-config -n kube-systemPada blok
eni_conf, tambahkan atau perbarui:felix_relay_service: calico-typha disable_network_policy: "false" # Abaikan baris ini jika kunci tersebut tidak ada -
Mulai ulang Terway.
kubectl get pod -n kube-system | grep terway | awk '{print $1}' | xargs kubectl delete -n kube-system podOutput 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.
Setelah menonaktifkan NetworkPolicy, Anda tidak dapat menggunakan kebijakan jaringan untuk mengontrol komunikasi antar Pod.
-
Edit ConfigMap Terway dan atur nilai
disable_network_policymenjadi"true".kubectl edit cm -n kube-system eni-configTambahkan atau perbarui:
disable_network_policy: "true" -
Mulai ulang Terway.
kubectl get pod -n kube-system | grep terway | awk '{print $1}' | xargs kubectl delete -n kube-system podOutput 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.