ExternalDNS는 kubernetes dns(kube-dns)와 상반되는 개념으로 내부 도메인서버가 아닌 Public한 도메인서버(AWS Route53, GCP DNS 등)를 사용하여 쿠버네티스의 리소스를 쿼리할 수 있게 해주는 오픈소스 솔루션이다.
ExternalDNS를 사용하면 public도메인 서버가 무엇이든 상관없이 쿠버네티스 리소스를 통해서 DNS레코드를 동적으로 관리 할 수 있다.
ExternalDNS 설치
쿠버네티스 서비스 계정에 IAM 역할을 사용하려면 OIDC 공급자가 필요하다. IAM OIDC 자격 증명 공급자를 생성한다.
External DNS용도의 구분된 namespace를 생성한다.
External DNS가 Route53을 제어할 수 있도록 정책을 생성한다. IAM Policy json 파일을 생성해준다.
생성한 json파일로 IAM Policy를 생성한다.
eksctl
을 이용하여 iam service account를 생성한다.
클러스터 노드 IAM Role에 Route53 접근권한이 설정되지 않는 경우 배포가 되지 않는다. 적용이 안되었으면 IAM Role 콘솔에서 직접 적용해야한다.
External DNS 배포
공식 문서를 참고하여 yaml파일을 작성하고 배포한다.
eks.amazonaws.com/role-arn
과 domain-filter
를 정확하게 입력해줘야 한다.
policy는 Route53에서 레코드 업데이트를 제어하는 정책을 뜻한다.
- upsert-only: 생성, 업데이트
- sync: 생성, 업데이트, 삭제
- create-only: 생성
서비스 배포
ingress에 external-dns.alpha.kubernetes.io/hostname
와 service.beta.kubernetes.io/aws-load-balancer-ssl-cert
annotation을 추가하여 설정해준다.
배포된 external-dns의 로그를 확인해서 레코드가 정상적으로 생성되는지 확인할 수 있다.
참고