강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

이강훈님의 프로필 이미지
이강훈

작성한 질문수

CloudNet@ - Amazon EKS 확장판 강의

[실습] 실습 개요 및 기본 인프라 배포 - 2

ch1 external-dns pod 관련 버전 오류와 해결 방법 후 추가 오류 사항

작성

·

13

·

수정됨

0

[ 문제 식별 ]

테라폼 배포 후 pod 상태를 확인하니 external-dns pod 가 ImagePullBackOff 상태였습니다

(myeks:N/A) root@myeks-bastion-EC2:~# kubectl describe pod external-dns-7dc878c-jpd77 -n kube-system

...

Events:
  Type     Reason     Age                  From               Message
  ----     ------     ----                 ----               -------
  Normal   Scheduled  10m                  default-scheduler  Successfully assigned kube-system/external-dns-7dc878c-jpd77 to ip-192-168-3-186.ap-northeast-2.compute.internal
  Normal   Pulling    7m57s (x5 over 10m)  kubelet            Pulling image "docker.io/bitnami/external-dns:0.12.0-debian-11-r3"
  Warning  Failed     7m56s (x5 over 10m)  kubelet            Failed to pull image "docker.io/bitnami/external-dns:0.12.0-debian-11-r3": rpc error: code = NotFound desc = failed to pull and unpack image "docker.io/bitnami/external-dns:0.12.0-debian-11-r3": failed to resolve reference "docker.io/bitnami/external-dns:0.12.0-debian-11-r3": docker.io/bitnami/external-dns:0.12.0-debian-11-r3: not found
  Warning  Failed     7m56s (x5 over 10m)  kubelet            Error: ErrImagePull
  Normal   BackOff    38s (x43 over 10m)   kubelet            Back-off pulling image "docker.io/bitnami/external-dns:0.12.0-debian-11-r3"
  Warning  Failed     38s (x43 over 10m)   kubelet            Error: ImagePullBackOff

 

ch1 테라폼 코드에서 eks-external-dns 모듈 내 버전이 1.2.0 으로 지정되어있는데 해당 버전은 bitnami 레포에서 이미지를 사용합니다.

 

bitnami 레포에 들어가보니 더이상 해당 이미지를 무료로 제공하지 않는다고 나오네요 ㅜ

 

그래서 lablabs/eks-external-dns/aws1.2.1 버전에 merge 된 pr 내용을 보니

bitnami -> kubernetes-sig 로 변경되었다고 나오고 있어서 1.2.1 버전으로 변경했고 해결되었습니다.

 

[ 해결 방안 ]

eks.tf 내 eks-external-dns 모듈 내용을 아래처럼 수정하고 적용했습니다.

module "eks-external-dns" {
  source  = "lablabs/eks-external-dns/aws"
  version = "1.2.1"

  cluster_identity_oidc_issuer     = module.eks.cluster_oidc_issuer_url
  cluster_identity_oidc_issuer_arn = local.cluster_oidc_issuer_arn

  irsa_assume_role_arns = []

  depends_on = [helm_release.aws_load_balancer_controller]
}

irsa_assume_role_arns 는 1.2.1 부터 필요로해서 비워두고 생성했습니다.

 

그리고 pod 생성, running 상태 확인했습니다.

(myeks:N/A) root@myeks-bastion-EC2:~# kubectl get pods -A
NAMESPACE     NAME                                           READY   STATUS    RESTARTS   AGE
kube-system   aws-load-balancer-controller-9774b5bf9-fd6wb   1/1     Running   0          61m
kube-system   aws-load-balancer-controller-9774b5bf9-mltpg   1/1     Running   0          61m
kube-system   aws-node-6c6d5                                 2/2     Running   0          73m
kube-system   aws-node-mqxqd                                 2/2     Running   0          73m
kube-system   aws-node-p2hcg                                 2/2     Running   0          73m
kube-system   coredns-7bb47d475b-k9dfl                       1/1     Running   0          73m
kube-system   coredns-7bb47d475b-q5m9n                       1/1     Running   0          73m
kube-system   external-dns-745b66b8d6-vrhjk                  1/1     Running   0          11m
kube-system   kube-proxy-gbwf9                               1/1     Running   0          73m
kube-system   kube-proxy-rmdcd                               1/1     Running   0          73m
kube-system   kube-proxy-txm2x                               1/1     Running   0          73m

 

혹시나 pod 상태보다 궁금하신 분 있을까해서 Q&A 에 올립니다!

[ 추가 오류 ]

위 구성 후 실습 진행 중 2가지 오류가 발생했습니다.

  1. kubernetes-sig pod 내 bash shell 없음

     

(myeks:default) root@myeks-bastion-EC2:~# kubectl exec -it deploy/external-dns -n kube-system -- bash
error: Internal error occurred: Internal error occurred: error executing command in container: failed to exec in container: failed to start exec "8270eecee52a2fc8d4f16a986c88cf9ecc8d852258d6f1a88ac680a6f95510d6": OCI runtime exec failed: exec failed: unable to start container process: exec: "bash": executable file not found in $PATH: unknown

 

  1. external-pod 로그를 보니 권한 관련 오류 발생 중

time="2025-10-10T11:55:27Z" level=error msg="Failed to do run once: soft error\nrecords retrieval failed: soft error\nfailed to list hosted zones: operation error Route 53: ListHostedZones, https response error StatusCode: 403, RequestID: 881c4bac-1a87-4454-b2c3-2657680fb2d0, api error AccessDenied: User: arn:aws:sts::{제거}:assumed-role/external-dns-irsa-external-dns/1760097326486557347 is not authorized to perform: route53:ListHostedZones because no identity-based policy allows the route53:ListHostedZones action"              
time="2025-10-10T11:56:27Z" level=error msg="Failed to do run once: soft error\nrecords retrieval failed: soft error\nfailed to list hosted zones: operation error Route 53: ListHostedZones, https response error StatusCode: 403, RequestID: 7d915626-3e26-4491-a53a-7ac3c5d4b024, api error AccessDenied: User: arn:aws:sts::{제거}:assumed-role/external-dns-irsa-external-dns/1760097326486557347 is not authorized to perform: route53:ListHostedZones because no identity-based policy allows the route53:ListHostedZones action"

kubernetes-sig 이미지를 사용해서 인지 2가지 문제가 있습니다.

 

eks-external-dns 모듈 내 irsa_assume_role_arns 에 값을 넣어봐도 로그는 동일하게 출력되네요.

 

ch1 실습의 파드 쉘은 다른 파드를 사용하면 될 것 같은데 이후 ch5 까지 과정에 external-dns 가 사용되는지 모르겠네요,,

 

다른 해결 방법이 있을까요??

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 이강훈님께서 External DNS Pod의 ImagePullBackOff 오류와 관련하여 문의를 주셨네요. Terraform 모듈 내 버전 관리와 관련하여 이미지 pull에서 발생한 문제 원인과 해결 방안을 알려주셔서 감사합니다. 동일한 문제를 겪으시는 다른 수강생분들에게 큰 도움이 될 것 같습니다.

문제 원인

이 오류는 bitnami 레포지토리에서 더 이상 해당 이미지를 무료 제공하지 않기 때문에 발생한 것입니다. 이로 인해 Terraform 모듈 설정에서 구 버전을 사용하면서 생긴 문제로 볼 수 있습니다.

해결 방안

  • 모듈 버전 업데이트: 모듈 내 eks-external-dns 버전을 1.2.0에서 1.2.1로 변경하여 문제를 해결할 수 있습니다. 이를 통해 bitnami 레포지토리에서 kubernetes-sig로 이미지 소스를 변경할 수 있습니다.

  • Terraform 코드 수정: 아래와 같이 eks.tf 에 설정을 변경하셨습니다.

  module "eks-external-dns" {
    source  = "lablabs/eks-external-dns/aws"
    version = "1.2.1"

    cluster_identity_oidc_issuer     = module.eks.cluster_oidc_issuer_url
    cluster_identity_oidc_issuer_arn = local.cluster_oidc_issuer_arn

    irsa_assume_role_arns = []

    depends_on = [helm_release.aws_load_balancer_controller]
  }
  • Pod 상태 확인: 위 변경 사항을 반영한 후 kubectl get pods -A 명령어를 실행해서, Pod가 성공적으로 실행되고 있음을 확인하였습니다.

관련 내용은 lablabs/eks-external-dns 모듈의 1.2.1 버전에 merge된 PR 내용을 참조하시면 도움이 됩니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 해결 방법을 제시하였습니다. 새로운 버전을 적용하여 이미지를 불러오는 데 성공하셨다니 다행입니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

이강훈님의 프로필 이미지
이강훈

작성한 질문수

질문하기