반응형
개요
External-DNS 이란?
외부 도메인서버(AWS, Route53, 기타 DNS 등)를 사용해서 쿠버네티스의 리소스 쿼리를 할 수 있게 도와주는 솔루션이다.
외부 도메인서버에 Record를 등록, 삭제 할 수 있게 도와준다.
쿠버네티스가 ALB를 생성하면서 Route53에 Record도 자동으로 등록해준다.
[ IAM 권한 설정 3가지 방법 ]
external-dns가 route53에 Record를 등록하려면 IAM 권한 설정이 필요하다.
권한 설정 방법은 3가지로 나뉜다.
- Node IAM Role (비추천)
- WorkerNode에 IAM 권한을 설정해줘서 workernode에 올라간 모든 container들은 권한을 획득한다.
- 메뉴얼 링크 : https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/aws.md#node-iam-role
- Static credentials
- IAM Roles for Service Accounts (추천)
[ External-DNS Install ]
- AWS IAM (policy, role) 부터 설치해야합니다.
- policy, role yaml 파일 위치 :
1. policy 생성 (terraform code으로 생성)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"route53:ChangeResourceRecordSets"
],
"Resource": [
"arn:aws:route53:::hostedzone/*"
]
},
{
"Effect": "Allow",
"Action": [
"route53:ListHostedZones",
"route53:ListResourceRecordSets"
],
"Resource": [
"*"
]
}
]
}
2. Role 생성 (terraform code으로 생성)
변수로 되어있는 부분을 내용으로 변경해서 넣어야합니다.
$ACCOUNT : AWS Account ID 값으로 변경해서 넣어야합니다.
$OIDC_PROVIDER : EKS OIDC 값으로 변경해서 넣어야합니다.
-----------------------------------------------
ACCOUNT_ID=$(aws sts get-caller-identity \
--query "Account" --output text)
OIDC_PROVIDER=$(aws eks describe-cluster --name $EKS_CLUSTER_NAME \
--query "cluster.identity.oidc.issuer" --output text | sed -e 's|^https://||')
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::$ACCOUNT:oidc-provider/$OIDC_PROVIDER"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"$OIDC_PROVIDER:aud": "sts.amazonaws.com",
"$OIDC_PROVIDER:sub": "system:serviceaccount:kube-system:external-dns"
}
}
}
]
}
3. external-dns repository 정보
helm repo add bitnami https://charts.bitnami.com/bitnami
helm pull bitnami/external-dns
- GitHub 위치 :
4. external-dns - values.yaml 수정
txtOwnerId: "xxx" # route53 Domain ID 값
serviceAccount:
annotations: {eks.amazonaws.com/role-arn: arn:aws:iam::xxx:role/external-dns-role}
# external-dns role ARN 주소 값
5. external-dns 배포
helm upgrade --install external-dns . -f values.yaml -n kube-system
[ external-dns 설치 후 확인 ]
- ServiceAccount external-dns 내용 확인
- annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::xxx:role/external-dns-role 값 확인
- annotations:
# 확인 명령어
kubectl get sa -n kube-system external-dns -o yaml
- POD 확인
kubectl get pod -l app.kubernetes.io/name=external-dns -n kube-system
[ external-dns 옵션 설명 ]
- policy : route53에 record 권한 설정 부분
upsert-only : 레코드셋 생성,업데이트 (삭제 불가능)
sync : 레코듯셋 생성,업데이트,삭제
create-only: 레코드셋 생성 (삭제, 업데이트 불가능) - txt-owner-id
> AWS Route53에서 Hostzon ID 값 넣는 곳
> AWS Route53에서 관리할 도메인 설정 부분 - sources
- service
- ingress
- istio-gateway
- istio-virtualservice
반응형
'인프라 > 시스템 구축' 카테고리의 다른 글
[ EKS ] aws-efs-csi-driver (0) | 2023.03.31 |
---|---|
[ EKS ] metrics-server (0) | 2023.03.31 |
[ EKS ] Aws LoadBalancer Controller (0) | 2023.03.31 |
[ AWS ] VPN + TGW (0) | 2023.02.14 |
[ AWS ] NTH(Node Termination Handler) (0) | 2023.02.13 |