Dans les clusters Terway, NetworkPolicy contrôle l'accès entre les pods. Au-delà de 100 nœuds, la surveillance exercée par Felix sur chaque nœud accroît la charge du serveur API. Déployez Typha ou désactivez NetworkPolicy pour réduire cette charge.
Contexte
Terway implémente NetworkPolicy via l'agent Calico Felix. Dans les clusters de plus de 100 nœuds, chaque instance Felix surveille le serveur API de manière indépendante, ce qui entraîne une augmentation linéaire de la charge du serveur API en fonction de la taille du cluster.
Typha s'intercale entre le serveur API et les instances Felix afin de réduire le nombre de connexions de surveillance directes.
Choisissez votre approche :
| Approche | Quand l'utiliser |
|---|---|
| Déployer Typha | Les politiques réseau restent nécessaires et le cluster compte plus de 100 nœuds |
| Désactiver NetworkPolicy | Les politiques réseau ne sont plus nécessaires et vous souhaitez éliminer toute surcharge associée |
Une fois NetworkPolicy désactivé, vous ne pouvez plus utiliser les politiques réseau pour contrôler la communication entre les pods.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un cluster ACK managé avec le plugin réseau Terway et plus de 100 nœuds.
kubectl est connecté au cluster.
Déployer Typha en tant que relais
Déployez au moins 3 réplicas Typha, en ajoutant 1 réplica supplémentaire par tranche de 200 nœuds.
Connectez-vous à la console ACK.
-
Mettez à jour Terway vers la dernière version depuis la section Gérer les composants.
Les modules complémentaires varient selon le mode Terway. Consultez la rubrique Comparer les modes Terway .
-
Créez un fichier nommé
calico-typha.yamlcontenant le code ci-dessous. Remplacez{REGION-ID}par votre ID de région. Définissezreplicasà 1 pour 200 nœuds (minimum 3). Pour les versions de Kubernetes antérieures à la 1.21, remplacezpolicy/v1parpolicy/v1beta1dans la section 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 replica per 200 nodes; 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" # Disable file logging (not needed in Kubernetes) - name: TYPHA_LOGSEVERITYSYS value: "none" # Disable syslog (not needed in Kubernetes) - name: TYPHA_CONNECTIONREBALANCINGMODE value: "kubernetes" # Monitor Kubernetes API to rebalance Felix connections - 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 # Use policy/v1beta1 for 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 -
Appliquez le manifeste.
kubectl apply -f calico-typha.yaml -
Vérifiez que tous les pods Typha sont en cours d'exécution.
kubectl get pods -l k8s-app=calico-typha -n kube-systemAssurez-vous que tous les pods affichent
1/1dans la colonne READY etRunningdans la colonne STATUS avant de poursuivre. Sortie attendue :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 -
Configurez Terway pour acheminer les connexions Felix via Typha.
kubectl edit cm eni-config -n kube-systemDans le bloc
eni_conf, ajoutez ou mettez à jour les paramètres suivants :felix_relay_service: calico-typha disable_network_policy: "false" # Omit this line if the key does not exist -
Redémarrez Terway.
kubectl get pod -n kube-system | grep terway | awk '{print $1}' | xargs kubectl delete -n kube-system podSortie attendue :
pod "terway-eniip-8hmz7" deleted pod "terway-eniip-dclfn" deleted pod "terway-eniip-rmctm" deleted ...
Désactiver la fonctionnalité NetworkPolicy
Si les politiques réseau ne sont plus nécessaires, désactivez NetworkPolicy pour supprimer la charge liée à Felix sur le serveur API.
Une fois NetworkPolicy désactivé, vous ne pouvez plus utiliser les politiques réseau pour contrôler la communication entre les pods.
-
Modifiez le ConfigMap Terway et définissez
disable_network_policysur"true".kubectl edit cm -n kube-system eni-configAjoutez ou mettez à jour le paramètre suivant :
disable_network_policy: "true" -
Redémarrez Terway.
kubectl get pod -n kube-system | grep terway | awk '{print $1}' | xargs kubectl delete -n kube-system podSortie attendue :
pod "terway-eniip-8hmz7" deleted pod "terway-eniip-dclfn" deleted pod "terway-eniip-rmctm" deleted ...
Vérifier le résultat
Après le déploiement de Typha, surveillez le trafic sur les instances Server Load Balancer (SLB) pour vérifier la réduction de la charge du serveur API.