Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Optimize NetworkPolicy scalability in large Terway clusters

Dernière mise à jour :Aug 11, 2026

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
Avertissement

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 :

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.

  1. Connectez-vous à la console ACK.

  2. 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 .
  3. Créez un fichier nommé calico-typha.yaml contenant le code ci-dessous. Remplacez {REGION-ID} par votre ID de région. Définissez replicas à 1 pour 200 nœuds (minimum 3). Pour les versions de Kubernetes antérieures à la 1.21, remplacez policy/v1 par policy/v1beta1 dans 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
  4. Appliquez le manifeste.

    kubectl apply -f calico-typha.yaml
  5. Vérifiez que tous les pods Typha sont en cours d'exécution.

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

    Assurez-vous que tous les pods affichent 1/1 dans la colonne READY et Running dans 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
  6. Configurez Terway pour acheminer les connexions Felix via Typha.

    kubectl edit cm eni-config -n kube-system

    Dans 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
  7. Redémarrez Terway.

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

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

Avertissement

Une fois NetworkPolicy désactivé, vous ne pouvez plus utiliser les politiques réseau pour contrôler la communication entre les pods.

  1. Modifiez le ConfigMap Terway et définissez disable_network_policy sur "true".

    kubectl edit cm -n kube-system eni-config

    Ajoutez ou mettez à jour le paramètre suivant :

    disable_network_policy: "true"
  2. Redémarrez Terway.

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

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