CoreDNS 추가 기능 관리 - Amazon EKS

CoreDNS 추가 기능 관리

CoreDNS는 Kubernetes 클러스터 DNS로 사용할 수 있는 유연하고 확장 가능한 DNS 서버입니다. 하나 이상의 노드가 있는 Amazon EKS 클러스터를 시작하면 클러스터에 배포된 노드 수에 관계없이 CoreDNS 이미지의 복제본 2개가 기본적으로 배포됩니다. CoreDNS pods는 클러스터의 모든 pods의 이름을 확인합니다. 클러스터에 CoreDNS deployment의 네임 스페이스와 일치하는 네임스페이스의 AWS Fargate 프로파일이 포함되어 있는 경우 CoreDNS pods를 Fargate 노드에 배포할 수 있습니다. CoreDNS에 대한 자세한 내용은 Kubernetes 설명서의 서비스 검색에 CoreDNS 사용을 참조하세요.

다음 표에는 각 Amazon EKS 클러스터 버전과 함께 배포되는 CoreDNS 추가 기능의 버전이 나와 있습니다.

각 Amazon EKS 지원 클러스터 버전과 함께 배포되는 CoreDNS 버전
Kubernetes 버전 1.23 1.22 1.21 1.20 1.19 1.18
CoreDNS 1.8.7-eksbuild.2 1.8.7 1.8.4 1.8.3 1.8.0 1.7.0

AWS Management Console을 사용하여 1.18 이상 클러스터를 생성한 경우 Amazon EKS가 추가 기능을 Amazon EKS 추가 기능으로 설치한 상태가 됩니다. 도구를 사용하여 1.17 이하 클러스터를 생성했거나 AWS Management Console 이외의 다른 도구를 사용하여 1.18 이상 클러스터를 생성한 경우 Amazon EKS가 플러그인을 자체 관리형 추가 기능으로 설치한 상태가 됩니다.

CoreDNS Amazon EKS 추가 기능 추가의 절차를 사용하여 자체 관리형 추가 기능을 Amazon EKS 추가 기능으로 마이그레이션할 수 있습니다. CoreDNS 추가 기능을 추가한 클러스터가 있는 경우 CoreDNS Amazon EKS 추가 기능 업데이트CoreDNS Amazon EKS 추가 기능 제거 섹션의 절차를 따라 관리할 수 있습니다. Amazon EKS 추가 기능에 대한 자세한 내용은 Amazon EKS 추가 기능 섹션을 참조하세요.

CoreDNS Amazon EKS 추가 기능을 추가하지 않은 경우, CoreDNS 자체 관리형 추가 기능이 클러스터에서 계속 실행 중입니다. CoreDNS 자체 관리형 추가 기능 업데이트 섹션의 절차에 따라 CoreDNS 자체 관리형 추가 기능을 업데이트할 수 있습니다.

사전 조건

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

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

CoreDNS Amazon EKS 추가 기능 추가

클러스터에 CoreDNS Amazon EKS 추가 기능을 추가하는 데 사용할 도구 이름이 있는 탭을 선택합니다.

중요

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

eksctl

eksctl을 사용하여 CoreDNS Amazon EKS 추가 기능을 추가하려면

my-cluster를 클러스터 이름으로 바꾸고 다음 명령을 실행합니다.

eksctl create addon --name coredns --cluster my-cluster --force

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

AWS Management Console

AWS Management Console을 사용하여 CoreDNS Amazon EKS 추가 기능을 추가하려면

  1. https://console.aws.amazon.com/eks/home#/clusters에서 Amazon EKS 콘솔을 엽니다.

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

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

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

    1. 이름(Name)에서 CoreDNS를 선택합니다.

    2. 사용할 버전(Version)을 선택합니다.

    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을 사용하여 CoreDNS Amazon EKS 추가 기능을 추가하려면

my-cluster를 클러스터 이름으로 바꾸고 다음 명령을 실행합니다.

aws eks create-addon \ --cluster-name my-cluster \ --addon-name coredns \ --resolve-conflicts OVERWRITE

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

CoreDNS Amazon EKS 추가 기능 업데이트

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

eksctl

eksctl을 사용하여 CoreDNS Amazon EKS 추가 기능을 업데이트하려면

  1. coredns Amazon EKS 추가 기능의 최신 버전을 확인합니다. my-cluster을 클러스터 이름으로 교체합니다.

    eksctl get addon --name coredns --cluster my-cluster

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

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

    eksctl update addon \ --name coredns \ --version v1.8.3-eksbuild.1 \ --cluster my-cluster \ --force

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

AWS Management Console

AWS Management Console을 사용하여 CoreDNS Amazon EKS 추가 기능을 업데이트하려면

  1. https://console.aws.amazon.com/eks/home#/clusters에서 Amazon EKS 콘솔을 엽니다.

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

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

  4. coredns 상자의 오른쪽 상단에 있는 라디오 버튼을 선택한 다음 편집(Edit)을 선택합니다.

    1. 사용하려는 Amazon EKS 추가 기능의 버전을 선택합니다.

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

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

AWS CLI

AWS CLI을 사용하여 CoreDNS Amazon EKS 추가 기능을 업데이트하려면

  1. CoreDNS 추가 기능의 현재 버전을 확인합니다. my-cluster을 클러스터 이름으로 교체합니다.

    aws eks describe-addon \ --cluster-name my-cluster \ --addon-name coredns \ --query "addon.addonVersion" \ --output text

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

    1.7.0
  2. 클러스터 버전에 사용할 수 있는 CoreDNS 추가 기능 버전을 확인합니다.

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

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

    1.8.0 True 1.7.0 False

    아래에 True가 있는 버전은 새 클러스터와 함께 배포된 기본 버전입니다.

  3. 추가 기능을 이전 단계의 출력에서 True가 반환된 버전으로 업데이트합니다. 출력에서 반환된 경우 이후 버전으로 업데이트할 수도 있습니다.

    aws eks update-addon \ --cluster-name my-cluster \ --addon-name coredns \ --addon-version 1.8.0 \ --resolve-conflicts OVERWRITE

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

CoreDNS 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 계정은 제거되지 않습니다.

버전 1.18 이상 클러스터에 CoreDNS Amazon EKS 추가 기능을 제거하는 데 사용할 도구 이름이 있는 탭을 선택합니다.

eksctl

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

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

eksctl delete addon --cluster my-cluster --name coredns --preserve
AWS Management Console

AWS Management Console을 사용하여 CoreDNS Amazon EKS 추가 기능을 제거하려면

  1. https://console.aws.amazon.com/eks/home#/clusters에서 Amazon EKS 콘솔을 엽니다.

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

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

  4. coredns 상자의 오른쪽 상단에 있는 라디오 버튼을 선택한 다음 제거(Remove)를 선택합니다. coredns를 입력한 다음 제거(Remove)를 선택합니다.

AWS CLI

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

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

aws eks delete-addon --cluster-name my-cluster --addon-name coredns --preserve

CoreDNS 자체 관리형 추가 기능 업데이트

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

kubectl을 사용하여 CoreDNS 자체 관리형 추가 기능을 업데이트하려면

  1. CoreDNS 추가 기능의 현재 버전을 확인합니다.

    kubectl describe deployment coredns \ --namespace kube-system \ | grep Image \ | cut -d "/" -f 3

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

    coredns:v1.8.0
  2. 현재 CoreDNS 버전이 1.5.0 이상이지만 CoreDNS 버전 표에 나열된 버전보다 낮은 경우 이 단계를 건너뜁니다. 현재 버전이 1.5.0 버전보다 낮은 경우 프록시 추가 기능 대신 전달 추가 기능을 사용하도록 CoreDNS의 ConfigMap을 수정해야 합니다.

    1. 다음 명령을 통해 Configmap을 엽니다.

      kubectl edit configmap coredns -n kube-system
    2. 다음 줄의 proxyforward로 바꿉니다. 파일을 저장하고 편집기를 종료합니다.

      proxy . /etc/resolv.conf
  3. 원래 Kubernetes 1.17 이전 버전에서 클러스터를 배포한 경우 CoreDNS 매니페스트에서 더 이상 사용되지 않는 용어를 제거해야 할 수 있습니다.

    중요

    CoreDNS 버전 1.7.0으로 업그레이드하기 전에 이 작업을 완료해야 하지만 이전 버전으로 업그레이드하는 경우에도 이 단계를 완료하는 것이 좋습니다.

    1. CoreDNS 매니페스트에 이 줄이 있는지 확인합니다.

      kubectl get configmap coredns -n kube-system -o jsonpath='{$.data.Corefile}' | grep upstream

      결과가 반환되지 않으면 매니페스트에 해당 줄이 없는 것이므로 다음 단계로 건너뛰어 CoreDNS를 업데이트할 수 있습니다. 출력이 반환되면 줄을 제거해야 합니다.

    2. 다음 명령을 사용하여 ConfigMap을 편집하고 파일에서 upstream 단어가 포함된 줄을 제거합니다. 파일에서 다른 것을 변경하지 마세요. 이 줄을 제거한 후 변경 사항을 저장하세요.

      kubectl edit configmap coredns -n kube-system -o yaml
  4. 최신 CoreDNS 이미지를 검색합니다.

    kubectl get deployment coredns \ --namespace kube-system \ -o=jsonpath='{$.spec.template.spec.containers[:1].image}'
  5. CoreDNS 1.8.3 이상으로 업데이트하는 경우 system:coredns Kubernetes clusterroleendpointslices 권한을 추가해야 합니다.

    kubectl edit clusterrole system:coredns -n kube-system

    파일의 rules 섹션의 기존 권한 줄 아래에 다음 줄을 추가합니다.

    ... - apiGroups: - discovery.k8s.io resources: - endpointslices verbs: - list - watch ...
  6. 602401143452, , region-code를 이전 단계에서 반환된 결과의 값으로 바꾸는 하여 CoreDNS 추가 기능을 업데이트합니다.1.8.7-eksbuild.2을 클러스터의 권장 CoreDNS 버전 이상으로 바꿉니다.

    kubectl set image --namespace kube-system deployment.apps/coredns \ coredns=602401143452.dkr.ecr.region-code.amazonaws.com/eks/coredns:v1.8.7-eksbuild.2