Closed2
external-dnsをEKSに入れるメモ
概要
EKSにexternal-dnsを入れたメモです。
バージョン
EKS: 1.29
external-dns: 0.14.2
インストール
ここを見ればよし
メモ
必要なポリシー
ここを参照
IRSAを利用する場合のサービスアカウント
ドキュメントでは以下のようにSAを定義しているが、IRSAを使う際はIAMロールのArnを指定すること
apiVersion: v1
kind: ServiceAccount
metadata:
name: external-dns
+ annotations:
+ eks.amazonaws.com/role-arn: arn:aws:iam::<account id>:role/<iam role name>
labels:
app.kubernetes.io/name: external-dns
clusterrolebindingのnamespace
デフォルトではdefault
が指定されているが、external-dnsをapplyしたnamespaceと合わせること
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: external-dns-viewer
labels:
app.kubernetes.io/name: external-dns
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: external-dns
subjects:
- kind: ServiceAccount
name: external-dns
- namespace: default # change to desired namespace: externaldns, kube-addons
+ namespace: <ここ> # change to desired namespace: externaldns, kube-addons
ホストゾーンを追加したい
--domainでドメインを、--txt-owner-idでホストゾーンのIDを指定します
containers:
- name: external-dns
image: registry.k8s.io/external-dns/external-dns:v0.14.2
args:
- --source=service
- --source=ingress
- --domain-filter=<domain># will make ExternalDNS see only the hosted zones matching provided domain, omit to process all available hosted zones
- --txt-owner-id=<hostzone id>
recordの削除がしたい
--policyでsync
を指定します
デフォルトはupsert-only
で、レコードの削除が行われません
containers:
- name: external-dns
image: registry.k8s.io/external-dns/external-dns:v0.14.2
args:
- --policy=sync # would prevent ExternalDNS from deleting any records, omit to enable full synchronization
helmでインストールする
helm repo add external-dns https://kubernetes-sigs.github.io/external-dns/
helm repo update external-dns
helm upgrade external-dns external-dns/external-dns \
--install --version 1.14.4 \
--namespace kube-system \
--set provider=aws \
--set aws.region=ap-northeast-1 \
--set aws.zoneType=public \
--set serviceAccount.create=false \
--set serviceAccount.name=external-dns \
--set domainFilters[0]=<domain> \
--set policy=sync \
--wait
external-dnsが正常に起動した際のログ
time="2024-07-06T03:39:23Z" level=info msg="Instantiating new Kubernetes client"
time="2024-07-06T03:39:23Z" level=info msg="Using inCluster-config based on serviceaccount-token"
time="2024-07-06T03:39:23Z" level=info msg="Created Kubernetes client https://172.20.0.1:443"
time="2024-07-06T03:39:24Z" level=info msg="Applying provider record filter for domains: [<domain>. .<domain>.]"
time="2024-07-06T03:39:24Z" level=info msg="All records are already up to date"
external-dnsが正常に起動しないログ
clusterrolebindingのnamespaceがexternal-dnsとあっていない場合
time="2024-07-06T03:34:24Z" level=info msg="Instantiating new Kubernetes client"
time="2024-07-06T03:34:24Z" level=info msg="Using inCluster-config based on serviceaccount-token"
time="2024-07-06T03:34:24Z" level=info msg="Created Kubernetes client https://172.20.0.1:443"
time="2024-07-06T03:35:24Z" level=fatal msg="failed to sync *v1.Service: context deadline exceeded"
レコードが追加されたときのログ
Aレコード、TXTレコード*2が作成されました
time="2024-07-06T03:47:23Z" level=info msg="Desired change: CREATE <ingressで指定したドメイン> A [Id: /hostedzone/<hostzone id>]"
time="2024-07-06T03:47:23Z" level=info msg="Desired change: CREATE <ingressで指定したドメイン> TXT [Id: /hostedzone/<hostzone id>]"
time="2024-07-06T03:47:23Z" level=info msg="Desired change: CREATE cname-<ingressで指定したドメイン> TXT [Id: /hostedzone/<hostzone id>]"
レコードが削除されたときのログ
time="2024-07-06T03:44:22Z" level=info msg="Desired change: DELETE <ingressで指定したドメイン> A [Id: /hostedzone/<hostzone id>]"
time="2024-07-06T03:44:22Z" level=info msg="Desired change: DELETE <ingressで指定したドメイン> TXT [Id: /hostedzone/<hostzone id>]"
time="2024-07-06T03:44:22Z" level=info msg="Desired change: DELETE cname-<ingressで指定したドメイン> TXT [Id: /hostedzone/<hostzone id>]"
このスクラップは5ヶ月前にクローズされました