작성
·
14
·
수정됨
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/aws
의 1.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가지 오류가 발생했습니다.
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
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 가 사용되는지 모르겠네요,,
다른 해결 방법이 있을까요??
[ 추가 오류 2 해결 방안 ]
IAM external-dns-irsa-external-dns role 을 확인하니 권한 부여가 안되어 있었습니다.
inline policy 로 route53 으로 권한 연결을 해줬고 이후 레코드 생성 가능한 것 확인했습니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"route53:ChangeResourceRecordSets"
],
"Resource": [
"arn:aws:route53:::hostedzone/*"
]
},
{
"Effect": "Allow",
"Action": [
"route53:ListHostedZones",
"route53:ListResourceRecordSets",
"route53:ListTagsForResource"
],
"Resource": [
"*"
]
}
]
}
테라폼에서 json 파일로 권한 생성이 안되는 것 같은데 이유를 모르겠어서 일단 요렇게하고 수동으로 하고 넘어갔습니다.
답변 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]
}
kubectl get pods -A
명령어를 실행해서, Pod가 성공적으로 실행되고 있음을 확인하였습니다.관련 내용은 lablabs/eks-external-dns
모듈의 1.2.1 버전에 merge된 PR 내용을 참조하시면 도움이 됩니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 해결 방법을 제시하였습니다. 새로운 버전을 적용하여 이미지를 불러오는 데 성공하셨다니 다행입니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.