External DNS
ExternalDNSはKubernetesコントローラーで、クラスターのサービスとイングレス用のDNSレコードを自動的に管理します。KubernetesリソースとAWS Route 53などのDNSプロバイダーとの間の橋渡しとして機能し、DNSレコードがクラスターの状態と同期されるようにします。ロードバランサーにDNSエントリを使用することで、自動生成されたホスト名の代わりに人間が読みやすく、覚えやすいアドレスを提供し、組織のブランディングに合わせたドメイン名でサービスを簡単にアクセスおよび認識できるようにします。
このラボでは、ExternalDNSとAWS Route 53を使用して、KubernetesのイングレスリソースのDNS管理を自動化します。
まず、環境変数として提供されているIAMロールARNとHelmチャートバージョンを使用して、HelmでExternalDNSをインストールしましょう:
ExternalDNSポッドが実行されていることを確認しましょう:
NAME READY STATUS RESTARTS AGE
external-dns-5bdb4478b-fl48s 1/1 Running 0 2m
次に、DNS設定を追加して以前のイングレスリソースを更新しましょう:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ui
namespace: ui
annotations:
external-dns.alpha.kubernetes.io/hostname: ui.retailstore.com
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/healthcheck-path: /actuator/health/liveness
spec:
ingressClassName: alb
rules:
- host: ui.retailstore.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: ui
port:
number: 80
external-dns.alpha.kubernetes.io/hostnameアノテーションは、ExternalDNSにイングレス用に作成および管理するDNS名を指定し、アプリのホスト名とロードバランサーのマッピングを自動化します。
spec.rules.hostは、イングレスが待ち受けるドメイン名を定義し、ExternalDNSはこれを使って関連するロードバランサーの一致するDNSレコードを作成します。
この設定を適用しましょう:
ホスト名を使用して作成されたイングレスオブジェクトを確認しましょう:
NAME CLASS HOSTS ADDRESS PORTS AGE
ui alb ui.retailstore.com k8s-ui-ui-1268651632.us-west-2.elb.amazonaws.com 80 4m15s
DNSレコードの作成を確認します。ExternalDNSはretailstore.comのRoute 53プライベートホストゾーンにDNSレコードを自動的に作成します。
DNSエントリが調整されるまで数分かかる場合があります。
ExternalDNSのログを確認してDNSレコードの作成を確認します:
Desired change: CREATE ui.retailstore.com A
5 record(s) were successfully updated
リンクをクリックしてretailstore.comプライベートホストゾーンに移動することで、AWS Route 53コンソールで新しいDNSレコードを確認することもできます:
Route53コンソールを開く
Route 53のプライベートホストゾーンは、関連付けられたVPC(この場合はEKSクラスターVPC)からのみアクセス可能です。DNSエントリをテストするために、ポッド内からcurlを使用します:
HTTP/1.1 200 OK
Date: Thu, 24 Apr 2025 07:45:12 GMT
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 15
Connection: keep-alive
Set-Cookie: SESSIONID=c3f13e02-4ff3-40ba-866e-c777f7450997
{"status":"UP"}