ExternalDNS を使用して、わかりにくい外部 IP やランダムなホスト名の代わりにドメイン名で Kubernetes クラスターのアプリケーションまたはサービスを公開します。
ExternalDNS は、多くの DNS プロバイダーの DNS 設定をサポートするオープンソースプロジェクトです。このツールは、DNS サーバーまたはプロバイダーではありません。代わりに、ExternalDNS は公開 DNS サーバーを介して Kubernetes リソースを検出し、サポートされている DNS プロバイダーのリソースを設定します。
このガイドでは、ExternalDNS を使用して、AWS Route 53 プロバイダー (ExternalDNS でサポートされている安定性の高いプロバイダーの 1 つ) のドメイン名を設定します。
始める前に
次の前提条件が準備されていることを確認します。
-
AWS の Kubernetes クラスター
-
AWS クラスターへの Flex Gateway デプロイメントまたは登録済みの Flex Gateway インスタンス (ゲートウェイ)
ゲートウェイの登録およびデプロイメントプロセスについては、Flex Gateway のセットアップ or Kubernetes クラスターでの Flex Gateway の使用開始を参照してください。
-
ExternalDNS が Amazon Route 53 リソースレコードセットとホストゾーンを更新することを許可する AWS Identity and Access Management (IAM) ポリシー
別の対象を使用したり、これらの許可で IAM ポリシーを作成したりするには、 ExternalDNS ドキュメントを参照してください。
ExternalDNS をクラスターに追加する
ExternalDNS (external-dns) をクラスターに追加するには、次のコンテンツが含まれる YAML 設定ファイルを作成して、クラスターにデプロイします。
-
次の設定が含まれる YAML ファイルを作成します。
apiVersion: apps/v1 kind: Deployment metadata: name: external-dns labels: app.kubernetes.io/name: external-dns spec: strategy: type: Recreate selector: matchLabels: app.kubernetes.io/name: external-dns template: metadata: labels: app.kubernetes.io/name: external-dns spec: containers: - name: external-dns image: registry.k8s.io/external-dns/external-dns:v0.13.1 args: - --source=service - --source=ingress - --domain-filter=<your-domain> # makes only hosted zones visible - --provider=aws - --policy=upsert-only # prevents record deletion - --aws-zone-type=public # public zones only - --registry=txt - --txt-owner-id=my-hostedzone-identifier env: - name: AWS_DEFAULT_REGION value: <aws-region> # sets the EKS region # # Uncomment the following settings when using static credentials # - name: AWS_SHARED_CREDENTIALS_FILE # value: /.aws/credentials # volumeMounts: # - name: aws-credentials # mountPath: /.aws # readOnly: true # volumes: # - name: aws-credentials # secret: # secretName: external-dns -
新しい YAML ファイルの場合、デプロイメントで必要に応じて次のオプションを設定します。
-
args オプション:-
- --domain-filter=<your-domain>: ドメインに一致するホストゾーンを ExternalDNS で参照できるようにします。すべての使用可能なホストゾーンを処理するには、このオプションを省略します。このオプションは、
external-dns が意図したとおりに動作するために重要です。 -
- --policy=upsert-only: ExternalDNS でレコードが削除されないようにします。完全な同期を有効にするには、このオプションを省略します。 -
- --aws-zone-type=public: 公開ホストゾーンのみを参照できるようにします。有効な値は public または private です。または、両方のゾーン種別の値を指定しないこともできます。
-
-
env オプション value: <aws-region>: EKS クラスターがインストールされるリージョン (例:us-east-1)。
-
-
静的ログイン情報を使用する場合、非表示の
env および volumes 設定が含まれる行からコメント (#) を削除します。 -
ターミナルウィンドウから次のコマンドを使用して、設定をクラスターに適用します。
kubectl create --filename <external-dns-yaml> --namespace <your-namespace>
Flex Gateway の Helm チャートを介して DNS 名を設定する
helm upgrade で extraAnnotations パラメーターを使用して、ドメイン名を設定します。このパラメーターについては、 「Helm chart for Flex Gateway (flex-gateway) (Flex Gateway の Helm チャート (flex-gateway))」を参照してください。
-
YAML 設定ファイルを作成して、ExternalDNS キーと、カンマ区切りのドメイン値のセットを指定します。
プレースホルダー値
<domain-0>,…,<domain-N> を各自のドメインに置き換えます。extraAnnotations: external-dns.alpha.kubernetes.io/hostname: <domain-0>,...,<domain-N>
-
-f オプションを使用して、設定ファイルを helm upgrade コマンドに渡します。使用するコマンドは、登録済みゲートウェイがクラスターにデプロイされているかどうかによって異なります。
-
始めて Flex Gateway をクラスターにデプロイする場合、次のコマンドを実行します。プレースホルダー値は、各自のゲートウェイの登録 YAML ファイル (デフォルトでは
registration.yaml) へのパスとドメイン名に置き換えます。helm -n gateway upgrade \ -i --create-namespace \ --wait ingress flex-gateway/flex-gateway \ --set-file registration.content=<path-to-registration> \ -f <your-YAML-config-file> -
アノテーションを使用して実行中のゲートウェイを更新する場合、次のコマンドを実行します。
helm -n gateway upgrade \ --wait ingress flex-gateway/flex-gateway \ --reuse-values \ -f <your-YAML-config-file>
-