1. ExternalDNS 배포
이번 실습은 Amazon EKS 원클릭 배포 환경에서 진행합니다.
그리고 새롭게 인프라를 배포하면 아래 기본 설정 명령을 입력 후 진행 바랍니다.
기본 설정 명령어
1.1. AWS Route 53 설정
자신이 소유한 도메인을 변수로 지정하고 정보를 확인합니다.
도메인 변수 선언
MyDomain=<자신의 도메인>
echo "export MyDomain=$MyDomain" >> /etc/profile
echo $MyDomain
Bash
복사
# 도메인 주소 변수 지정
aws route53 list-hosted-zones-by-name --dns-name "${MyDomain}." | jq
Bash
복사
# 도메인의 Hosted Zone 정보 확인
MyDnsHostedZoneId=`aws route53 list-hosted-zones-by-name --dns-name "${MyDomain}." --query "HostedZones[0].Id" --output text`
echo "export MyDnsHostedZoneId=$MyDnsHostedZoneId" >> /etc/profile
echo $MyDnsHostedZoneId
Bash
복사
# 도메인 ID 변수 지정
도메인 레코드 확인
aws route53 list-resource-record-sets \
--output json --hosted-zone-id "${MyDnsHostedZoneId}" \
--query "ResourceRecordSets[?Type == 'NS']" | jq -r '.[0].ResourceRecords[].Value'
Bash
복사
# NS 레코드 조회
aws route53 list-resource-record-sets \
--hosted-zone-id "${MyDnsHostedZoneId}" \
--query "ResourceRecordSets[?Type == 'A']" | jq
Bash
복사
# A 레코드 조회
while true; do aws route53 list-resource-record-sets \
--hosted-zone-id "${MyDnsHostedZoneId}" \
--query "ResourceRecordSets[?Type == 'A'].Name" \
--output text ; date ; echo ; sleep 1; done
Bash
복사
# [신규 터미널] A 레코드 조회 모니터링
1.2. ExternalDNS 설치
Note: Amazon EKS 원클릭 배포로 eksctl 명령에서 -external-dns-access 옵션을 추가해 노드의 IAM 역할에 ExternalDNS 권한을 부여했습니다.
external-dns-access 옵션 확인
eksctl create cluster --help
Bash
복사
# eksctl create cluster 옵션 확인
cat myeks.yaml | yh
Bash
복사
# myeks.yaml 확인
ExternalDNS 설치
curl -s -O https://raw.githubusercontent.com/cloudneta/cnaeblab/master/_data/externaldns.yaml
Bash
복사
# yaml 파일 다운로드
cat externaldns.yaml | yh
Bash
복사
# yaml 파일 확인
MyDomain=$MyDomain MyDnsHostedZoneId=$MyDnsHostedZoneId envsubst < externaldns.yaml | kubectl apply -f -
Bash
복사
# yaml 파일에 변수 치환 후 배포
kubectl get pod -l app.kubernetes.io/name=external-dns -n kube-system
Bash
복사
# ExternalDNS 확인
신규 터미널 - ExternalDNS 로그 모니터링
kubectl logs deploy/external-dns -n kube-system -f
Bash
복사
# [신규 터미널] ExternalDNS 로그 모니터링
2. Service NLB와 ExternalDNS 연동
앞서 구성한 ExternalDNS를 통해 자신의 도메인을 Service NLB와 연동하고 확인합니다.
2.1. 디플로이먼트와 Service NLB 배포
신규 터미널 - 파드, 서비스 모니터링
watch -d kubectl get pod,svc
Bash
복사
# [신규 터미널] 파드, 서비스 모니터링
디플로이먼트(게임 파드 2대) & 서비스(NLB) 생성
curl -s -O https://raw.githubusercontent.com/cloudneta/cnaeblab/master/_data/tetris.yaml
Bash
복사
# yaml 파일 다운로드
cat tetris.yaml | yh
Bash
복사
# yaml 파일 확인
kubectl apply -f tetris.yaml
Bash
복사
# 디플로이먼트 & 서비스 배포
2.2. ExternalDNS 연동 및 확인
NLB에 ExternalDNS로 연결
kubectl annotate service tetris "external-dns.alpha.kubernetes.io/hostname=tetris.$MyDomain"
Bash
복사
# NLB에 ExternalDNS 연결
도메인 주소 확인
dig +short tetris.$MyDomain
Bash
복사
# dig 명령으로 도메인 주소 확인
echo -e "My Domain Checker = https://www.whatsmydns.net/#A/tetris.$MyDomain"
Bash
복사
# whatsmydns 웹 페이지에서 도메인 주소 확인
echo -e "Tetris Game URL = http://tetris.$MyDomain"
Bash
복사
# Tetris 웹 접속 주소 확인
kube-ops-view에 ExternalDNS로 연결
kubectl annotate service kube-ops-view -n kube-system "external-dns.alpha.kubernetes.io/hostname=kubeopsview.$MyDomain"
Bash
복사
# NLB에 ExternalDNS 연결
3. 실습 환경 삭제
실습에 활용한 디플로이먼트와 서비스를 삭제합니다.
2장 전체 실습이 종료되어 Amazon EKS 원클릭 배포도 삭제해 모든 실습 환경을 삭제합니다.
디플로이먼트 & 서비스 삭제
kubectl delete deploy,svc tetris
Bash
복사
# 자원 삭제
kube-ops-view 삭제
helm uninstall kube-ops-view -n kube-system
Bash
복사
# kube-ops-view 삭제(helm)
Amazon EKS 원클릭 배포 삭제
eksctl delete cluster --name $CLUSTER_NAME \
&& aws cloudformation delete-stack --stack-name $CLUSTER_NAME
Bash
복사
# eks 원클릭 배포 삭제
Warning: Amazon EKS 원클릭 배포의 삭제는 약 15분 정도 소요됩니다. 삭제가 완료될 때 까지 SSH 연결 세션을 유지합니다.
Warning: 만약에 CloudFormation 스택이 삭제되지 않는다면 수동으로 VPC(myeks-VPC )를 삭제 후 CloudFormation 스택을 다시 삭제해 주세요.
여기까지 2장의 모든 실습을 마칩니다.
수고하셨습니다 :)