External DNS
ExternalDNSはKubernetesコントローラーで、クラスターのサービスとIngressのDNSレコードを自動的に管理します。KubernetesリソースとAWS Route 53などのDNSプロバイダー間の橋渡しとして機能し、DNSレコードがクラスターの状態と同期されるようにします。ロードバランサーにDNSエントリを使用することで、自動生成されたホスト名の代わりに人間が読みやすく記憶しやすいアドレスを提供し、組織のブランディングに合ったドメイン名でサービスを簡単にアクセス可能かつ認識可能にします。
このラボでは、ExternalDNSとAWS Route 53を使用してKubernetes IngressリソースのDNS管理を自動化します。
まず、環境変数として提供されているIAM role ARNとHelmチャートバージョンを使用して、HelmでExternalDNSをインストールしましょう:
ExternalDNS Podが実行されていることを確認します:
NAME READY STATUS RESTARTS AGE
external-dns-5bdb4478b-fl48s 1/1 Running 0 2m
次に、DNS設定を含めて以前のIngressリソースを更新しましょう:
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
alb.ingress.kubernetes.io/inbound-cidrs: $INBOUND_CIDRS
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にIngress用に作成および管理するDNS名を指定し、アプリのホスト名とロードバランサーのマッピングを自動化します。
spec.rules.hostは、Ingressが待ち受けるドメイン名を定義し、ExternalDNSはこれを使用して関連する ロードバランサーに対応するDNSレコードを作成します。
この設定を適用します:
ホスト名が設定されたIngressオブジェクトを確認しましょう:
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レコードを自動的に作成します。