kube-proxy 추가 기능 관리 - Amazon EKS

kube-proxy 추가 기능 관리

Kube-proxy는 각 Amazon EC2 노드에서 네트워크 규칙을 관리합니다. pods와의 네트워크 통신을 가능하게 합니다. Kube-proxy는 Fargate 노드에 배포되지 않습니다. 자세한 내용은 Kubernetes 설명서의 kube-proxy를 참조하세요. 각 Kubernetes 버전에서 사용할 수 있는 두 가지 유형의 kube-proxy 컨테이너 이미지가 있습니다.

  • Default(기본) - 이 유형은 Kubernetes 업스트림 커뮤니티에서 유지 관리하는 Debian 기반 도커 이미지를 기반으로 합니다.

  • Minimal(최소) - 이 유형은 Amazon EKS Distro에서 유지 관리하는 최소 기본 이미지를 기반으로 하며, 최소한의 패키지가 포함되며 셸이 없습니다. 자세한 내용은 Amazon EKS Distro를 참조하세요.

각 Amazon EKS 클러스터 버전에 사용할 수 있는 최신 kube-proxy 컨테이너 이미지 버전
Image type(이미지 유형) 1.23 1.22 1.21 1.20 1.19
kube-proxy(기본 유형) v1.23.8-eksbuild.2 v1.22.11-eksbuild.2 v1.21.14-eksbuild.2 v1.20.15-eksbuild.2 v1.19.16-eksbuild.2
kube-proxy(최소 유형) v1.23.8-minimal-eksbuild.2 v1.22.11-minimal-eksbuild.2 v1.21.14-minimal-eksbuild.2 v1.20.15-minimal-eksbuild.3 v1.19.16-minimal-eksbuild.3

다음 명령을 사용하여 kube-proxy 컨테이너 이미지의 현재 버전을 확인할 수 있습니다.

kubectl get daemonset kube-proxy --namespace kube-system -o=jsonpath='{$.spec.template.spec.containers[:1].image}' | cut -d : -f 2

출력 예는 다음과 같습니다.

v1.23.8-minimal-eksbuild.2

클러스터의 버전을 업데이트하고 클러스터에서 kube-proxy Amazon EKS 추가 기능을 실행 중인 경우 kube-proxy Amazon EKS 추가 기능 업데이트를 참조하여 업데이트합니다. 클러스터에서 자체 관리형 Amazon EKS 추가 기능을 실행하는 경우 kube-proxy 자체 관리형 추가 기능 업데이트를 참조하여 업데이트합니다.

kube-proxy에 대한 Amazon EKS의 호환성 및 스큐 정책은 Kubernetes와 동일합니다. Kube-proxy는 다음 요구 사항을 만족해야 합니다.

  • 노드에 kubelet과 동일한 마이너 버전이 있어야 합니다.

  • 클러스터의 컨트롤 플레인 버전보다 최신 버전이 아니어야 합니다.

  • 컨트롤 플레인의 두 마이너 버전 이하 버전이 아니어야 합니다. 예를 들어, 컨트롤 플레인에서 Kubernetes 1.23을 실행하고 있는 경우 kube-proxy 마이너 버전은 1.21 이하일 수 없습니다.

사전 조건
  • 기존 Amazon EKS 클러스터. 배포하려면 Amazon EKS 시작하기 섹션을 참조하세요.

  • 클러스터가 1.21 이전 버전인 경우 Amazon VPC 및 CoreDNS 추가 기능은 서비스 계정 토큰에 나열된 최소 버전이어야 합니다.

kube-proxy Amazon EKS 추가 기능 추가

eksctl, AWS Management Console 또는 AWS CLI를 사용하여 kube-proxy Amazon EKS 추가 기능을 클러스터에 추가할 수 있습니다.

중요
  • kube-proxy Amazon EKS 추가 기능을 추가하기 전에 Amazon EKS가 관리를 시작할 설정을 자체 관리하지 않는지 확인하세요. Amazon EKS가 관리하는 설정을 확인하려면 Amazon EKS 추가 기능 구성 섹션을 참조하세요.

  • 추가 기능의 버전 번호가 사용 가능한 최신 kube-proxy 컨테이너 이미지 버전 표의 버전과 일치하지 않을 수 있습니다. 1.22.x 및 이전 버전의 추가 기능은 기본 이미지 유형을 배포합니다. 1.23.x 및 이후 버전의 추가 기능은 최소 이미지 유형을 배포합니다.

eksctl
eksctl을 사용하여 kube-proxy Amazon EKS 추가 기능을 추가하려면

my-cluster를 클러스터 이름으로 바꾼 후 다음 명령을 실행합니다. Eksctl이 사용자의 클러스터 버전에서 사용할 수 있는 최신 추가 기능 버전을 추가합니다.

eksctl create addon --name kube-proxy --cluster my-cluster --force

기존 설정과 충돌하는 --force 옵션과 Amazon EKS 추가 기능 설정을 제거할 경우, Amazon EKS 추가 기능의 추가 작업이 실패하고 충돌을 해결하는 데 도움이 되는 오류 메시지가 표시됩니다. 이 옵션을 사용하여 이러한 설정을 덮어쓰기 때문에 이 옵션을 지정하기 전에 Amazon EKS 추가 기능이 관리해야 하는 설정을 관리하지 않는지 확인합니다. Amazon EKS 추가 기능에 대한 자세한 내용은 Amazon EKS 추가 기능 구성 섹션을 참조하세요.

AWS Management Console
AWS Management Console을 사용하여 kube-proxy Amazon EKS 추가 기능을 추가하려면
  1. https://console.aws.amazon.com/eks/home#/clusters에서 Amazon EKS 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 클러스터(Clusters)를 선택한 다음 kube-proxy Amazon EKS 추가 기능을 구성할 클러스터의 이름을 선택합니다.

  3. 추가 기능(Add-ons) 탭을 선택합니다.

  4. 새 항목 추가(Add new)를 선택합니다.

    1. 이름(Name)에서 kube-proxy를 선택합니다.

    2. 사용할 버전(Version)을 선택합니다. 최신(Latest)으로 표시된 버전을 선택합니다.

    3. 클러스터에서 이 추가 기능에 대한 기존 구성을 재정의합니다.(Override existing configuration for this add-on on the cluster.)를 선택할 경우 기존 추가 기능에 대한 설정을 Amazon EKS 추가 기능의 설정으로 덮어쓸 수 있습니다. 이 옵션을 활성화하지 않고 기존 설정과 충돌하는 Amazon EKS 추가 기능 설정을 제거할 경우, Amazon EKS 추가 기능의 추가 작업이 실패하고 충돌을 해결하는 데 도움이 되는 오류 메시지가 표시됩니다. 이 옵션을 선택하기 전에 Amazon EKS 추가 기능이 사용자가 관리해야 할 설정을 관리하지 않는지 확인하십시오. Amazon EKS 추가 기능에 대한 자세한 내용은 Amazon EKS 추가 기능 구성 섹션을 참조하세요.

    4. 추가(Add)를 선택합니다.

AWS CLI
AWS CLI을 사용하여 kube-proxy Amazon EKS 추가 기능을 추가하려면
  1. 클러스터 버전에 사용할 수 있는 kube-proxy Amazon EKS 추가 기능의 최신 버전을 확인합니다. 1.23을 사용자의 클러스터 버전으로 바꿉니다.

    aws eks describe-addon-versions --kubernetes-version 1.23 --addon-name kube-proxy --query addons[].addonVersions[].addonVersion | grep 1.23

    출력 예는 다음과 같습니다.

    "v1.23.8-eksbuild.2", "v1.23.7-eksbuild.1",

    예제 출력에서 v1.23.8-eksbuild.2가 최신 버전입니다.

  2. 추가 기능을 생성합니다. my-cluster를 클러스터 이름으로 바꾸고 v1.23.8-eksbuild.2를 이전 단계의 출력에서 반환된 최신 버전으로 바꿉니다.

    aws eks create-addon --cluster-name my-cluster --addon-name kube-proxy --addon-version v1.23.8-eksbuild.2 --resolve-conflicts OVERWRITE

    기존 설정과 충돌하는 --resolve-conflicts OVERWRITE 옵션과 Amazon EKS 추가 기능 설정을 제거할 경우, 추가 기능의 생성 작업이 실패하고 충돌을 해결하는 데 도움이 되는 오류 메시지가 표시됩니다. 이 옵션을 사용하여 이러한 설정을 덮어쓰기 때문에 이 옵션을 지정하기 전에 Amazon EKS 추가 기능이 관리해야 하는 설정을 관리하지 않는지 확인합니다. Amazon EKS 추가 기능에 대한 자세한 내용은 Amazon EKS 추가 기능 구성 섹션을 참조하세요.

kube-proxy Amazon EKS 추가 기능 업데이트

kube-proxy Amazon EKS 추가 기능을 업데이트하기 위한 절차입니다. kube-proxy Amazon EKS 추가 기능을 추가하지 않은 경우, 대신 kube-proxy 자체 관리형 추가 기능 업데이트 섹션의 설차를 완료합니다. Amazon EKS는 새 버전이 릴리스되거나 새 Kubernetes 마이너 버전으로 클러스터를 업데이트한 후 클러스터의 kube-proxy를 자동으로 업데이트하지 않습니다. 기존 클러스터에 대한 kube-proxy를 업데이트하려면, 사용자가 업데이트를 시작합니다. 그러면 Amazon EKS가 추가 기능을 업데이트합니다.

중요
  • kube-proxy를 업데이트하기 전에 클러스터 및 노드를 새 Kubernetes 마이너 버전으로 업데이트하여 업데이트된 클러스터의 마이너 버전과 동일한 마이너 버전으로 업그레이드합니다.

  • 추가 기능의 버전 번호가 사용 가능한 최신 kube-proxy 컨테이너 이미지 버전 표의 버전과 일치하지 않을 수 있습니다. 1.22.x 및 이전 버전의 추가 기능은 기본 이미지 유형을 배포합니다. 1.23.x 및 이후 버전의 추가 기능은 최소 이미지 유형을 배포합니다.

eksctl
eksctl을 사용하여 kube-proxy Amazon EKS 추가 기능을 업데이트하려면
  1. kube-proxy Amazon EKS 추가 기능의 최신 버전을 확인합니다. my-cluster을 클러스터 이름으로 교체합니다.

    eksctl get addon --name kube-proxy --cluster my-cluster

    출력 예는 다음과 같습니다.

    NAME VERSION STATUS ISSUES IAMROLE UPDATE AVAILABLE kube-proxy v1.22.11-eksbuild.2 ACTIVE 0 v1.23.8-eksbuild.2
  2. 추가 기능을 이전 단계의 출력에서 UPDATE AVAILABLE에 반환된 버전으로 업데이트합니다.

    eksctl update addon --name kube-proxy --version v1.23.8-eksbuild.2 --cluster my-cluster --force

    기존 설정과 충돌하는 --force 옵션과 Amazon EKS 추가 기능 설정을 제거할 경우, Amazon EKS 추가 기능의 업데이트 작업이 실패하고 충돌을 해결하는 데 도움이 되는 오류 메시지가 표시됩니다. 이 옵션을 사용하여 이러한 설정을 덮어쓰기 때문에 이 옵션을 지정하기 전에 Amazon EKS 추가 기능이 관리해야 하는 설정을 관리하지 않는지 확인합니다. 이 설정의 기타 옵션에 대한 자세한 내용은 eksctl 설명서의 추가 기능을 참조하세요. Amazon EKS 추가 기능에 대한 자세한 내용은 Amazon EKS 추가 기능 구성 섹션을 참조하세요.

AWS Management Console
AWS Management Console을 사용하여 kube-proxy Amazon EKS 추가 기능을 업데이트하려면
  1. https://console.aws.amazon.com/eks/home#/clusters에서 Amazon EKS 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 클러스터(Clusters)를 선택한 다음 kube-proxy Amazon EKS 추가 기능을 업데이트할 클러스터의 이름을 선택합니다.

  3. 추가 기능(Add-ons) 탭을 선택합니다.

  4. kube-proxy 상자의 오른쪽 상단에 있는 상자를 선택한 다음 편집(Edit)을 선택합니다.

    1. 최신(Latest)으로 표시된 버전을 선택합니다.

    2. 충돌 해결 방법의 옵션 중 하나를 선택합니다. Amazon EKS 추가 기능에 대한 자세한 내용은 Amazon EKS 추가 기능 구성 섹션을 참조하세요.

    3. 업데이트(Update)를 선택합니다.

AWS CLI
AWS CLI을 사용하여 kube-proxy Amazon EKS 추가 기능을 업데이트하려면
  1. kube-proxy Amazon EKS 추가 기능의 최신 버전을 확인합니다. my-cluster을 클러스터 이름으로 교체합니다.

    aws eks describe-addon --cluster-name my-cluster --addon-name kube-proxy --query "addon.addonVersion" --output text

    출력 예는 다음과 같습니다.

    v1.22.11-eksbuild.2
  2. 클러스터 버전에 사용할 수 있는 kube-proxy Amazon EKS 추가 기능의 최신 버전을 확인합니다. 1.23을 사용자의 클러스터 버전으로 바꿉니다.

    aws eks describe-addon-versions --addon-name kube-proxy --kubernetes-version 1.23 \ --query "addons[].addonVersions[].[addonVersion, compatibilities[].defaultVersion]" --output text

    출력 예는 다음과 같습니다.

    v1.23.8-eksbuild.2 False v1.23.7-eksbuild.1 True

    아래에 True가 있는 버전이 추가 기능이 생성될 때 배포된 기본 버전입니다. 추가 기능이 생성될 때 배포된 버전이 사용 가능한 최신 버전이 아닐 수도 있습니다. 이전 출력에서는 추가 기능이 생성될 때 배포된 버전보다 새로운 버전을 사용할 수 있습니다.

  3. 추가 기능을 최신 버전으로 업데이트합니다. my-cluster를 클러스터 이름으로 바꾸고 v1.23.8-eksbuild.2를 이전 단계의 출력에서 반환된 최신 버전으로 바꿉니다.

    aws eks update-addon --cluster-name my-cluster --addon-name kube-proxy --addon-version v1.23.8-eksbuild.2 --resolve-conflicts PRESERVE

    PRESERVE(보존) 옵션에서는 추가 기능에 대해 설정한 사용자 정의 설정이 있으면 보존합니다. 이 설정의 기타 옵션에 대한 자세한 내용을 알아보려면 Amazon Web Services CLI Command Reference(Amazon Web Services 명령 레퍼런스)의 update-addon을 참조하세요. Amazon EKS 추가 기능에 대한 자세한 내용은 Amazon EKS 추가 기능 구성 섹션을 참조하세요.

kube-proxy Amazon EKS 추가 기능 제거

Amazon EKS 추가 기능을 제거하는 경우 다음 두 가지 옵션이 있습니다.

  • Preserve the add-on's software on your cluster(클러스터에 추가 기능 소프트웨어 유지) - 이 옵션을 사용하면 업데이트를 알리고 업데이트를 시작한 후 Amazon EKS 추가 기능을 자동으로 업데이트하는 모든 설정의 Amazon EKS 관리 및 Amazon EKS의 기능을 제거하지만 클러스터에서 추가 기능 소프트웨어는 유지합니다. 이 옵션을 사용하면 추가 기능을 Amazon EKS 추가 기능이 아닌 자체 관리형 추가 기능으로 만들 수 있습니다. 추가 기능에 가동 중지 시간이 발생하지는 않습니다.

  • 클러스터에서 추가 기능 소프트웨어 완전히 제거(Removing the add-on software entirely from your cluster) - 추가 기능이 제공하는 기능에 따라 클러스터에 리소스가 없는 경우에만 클러스터에서 Amazon EKS 추가 기능을 제거해야 합니다. Amazon EKS 추가 기능을 제거한 후 원할 경우 다시 추가할 수 있습니다.

추가 기능에 연결된 IAM 계정이 있는 경우 IAM 계정은 제거되지 않습니다.

eksctl, AWS Management Console 또는 AWS CLI를 사용하여 클러스터에서 kube-proxy Amazon EKS 추가 기능을 제거할 수 있습니다.

eksctl
eksctl을 사용하여 kube-proxy Amazon EKS 추가 기능을 제거하려면

my-cluster를 클러스터 이름으로 바꾸고 다음 명령을 실행합니다. --preserve를 제거하면 클러스터에서 추가 기능 소프트웨어를 제거합니다.

eksctl delete addon --cluster my-cluster --name kube-proxy --preserve
AWS Management Console
AWS Management Console을 사용하여 kube-proxy Amazon EKS 추가 기능을 제거하려면
  1. https://console.aws.amazon.com/eks/home#/clusters에서 Amazon EKS 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 클러스터(Clusters)를 선택한 다음 kube-proxy Amazon EKS 추가 기능을 제거할 클러스터의 이름을 선택합니다.

  3. 추가 기능(Add-ons) 탭을 선택합니다.

  4. kube-proxy 상자의 오른쪽 상단에서 확인란을 선택한 다음 제거(Remove)를 선택합니다. kube-proxy를 입력한 다음 제거(Remove)를 선택합니다.

AWS CLI
AWS CLI을 사용하여 kube-proxy Amazon EKS 추가 기능을 제거하려면

my-cluster를 클러스터 이름으로 바꾸고 다음 명령을 실행합니다. --preserve를 제거하면 클러스터에서 추가 기능 소프트웨어를 제거합니다.

aws eks delete-addon --cluster-name my-cluster --addon-name kube-proxy --preserve

kube-proxy 자체 관리형 추가 기능 업데이트

kube-proxy Amazon EKS 추가 기능을 추가하지 않은 클러스터가 있는 경우 다음 단계를 완료하여 자체 관리형 추가 기능을 업데이트하세요. kube-proxy Amazon EKS 추가 기능을 추가하지 않은 경우, 대신 kube-proxy Amazon EKS 추가 기능 업데이트 섹션의 설차를 완료합니다.

중요
  • kube-proxy를 업데이트하기 전에 클러스터 및 노드를 새 Kubernetes 마이너 버전으로 업데이트하여 업데이트된 클러스터의 마이너 버전과 동일한 마이너 버전으로 업그레이드합니다.

  • 1.22.x 및 이전 클러스터를 배포한 경우 기본 이미지 유형이 클러스터와 함께 배포되었습니다. 1.23.x 및 이상 버전의 클러스터를 배포한 경우 최소 이미지 유형이 배포되었습니다.

kubectl을 사용하여 kube-proxy 자체 관리형 추가 기능을 업데이트하려면
  1. kube-proxy 배포의 현재 버전을 확인합니다.

    kubectl get daemonset kube-proxy --namespace kube-system -o=jsonpath='{$.spec.template.spec.containers[:1].image}'

    출력 예는 다음과 같습니다.

    602401143452.dkr.ecr.region-code.amazonaws.com/eks/kube-proxy:v1.22.11-eksbuild.2
  2. 602401143452region-code를 출력의 값으로 바꾸어 kube-proxy 추가 기능을 업데이트합니다. 1.22.11-eksbuild.2각 Amazon EKS 클러스터 버전에 대해 사용 가능한 최신 kube-proxy 컨테이너 이미지 버전 표에 나열된 kube-proxy 버전으로 바꿉니다. 기본 또는 최소 이미지 유형에 대한 버전 번호를 지정할 수 있습니다.

    kubectl set image daemonset.apps/kube-proxy -n kube-system kube-proxy=602401143452.dkr.ecr.region-code.amazonaws.com/eks/kube-proxy:v1.23.8-eksbuild.2
  3. 동일한 클러스터에서 x86Arm 노드를 사용하고 있고 클러스터가 2020년 8월 17일 이전에 배포된 경우 다음 명령을 사용하여 여러 하드웨어 아키텍처에 대한 노드 선택기를 포함하도록 kube-proxy 매니페스트를 편집합니다. 이는 일회성 작업입니다. 매니페스트에 선택기를 추가한 후에는 업데이트할 때마다 이 옵션을 추가할 필요가 없습니다. 클러스터가 2020년 8월 17일 또는 이후에 배포된 경우 kube-proxy는 이미 멀티 아키텍처를 지원합니다.

    kubectl edit -n kube-system daemonset/kube-proxy

    다음 노드 선택기를 편집기에서 파일에 추가한 후 파일을 저장합니다. 편집기에서 이 텍스트를 포함할 위치에 대한 예는 GitHub에서 CNI 매니페스트 파일을 참조하세요. 이를 통해 Kubernetes는 노드의 하드웨어 아키텍처를 기반으로 올바른 하드웨어 이미지를 가져올 수 있습니다.

    - key: "kubernetes.io/arch" operator: In values: - amd64 - arm64
  4. 원래 클러스터가 Kubernetes 버전 1.14 이상으로 생성된 경우 kube-proxy가 이미 Affinity Rule에 포함되어 있으므로 이 단계를 건너뛸 수 있습니다. 원래 Kubernetes 버전 1.13 이하를 사용하여 Amazon EKS 클러스터를 생성하고 Fargate 노드를 사용하는 경우 NodeAffinity 규칙을 포함하도록 kube-proxy 매니페스트를 편집하여 kube-proxy pods가 Fargate 노드에서 예약되지 않도록 합니다. 이는 일회성 편집입니다. 매니페스트에 Affinity Rule을 추가하면 클러스터를 업그레이드할 때마다 이 옵션을 수행할 필요가 없습니다. kube-proxy DaemonSet를 편집합니다.

    kubectl edit -n kube-system daemonset/kube-proxy

    편집기에서 파일의 DaemonSet spec에 다음 Affinity Rule을 추가한 후 파일을 저장합니다. 편집기에서 이 텍스트를 포함할 위치에 대한 예는 GitHub에서 CNI 매니페스트 파일을 참조하세요.

    - key: eks.amazonaws.com/compute-type operator: NotIn values: - fargate