Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Optimizar la escalabilidad de NetworkPolicy en clústeres Terway a gran escala

Última actualización: Sep 05, 2026

En los clústeres Terway, NetworkPolicy controla el acceso entre pods. Cuando hay más de 100 nodos, las operaciones de vigilancia (watch) de Felix en cada nodo incrementan la carga del servidor de API. Despliegue Typha o deshabilite NetworkPolicy para reducir dicha carga.

Contexto

Terway implementa NetworkPolicy mediante el agente Calico Felix. En clústeres con más de 100 nodos, cada instancia de Felix vigila al servidor de API de forma independiente, por lo que la carga del servidor de API aumenta linealmente con el tamaño del clúster.

Typha se sitúa entre el servidor de API y las instancias de Felix, lo que reduce el número de conexiones de vigilancia directas.

Elija su enfoque:

Enfoque

Cuándo utilizarlo

Desplegar Typha

Aún se requieren políticas de red; el clúster tiene más de 100 nodos

Deshabilitar NetworkPolicy

Las políticas de red ya no son necesarias y desea eliminar toda la sobrecarga relacionada

Aviso

Después de deshabilitar NetworkPolicy, no podrá usar políticas de red para controlar la comunicación entre pods.

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

Desplegar Typha como repetidor

Despliegue como mínimo 3 réplicas de Typha y agregue 1 por cada 200 nodos adicionales.

  1. Inicie sesión en la consola de ACK.

  2. Actualice Terway a la versión más reciente en Manage components.

    Los complementos varían según el modo de Terway. Consulte Compare Terway modes .
  3. Cree un archivo llamado calico-typha.yaml con el siguiente contenido. Reemplace {REGION-ID} con su ID de región. Establezca replicas en 1 por cada 200 nodos (mínimo 3). Para versiones de Kubernetes anteriores a la 1.21, cambie policy/v1 por policy/v1beta1 en la sección 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. Aplique el manifiesto.

    kubectl apply -f calico-typha.yaml
  5. Compruebe que todos los pods de Typha estén en ejecución.

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

    Todos los pods deben mostrar 1/1 en READY y Running en STATUS antes de continuar. Salida esperada:

    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. Configure Terway para enrutar las conexiones de Felix a través de Typha.

    kubectl edit cm eni-config -n kube-system

    En el bloque eni_conf, agregue o actualice lo siguiente:

      felix_relay_service: calico-typha
      disable_network_policy: "false"  # Omit this line if the key does not exist
  7. Reinicie Terway.

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

    Salida esperada:

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

Deshabilitar la función NetworkPolicy

Si las políticas de red ya no son necesarias, deshabilite NetworkPolicy para eliminar la carga del servidor de API relacionada con Felix.

Aviso

Después de deshabilitar NetworkPolicy, no podrá usar políticas de red para controlar la comunicación entre pods.

  1. Edite el ConfigMap de Terway y establezca disable_network_policy en "true".

    kubectl edit cm -n kube-system eni-config

    Agregue o actualice lo siguiente:

    disable_network_policy: "true"
  2. Reinicie Terway.

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

    Salida esperada:

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

Comprobar el resultado

Después de desplegar Typha, supervise el tráfico en las instancias de Server Load Balancer (SLB) para comprobar que la carga del servidor de API se redujo.