Amazon EKS의 작업 노드에서 확보한 IP 주소 감소

5740 단어 EKStech

개시하다


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
  • 추가로 확보한 ENI의 수입니다.기본값은 1
  • 네트워크 인터페이스의 경우 EC2 인스턴스별 구성에 대해 정의된 최대 IP 주소의 수를 확인합니다.
  • 확보된 IP 주소 다음 하나가 aws-node에 분배되기 때문에 다른 Pod에 분배할 수 있는 최대 수량-1.

  • WARM_IP_TARGET
  • 추가로 확보된 IP 주소 수
  • WARM_IP_TARGET' が設定されると WARM_ENI_TARGET가 무시당했다.

  • MINIMUM_IP_TARGET
  • 최소한의 IP 주소 확보
  • 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 주소가 존재하도록 합니다.
  • Pod의 수
    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 = 20WARM_IP_TARGET = 5로 설정된 경우 작업 노드의 실례 유형이 r5.xlarge이면 다음과 같다.
  • 우선 20개의 부사유 IPv4 주소를 확보합니다.
    20개의 사유 IPv4 주소를 확보하기 위해 두 개의 ENI가 필요하기 때문에 ENI는 두 개를 가지고 있다.
  • 그리고 보조 개인 IPv4 주소의 분배를 추가하여 항상 5개의 남은 IP 주소가 존재하도록 한다.
  • Pod의 수
    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_TARGETMINIMUM_IP_TARGET는 설정되지 않았다.

    현상.


    작업 노드의 인스턴스 유형은 r5.xlarge입니다. 각 ENI는 15개의 IP 주소를 확보합니다.
    여기서 보조 사유 IPv4 주소는 주 사유 IPv4 주소를 뺀 14개입니다.
  • 먼저 두 개의 ENI(기본값 + WARN)가 있고 30개의 IP 주소가 있어야 합니다.(보조 개인 IPv4 주소 28개)
  • 작업 노드를 약 20개의 Pod로 처리합니다.(aws-node와kube-proxy 제외)
  • 이때 Pod에 분배되지 않은 제2사유IPv4 주소의 수는 ENI1이 확보한 제2사유IPv4 주소의 14개보다 적다.( { セカンダリプライベートIPv4アドレス合計28個 - Pod20個 = 8個} < {ENI1つで確保出るセカンダリプライベートIPv4アドレス数 = 14個} )
  • 따라서 aws-node ENI를 하나 더 추가하여 {ENI3個 * 14 = セカンダリプライベートIPv4アドレス42個}를 확보한다.
  • 이 시간에는 {確保されたセカンダリプライベートIPv4アドレス42個 - デプロイされたPod20個 = 22個} 의 부사유 IPv4 주소를 추가로 확보했습니다.
    왜냐하면 작업 노드가 10대니까.
  • 소비 IP 주소: {ワーカーノード10台 * 確保IPアドレス42個} = 420개
  • 남은 IP 주소: {ワーカーノード10台 * 余剰IPアドレス24個} = 240개
  • ※ 사용하지 않은 주요 사유 IPv4 주소도 있지만, 실제로는 더 많습니다.

    대책 내용


    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대니까.
  • 소비 IP 주소: {ワーカーノード10台 * 確保IPアドレス22個}=220개
  • 남은 IP 주소: {ワーカーノード10台 * 余剰IPアドレス2個} = 20개
  • 이 때문에 소비 IP 주소가 절반 정도를 차지한다.
    ※ 각 작업 노드마다 디자인된Pod 수량이 조금 다르거나 사용하지 않은 주요 사유 IPv4 주소가 있기 때문에 대체로 숫자입니다.

    근본적인 대책


    문제는 VPC의 서브넷에서 이용할 수 있는 개인 IP 주소가 적다는 점이다.
    서브넷을 추가할지 EKS 클러스터 IPv6에 대응할지 검토하는 것이 좋습니다.

    좋은 웹페이지 즐겨찾기