Amazon EKS의 작업 노드에서 확보한 IP 주소 감소
개시하다
EKS의 작업자 노드가 불필요하게 개인 IP 주소를 소모했고 VPC의 서브넷 안의 이용 가능한 개인 IP 주소가 고갈되는 문제가 발생했다.잠정 대책을 취한 기록을 총결하다.
구체적인 대책은여기.
전제 지식
EKS의 각 작업 노드에 기본 설치Amazon VPC 컨테이너 네트워크 인터페이스(CNI) 플러그인
이 플러그인은
aws-node
의 이름으로 데몬셋이 모든 작업 노드에 개발되었고, 작업 노드에 있는 Pod에 개인 IPv4 주소를 할당합니다.작업 노드(EC2 인스턴스)의 개인 IP 주소
EC2 인스턴스의 네트워크 인터페이스ENI에 두 가지 개인 IP 주소를 할당합니다.
타입
설명
기본 개인 IPv4 주소
ENI에 기본적으로 할당된 IP 주소
주 개인 IP 주소를aws-node와kube-proxy의Pod에 할당 (같은 IP 주소)
보조 개인 IPv4 주소
ENI에 두 개 이상의 IP를 할당하려면 보조 개인 IPv4 주소가 추가됩니다.
aws-node와kube-proxy를 제외한 Pod는 부사영 IP 주소로 분배되었습니다
각 네트워크 인터페이스에 대해 확보된 IP 수는 EC2 인스턴스 유형에 따라 달라집니다.
참조: IP addresses per network interface per instance type
예를 들어
r5.xlarge
ENI 하나에 15개의 IP 주소를 할당할 수 있습니다.단, 주 개인 IPv4 주소에서aws-node와kube-proxy에 분배되기 때문에 다른Pod에 사용할 수 있는 것은 부 개인 IPv4 주소의 14개입니다.aws-node 동작
aws-node
EN I를 작업 노드로 EC2 인스턴스에 할당합니다.ENI는 기본적으로 주 개인 IPv4 주소를 할당하지만, 부 개인 IPv4 주소를 따로 할당할 수 있습니다.
aws-node
설정에 따라 필요한 부사유 IPv4 주소를 확보하고 Pod에 할당합니다.aws-node 설정값
aws-node
의 설정값 중 IP의 분배와 관련된 설정 항목은 다음과 같다.WARM_ENI_TARGET
WARM_IP_TARGET
WARM_IP_TARGET' が設定されると
WARM_ENI_TARGET가 무시당했다.MINIMUM_IP_TARGET
WARM_ENI_TARGET의 IP 확보 예
기본값
WARM_ENI_TARGET = 1
.작업 노드의 인스턴스 유형이 r5.xlarge
인 경우 다음을 수행합니다.우선 작업 노드에 두 개의 ENI(기본 1 + WARN 1개)를 할당하고 최대 두 개의 ENI로 확보할 수 있는 30개의 IP 주소를 확보한다.그 중에서 aws-node와kube-proxy를 제외한 Pod에 사용할 수 있는 부사영 IP 주소는 (15-1)*2의 28개이다
그리고 ENI의 분배를 추가하여 항상 ENI가 확보하는 보조 개인 IP 주소 (14 개) 의 나머지 IP 주소가 존재하도록 합니다.
ENI 수
기본 IP 주소
보조 IP 주소
1
2
2
28
2
2
2
28
14
2
2
28
15
3
3
37
※ Pod의 수량은 aws-node와 kube-proxy를 제외한 수량입니다.
MINIMUM_IP_TARGET 및 WARMIP_TARGET의 IP 확보 예
MINIMUM_IP_TARGET = 20
와 WARM_IP_TARGET = 5
로 설정된 경우 작업 노드의 실례 유형이 r5.xlarge
이면 다음과 같다.20개의 사유 IPv4 주소를 확보하기 위해 두 개의 ENI가 필요하기 때문에 ENI는 두 개를 가지고 있다.
ENI 수
기본 IP 주소
보조 IP 주소
1
2
2
20
2
2
2
20
15
2
2
20
16
2
2
21
23
2
2
28
24
3
3
29
대응 전 상황 확인
값 설정
실제 설계
aws-node
설정$ kubectl get daemonset aws-node -n kube-system -o jsonpath='{.spec.template.spec.containers[*].env}' | jq .
[
...
{
"name": "WARM_ENI_TARGET",
"value": "1"
},
{
"name": "WARM_PREFIX_TARGET",
"value": "1"
}
]
는 위에서 말한 바와 같이 기본적으로WARM_ENI_TARGET
는 1로 설정되었고WARM_IP_TARGET
와 MINIMUM_IP_TARGET
는 설정되지 않았다.현상.
작업 노드의 인스턴스 유형은
r5.xlarge
입니다. 각 ENI는 15개의 IP 주소를 확보합니다.여기서 보조 사유 IPv4 주소는 주 사유 IPv4 주소를 뺀 14개입니다.
{ セカンダリプライベートIPv4アドレス合計28個 - Pod20個 = 8個} < {ENI1つで確保出るセカンダリプライベートIPv4アドレス数 = 14個}
) aws-node
ENI를 하나 더 추가하여 {ENI3個 * 14 = セカンダリプライベートIPv4アドレス42個}
를 확보한다.{確保されたセカンダリプライベートIPv4アドレス42個 - デプロイされたPod20個 = 22個}
의 부사유 IPv4 주소를 추가로 확보했습니다.왜냐하면 작업 노드가 10대니까.
{ワーカーノード10台 * 確保IPアドレス42個}
= 420개{ワーカーノード10台 * 余剰IPアドレス24個}
= 240개대책 내용
aws-node의 설정값이 변경되었습니다.
kubectl -n kube-system set env daemonset aws-node WARM_ENI_TARGET-
kubectl -n kube-system set env daemonset aws-node MINIMUM_IP_TARGET=20
kubectl -n kube-system set env daemonset aws-node WARM_IP_TARGET=2
변경 후 aws-node가 모두 재부팅되어 사용되지 않은 IP 주소가 즉시 열렸습니다.작업 노드에서 약 20개의 Pod가 프로그래밍됩니다.
WARM_IP_TARGET
의 나머지 IP 주소가 추가된 22개의 부사영 IPv4 주소가 확보되었습니다.왜냐하면 작업 노드가 10대니까.
{ワーカーノード10台 * 確保IPアドレス22個}
=220개{ワーカーノード10台 * 余剰IPアドレス2個}
= 20개※ 각 작업 노드마다 디자인된Pod 수량이 조금 다르거나 사용하지 않은 주요 사유 IPv4 주소가 있기 때문에 대체로 숫자입니다.
근본적인 대책
문제는 VPC의 서브넷에서 이용할 수 있는 개인 IP 주소가 적다는 점이다.
서브넷을 추가할지 EKS 클러스터 IPv6에 대응할지 검토하는 것이 좋습니다.
Reference
이 문제에 관하여(Amazon EKS의 작업 노드에서 확보한 IP 주소 감소), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/nshmura/articles/fbb53aaf6fed8c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)