쿠키 기본 설정 선택

당사는 사이트와 서비스를 제공하는 데 필요한 필수 쿠키 및 유사한 도구를 사용합니다. 고객이 사이트를 어떻게 사용하는지 파악하고 개선할 수 있도록 성능 쿠키를 사용해 익명의 통계를 수집합니다. 필수 쿠키는 비활성화할 수 없지만 '사용자 지정' 또는 ‘거부’를 클릭하여 성능 쿠키를 거부할 수 있습니다.

사용자가 동의하는 경우 AWS와 승인된 제3자도 쿠키를 사용하여 유용한 사이트 기능을 제공하고, 사용자의 기본 설정을 기억하고, 관련 광고를 비롯한 관련 콘텐츠를 표시합니다. 필수가 아닌 모든 쿠키를 수락하거나 거부하려면 ‘수락’ 또는 ‘거부’를 클릭하세요. 더 자세한 내용을 선택하려면 ‘사용자 정의’를 클릭하세요.

IPVS 모드에서 kube-proxy 실행

포커스 모드
IPVS 모드에서 kube-proxy 실행 - Amazon EKS

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

IP Virtual Server(IPVS) 모드의 EKS는 레거시 iptables 모드에서 실행되는 kube-proxy가 있는 1,000개 이상의 서비스를 사용하여 대규모 클러스터를 실행할 때 자주 발생하는 네트워크 지연 시간 문제를 해결합니다. 이 성능 문제는 각 패킷에 대한 iptables 패킷 필터링 규칙을 순차적으로 처리한 결과입니다. 이 지연 시간 문제는 iptable의 후속인 nftables에서 해결되었습니다. 그러나이 작성 시점을 기준으로 kube-proxy는 여전히 nftables를 사용하기 위해 개발 중입니다. 이 문제를 해결하려면 IPVS 모드에서 실행되도록 클러스터kube-proxy를 구성할 수 있습니다.

개요

Kubernetes 버전 1.11부터 GA로 사용되어 온 IPVS는 선형 검색 대신 해시 테이블을 사용하여 패킷을 처리하므로 수천 개의 노드와 서비스가 있는 클러스터의 효율성을 제공합니다. IPVS는 로드 밸런싱을 위해 설계되었으므로 Kubernetes 네트워킹 성능 문제에 적합한 솔루션입니다.

IPVS는 트래픽을 백엔드 포드에 분산하기 위한 몇 가지 옵션을 제공합니다. 각 옵션에 대한 자세한 내용은 공식 Kubernetes 설명서에서 확인할 수 있지만 간단한 목록은 아래에 나와 있습니다. 라운드 로빈 및 최소 연결은 Kubernetes에서 IPVS 로드 밸런싱 옵션에 가장 많이 사용되는 옵션 중 하나입니다.

- rr (Round Robin)
- wrr (Weighted Round Robin)
- lc (Least Connections)
- wlc (Weighted Least Connections)
- lblc (Locality Based Least Connections)
- lblcr (Locality Based Least Connections with Replication)
- sh (Source Hashing)
- dh (Destination Hashing)
- sed (Shortest Expected Delay)
- nq (Never Queue)

구현

EKS 클러스터에서 IPVS를 활성화하려면 몇 단계만 필요합니다. 먼저 EKS 작업자 노드 이미지에 Linux 가상 서버 관리 ipvsadm 패키지가 설치되어 있는지 확인해야 합니다. Amazon Linux 2023과 같은 Fedora 기반 이미지에이 패키지를 설치하려면 작업자 노드 인스턴스에서 다음 명령을 실행할 수 있습니다.

sudo dnf install -y ipvsadm

Ubuntu와 같은 Debian 기반 이미지에서 설치 명령은 다음과 같습니다.

sudo apt-get install ipvsadm

그런 다음 위에 나열된 IPVS 구성 옵션에 대한 커널 모듈을 로드해야 합니다. 이러한 모듈은 재부팅 후에도 유지되도록 /etc/modules-load.d/ 디렉터리 내부의 파일에 쓰는 것이 좋습니다.

sudo sh -c 'cat << EOF > /etc/modules-load.d/ipvs.conf ip_vs ip_vs_rr ip_vs_wrr ip_vs_lc ip_vs_wlc ip_vs_lblc ip_vs_lblcr ip_vs_sh ip_vs_dh ip_vs_sed ip_vs_nq nf_conntrack EOF'

다음 명령을 실행하여 이미 실행 중인 시스템에 이러한 모듈을 로드할 수 있습니다.

sudo modprobe ip_vs sudo modprobe ip_vs_rr sudo modprobe ip_vs_wrr sudo modprobe ip_vs_lc sudo modprobe ip_vs_wlc sudo modprobe ip_vs_lblc sudo modprobe ip_vs_lblcr sudo modprobe ip_vs_sh sudo modprobe ip_vs_dh sudo modprobe ip_vs_sed sudo modprobe ip_vs_nq sudo modprobe nf_conntrack
참고

사용자 데이터 스크립트를 통해 또는 사용자 지정 작업자 노드 AMI를 빌드하기 위해 실행된 빌드 스크립트에서 작업자 노드의 부트스트래핑 프로세스의 일부로 이러한 작업자 노드 단계를 실행하는 것이 좋습니다.

다음으로 IPVS 모드에서 실행되도록 클러스터의 kube-proxy DaemonSet를 구성합니다. 이는를 kube-proxymodeipvs 설정하고 ipvs scheduler를 위에 나열된 로드 밸런싱 옵션 중 하나로 설정하여 수행됩니다. 예를 들어, 라운드 로빈rr의 경우 입니다.

주의

이는 방해가 되는 변경이며 업무 외 시간에 수행해야 합니다. 영향을 최소화하려면 초기 EKS 클러스터 생성 중에 이러한 변경을 수행하는 것이 좋습니다.

kube-proxy EKS 추가 기능을 업데이트하여 AWS CLI 명령을 실행하여 IPVS를 활성화할 수 있습니다.

aws eks update-addon --cluster-name $CLUSTER_NAME --addon-name kube-proxy \ --configuration-values '{"ipvs": {"scheduler": "rr"}, "mode": "ipvs"}' \ --resolve-conflicts OVERWRITE

또는 클러스터에서 kube-proxy-config ConfigMap을 수정하여이 작업을 수행할 수 있습니다.

kubectl -n kube-system edit cm kube-proxy-config

아래에서 scheduler 설정을 찾아 값을 위에 나열된 ipvs 로드 밸런싱 옵션 중 하나로 ipvs 설정합니다. 예를 들어, rr for Round Robin. 기본값이 인 mode 설정을 찾아 값을 로 iptables변경합니다ipvs. 두 옵션의 결과는 아래 구성과 비슷해야 합니다.

iptables: masqueradeAll: false masqueradeBit: 14 minSyncPeriod: 0s syncPeriod: 30s ipvs: excludeCIDRs: null minSyncPeriod: 0s scheduler: "rr" syncPeriod: 30s kind: KubeProxyConfiguration metricsBindAddress: 0.0.0.0:10249 mode: "ipvs" nodePortAddresses: null oomScoreAdj: -998 portRange: "" udpIdleTimeout: 250ms

이러한 변경을 수행하기 전에 작업자 노드가 클러스터에 조인된 경우 kube-proxy DaemonSet를 다시 시작해야 합니다.

kubectl -n kube-system rollout restart ds kube-proxy

검증

작업자 노드 중 하나에서 다음 명령을 실행하여 클러스터 및 작업자 노드가 IPVS 모드에서 실행 중인지 확인할 수 있습니다.

sudo ipvsadm -L

최소한 아래 결과와 비슷한 결과가 표시되어야 하며,의 Kubernetes API Server 서비스 10.100.0.1 및의 CoreDNS 서비스에 대한 항목이 표시됩니다10.100.0.10.

IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP ip-10-100-0-1.us-east-1. rr -> ip-192-168-113-81.us-eas Masq 1 0 0 -> ip-192-168-162-166.us-ea Masq 1 1 0 TCP ip-10-100-0-10.us-east-1 rr -> ip-192-168-104-215.us-ea Masq 1 0 0 -> ip-192-168-123-227.us-ea Masq 1 0 0 UDP ip-10-100-0-10.us-east-1 rr -> ip-192-168-104-215.us-ea Masq 1 0 0 -> ip-192-168-123-227.us-ea Masq 1 0 0
참고

이 예제 출력은 서비스 IP 주소 범위가 인 EKS 클러스터에서 가져옵니다10.100.0.0/16.

이 페이지에서

프라이버시사이트 이용 약관쿠키 기본 설정
© 2025, Amazon Web Services, Inc. 또는 계열사. All rights reserved.