내용으로 건너뛰기

Amazon EKS에서 ipvs kube-proxy 모드를 구성하려면 어떻게 해야 합니까?

4분 분량
0

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 모드를 구성하려면 다음 단계를 완료하십시오.

  1. 워커 노드에 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
  2. 필요한 IPVS 커널 모듈이 있는지 확인하려면 다음 명령을 실행합니다.

    sudo lsmod | egrep -i "ip_vs|ip_vs_rr|ip_vs_wrr|ip_vs_sh|nf_conntrack"
  3. IPVS 모듈이 출력에 없는 경우 다음 명령을 실행하여 누락된 커널 모듈을 설치합니다.

    sudo modprobe ip_vs
    sudo modprobe ip_vs_rr
    sudo modprobe ip_vs_wrr
    sudo modprobe ip_vs_sh
    sudo modprobe nf_conntrack  
  4. kube-proxy가 관리형 Amazon EKS 애드온인지 자체 관리형 애드온인지 확인하려면 다음 명령을 실행합니다.

    aws eks list-addons --cluster-name my-cluster | grep proxy

    참고: my-cluster를 사용자의 클러스터 이름으로 바꾸십시오. 관리형 Amazon EKS 애드온은 kube-proxy를 출력으로 반환합니다.

  5. 애드온에 따라 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.yml

    kube-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을 사용자의 파라미터로 바꾸십시오. 스케일 아웃할 때 클러스터 요구 사항에 따라 노드 수를 교체하십시오.

  6. 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          0

    TCP 및 UDP 항목은 클러스터의 Kubernetes 및 CoreDNS 서비스용입니다.

  7. 클러스터에 kube-svc*에 대한 iptables 항목이 없는지 확인하려면 다음 명령을 실행합니다.

    sudo iptables-save | grep -i kube-svc

    클러스터에 iptables가 없는 경우 위 명령은 출력을 생성하지 않습니다.

새 아마존 EKS 클러스터의 경우

새 EKS 클러스터에 대해 ipvs kube-proxy 모드를 구성하려면 다음 단계를 완료하십시오.

  1. 노드 그룹을 생성할 때 워커 노드의 사용자 데이터를 부트스트랩하여 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
    ...
  2. 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를 사용하기 위한 구성

AWS 공식업데이트됨 3년 전