기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
nftables 모드에서 kube-proxy 실행
nftables 모드에서 kube-proxy를 사용하면 Amazon EKS는 iptables 모드에서 kube-proxy를 실행하는 1,000개 이상의 서비스가 있는 대규모 클러스터에서 흔히 발생하는 네트워크 지연 시간 문제를 해결할 수 있습니다. Iptables 모드는 각 연결의 첫 번째 패킷에 대해 패킷 필터링 규칙을 순차적으로 처리하므로이 성능 문제가 발생합니다. nftables는 iptables의 후속 항목이며 nftables kube-proxy 백엔드는 클러스터 크기에 관계없이 거의 일정한 시간에 패킷을 처리하여이 지연 시간 문제를 해결합니다. 이 문제를 방지하려면 kube-proxy nftables 모드에서 실행되도록 클러스터를 구성합니다.
개요
nftables kube-proxy 백엔드는 Kubernetes 버전 1.33
참고
nftables 백엔드가 GA이더라도는 호환성을 위해 기본 kube-proxy 모드로 iptables 유지됩니다. nftables 모드를 명시적으로 옵트인해야 합니다.
로드 밸런서로 설계되고 라운드 로빈 및 최소 연결과 같은 예약 알고리즘을 노출하는 IPVS 백엔드
요구 사항
nftables kube-proxy 백엔드에는 작업자 노드에 Linux 커널 5.13 이상이 필요합니다. Amazon Linux 2023 및 Ubuntu의 최신 버전은이 최소 요구 사항을 충족합니다. kube-proxy는 커널의 netfilter 하위 시스템을 통해 규칙을 직접 이동할 수 있으므로 지원되는 커널을 넘어 추가 사용자 공간 패키지(예: ipvsadm) 또는 커널 모듈을 로드할 필요가 없습니다.
참고
커널 5.13은 nftables 모드를 실행하는 데 필요한 최소 값입니다. 대규모 클러스터에서 규칙 동기화 성능을 개선하려면 최신 커널 및 kube-proxy 버전을 사용하는 것이 좋습니다. 자세한 내용은 성능 고려 사항을 참조하세요.
중요
nftables 백엔드는 일부 네트워크 플러그인과 호환되지 않을 수 있습니다. nftables 모드를 활성화하기 전에 CNI 공급자의 설명서를 참조하세요. Amazon VPC CNI는 버전 부터 nftables 모드와 호환됩니다v1.23.0.
구현
를 kube-proxymode로 설정하여 클러스터의 kube-proxy DaemonSet가 nftables 모드에서 실행되도록 구성합니다nftables.
주의
이는 방해가 되는 변경 사항입니다. 영향을 최소화하려면 근무 시간 외 또는 초기 EKS 클러스터 생성 중에 수행하는 것이 좋습니다.
AWS 명령줄 인터페이스(AWS CLI) 명령을 실행하여 kube-proxy EKS 추가 기능을 업데이트하여 nftables를 활성화할 수 있습니다. 이를 위해서는 Kubernetes 1.33 이상을 실행하는 EKS 클러스터가 필요합니다.
aws eks update-addon --cluster-name $CLUSTER_NAME --addon-name kube-proxy \ --configuration-values '{"mode": "nftables"}' \ --resolve-conflicts OVERWRITE
또는 클러스터에서 kube-proxy-config ConfigMap을 수정하여이 작업을 수행할 수 있습니다.
kubectl -n kube-system edit cm kube-proxy-config
기본값이 인 mode 설정을 찾아 값을 로 iptables변경합니다nftables. 두 옵션의 결과는 다음 구성과 비슷해야 합니다.
mode: "nftables" nftables: masqueradeAll: false masqueradeBit: 14 minSyncPeriod: 1s syncPeriod: 30s kind: KubeProxyConfiguration metricsBindAddress: 0.0.0.0:10249 nodePortAddresses: null oomScoreAdj: -998 portRange: ""
이러한 변경을 수행하기 전에 작업자 노드가 클러스터에 조인된 경우 kube-proxy DaemonSet를 다시 시작합니다.
kubectl -n kube-system rollout restart ds kube-proxy
성능 고려 사항
nftables 모드는 일반적으로 Kubernetes 버전 부터 사용할 수 있지만이 모드는 부터 사용하는 v1.33것이 좋습니다v1.36. kube-proxy v1.36.0에서 Kubernetes 프로젝트는 nftables 맵 및 규칙이 구성되는 방법을 많이 개선했습니다. 이러한 변경은 체인 및 jump/goto 규칙 수를 크게 줄여 대규모 동기화 성능을 크게 개선합니다.
이러한 개선 사항은 주로 엔드포인트(서비스를 지원하는 포드)가 많은 클러스터에 도움이 됩니다. kube-proxy v1.36.0 이전에는 수십만 개의 엔드포인트가 있는 클러스터에서 매우 느린 이동 가능 규칙 동기화 시간과 CPU 소프트 잠금이 발생할 수 있습니다. 이는 Linux 커널이가 kube-proxy 생성하는 체인과 점프에 루프가 없는지 확인하기 때문에 발생합니다.
이 동작은 Linux 커널 버전의 영향을 받습니다. 기본 커널 개선 사항은 Linux 커널에 포함되어 있습니다6.18(이전의 안정적인 커널로 백포트되고 있음). 이전 Linux 커널 버전에서 nftables 모드를 사용하면 규칙 동기화 시간이 느려지고 CPU 소프트 잠금이 발생할 수 있습니다. 대규모 클러스터에서 최상의 성능을 얻으려면 kube-proxy v1.36.0 이상과 함께 최신 Linux 커널을 실행하는 것이 좋습니다. 자세한 내용은 GitHub 웹 사이트의 kube-proxy nftables 성능 문제(kubernetes/kubernetes#135639)