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 |
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:
Un ACK managed cluster con el plugin de red Terway y más de 100 nodos.
kubectl está connected to the cluster.
Desplegar Typha como repetidor
Despliegue como mínimo 3 réplicas de Typha y agregue 1 por cada 200 nodos adicionales.
Inicie sesión en la consola de ACK.
-
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 .
-
Cree un archivo llamado
calico-typha.yamlcon el siguiente contenido. Reemplace{REGION-ID}con su ID de región. Establezcareplicasen 1 por cada 200 nodos (mínimo 3). Para versiones de Kubernetes anteriores a la 1.21, cambiepolicy/v1porpolicy/v1beta1en 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 -
Aplique el manifiesto.
kubectl apply -f calico-typha.yaml -
Compruebe que todos los pods de Typha estén en ejecución.
kubectl get pods -l k8s-app=calico-typha -n kube-systemTodos los pods deben mostrar
1/1en READY yRunningen 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 -
Configure Terway para enrutar las conexiones de Felix a través de Typha.
kubectl edit cm eni-config -n kube-systemEn 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 -
Reinicie Terway.
kubectl get pod -n kube-system | grep terway | awk '{print $1}' | xargs kubectl delete -n kube-system podSalida 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.
Después de deshabilitar NetworkPolicy, no podrá usar políticas de red para controlar la comunicación entre pods.
-
Edite el ConfigMap de Terway y establezca
disable_network_policyen"true".kubectl edit cm -n kube-system eni-configAgregue o actualice lo siguiente:
disable_network_policy: "true" -
Reinicie Terway.
kubectl get pod -n kube-system | grep terway | awk '{print $1}' | xargs kubectl delete -n kube-system podSalida 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.