Amazon EKS에서 ipvs kube-proxy 모드를 구성하려면 어떻게 해야 합니까?
Amazon Elastic Kubernetes Service(Amazon EKS)에서 Kubernetes 네트워크 프록시 모드를 기본 “iptables”에서 “ipvs”로 변경하고 싶습니다.
해결 방법
사전 요구 사항:
- kubectl을 설치합니다.
- 최신 버전의 AWS Command Line Interface(AWS CLI)를 설치하고 구성합니다.
- eksctl 웹사이트에서 eksctl을 설치합니다.
**참고:AWS CLI 명령을 실행할 때 오류가 발생하면, **AWS CLI 오류 문제 해결을 참조하세요. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
기존 Amazon EKS 클러스터의 경우
기존 EKS 클러스터에 대해 ipvs kube-proxy 모드를 구성하려면 다음 단계를 완료하십시오.
-
워커 노드에 ipvs 가 활성화되어 있는지 확인합니다.
sudo ipvsadm -L프록시 모드가 기본 iptables로 설정된 경우 출력은 다음 예제와 비슷하게 표시됩니다.
IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn -
필요한 IPVS 커널 모듈이 있는지 확인하려면 다음 명령을 실행합니다.
sudo lsmod | egrep -i "ip_vs|ip_vs_rr|ip_vs_wrr|ip_vs_sh|nf_conntrack" -
IPVS 모듈이 출력에 없는 경우 다음 명령을 실행하여 누락된 커널 모듈을 설치합니다.
sudo modprobe ip_vs sudo modprobe ip_vs_rr sudo modprobe ip_vs_wrr sudo modprobe ip_vs_sh sudo modprobe nf_conntrack -
kube-proxy가 관리형 Amazon EKS 애드온인지 자체 관리형 애드온인지 확인하려면 다음 명령을 실행합니다.
aws eks list-addons --cluster-name my-cluster | grep proxy참고: my-cluster를 사용자의 클러스터 이름으로 바꾸십시오. 관리형 Amazon EKS 애드온은 kube-proxy를 출력으로 반환합니다.
-
애드온에 따라 ipvs 모드와 라운드 로빈 옵션을 사용하여 kube-proxy 애드온을 구성하여 트래픽을 백업 서버에 균등하게 분배합니다.
**관리형 Amazon EKS 애드온 **aws eks update-addon --cluster-name my-cluster --addon-name kube-proxy \ --addon-version v1.24.17-eksbuild.4 \ --configuration-values '{"ipvs": {"scheduler": "rr"}, "mode": "ipvs"}' \ --resolve-conflicts OVERWRITE자체 관리형 애드온
kube-proxy 구성 configmap을 백업합니다.kubectl get cm kube-proxy-config -n kube-system -o yaml > kube-proxy-config-old.ymlkube-proxy-config configmap을 편집합니다.
kubectl edit cm kube-proxy-config -n kube-system구성에서 모드 파라미터를 iptables에서 ** ipvs**로 변경한 다음, 라운드 로빈의 경우 스케줄러를 rr로 변경합니다.
... ipvs: excludeCIDRs: null minSyncPeriod: 0s scheduler: "rr" # add rr syncPeriod: 30s kind: KubeProxyConfiguration metricsBindAddress: 0.0.0.0:10249 mode: "ipvs" # change from iptables ...구성 변경 사항을 적용하려면 클러스터 워커 노드를 다시 로드합니다. eksctl을 사용하여 워커 노드를 스케일 인 및 스케일 아웃합니다.
# get node group names eksctl get nodegroup --cluster=my-cluster # scale-in eksctl scale nodegroup --cluster=my-cluster --nodes=0 --name=my-nodegroup-name --nodes-min=0 --nodes-max=3 --wait # scale-out eksctl scale nodegroup --cluster=my-cluster --nodes=2 --name=my-nodegroup-name --nodes-min=2 --nodes-max=3 --wait참고: my-cluster 및 my-nodegroup-name을 사용자의 파라미터로 바꾸십시오. 스케일 아웃할 때 클러스터 요구 사항에 따라 노드 수를 교체하십시오.
-
ipvs 모드가 구성되었는지 확인하려면 다음 명령을 실행합니다.
sudo ipvsadm -L출력 예시:
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.eu-west-1.comp rr -> ip-192-168-118-22.eu-west-1. Masq 1 5 0 -> ip-192-168-187-76.eu-west-1. Masq 1 6 0 TCP ip-10-100-0-10.eu-west-1.com rr -> ip-192-168-168-152.eu-west-1 Masq 1 0 0 -> ip-192-168-183-81.eu-west-1. Masq 1 0 0 UDP ip-10-100-0-10.eu-west-1.com rr -> ip-192-168-168-152.eu-west-1 Masq 1 0 0 -> ip-192-168-183-81.eu-west-1. Masq 1 0 0TCP 및 UDP 항목은 클러스터의 Kubernetes 및 CoreDNS 서비스용입니다.
-
클러스터에 kube-svc*에 대한 iptables 항목이 없는지 확인하려면 다음 명령을 실행합니다.
sudo iptables-save | grep -i kube-svc클러스터에 iptables가 없는 경우 위 명령은 출력을 생성하지 않습니다.
새 아마존 EKS 클러스터의 경우
새 EKS 클러스터에 대해 ipvs kube-proxy 모드를 구성하려면 다음 단계를 완료하십시오.
-
노드 그룹을 생성할 때 워커 노드의 사용자 데이터를 부트스트랩하여 IPVS 종속성을 설치합니다.
... #!/bin/bash echo "Running custom user data script" yum install -y ipvsadm ipvsadm -l modprobe ip_vs modprobe ip_vs_rr modprobe ip_vs_wrr modprobe ip_vs_sh modprobe ip_vs_lc modprobe nf_conntrack ... -
IPVS 파라미터를 사용하여 kube-proxy용 관리형 Amazon EKS 애드온을 생성하려면 다음 명령을 실행합니다.
aws eks create-addon --cluster-name my-cluster --addon-name kube-proxy \ --addon-version v1.29.0-minimal-eksbuild.1 \ --configuration-values '{"ipvs": {"scheduler": "rr"}, "mode": "ipvs"}' \ --resolve-conflicts OVERWRITE참고: v1.29.0-minimal-eksbuild.1을 Amazon EKS 클러스터 버전과 호환되는 사용 가능한 최신 kube-proxy 버전으로 바꾸십시오. 자세한 내용을 보려면 Kubernetes kube-proxy 자체 관리형 애드온 업데이트를 참조하십시오.
관련 정보
Kubernetes 웹사이트의 프록시 모드
Kubernetes 웹사이트의 Kubernetes 클러스터에서 NodeLocal DNSCache를 사용하기 위한 구성
- 언어
- 한국어
