Kubernetes クラスターのアプリケーションのドメイン名の指定

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 設定ファイルを作成して、クラスターにデプロイします。

  1. 次の設定が含まれる 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
  2. 新しい 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​)。

  3. 静的ログイン情報を使用する場合、非表示の ​env​ および ​volumes​ 設定が含まれる行からコメント (​#​) を削除します。

  4. ターミナルウィンドウから次のコマンドを使用して、設定をクラスターに適用します。

    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))」​を参照してください。

  1. YAML 設定ファイルを作成して、ExternalDNS キーと、カンマ区切りのドメイン値のセットを指定します。

    プレースホルダー値 ​<domain-0>,…​,<domain-N>​ を各自のドメインに置き換えます。

    extraAnnotations:
      external-dns.alpha.kubernetes.io/hostname: <domain-0>,...,<domain-N>
  2. -f​ オプションを使用して、設定ファイルを ​helm upgrade​ コマンドに渡します。

    使用するコマンドは、登録済みゲートウェイがクラスターにデプロイされているかどうかによって異なります。

    1. 始めて 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>
    2. アノテーションを使用して実行中のゲートウェイを更新する場合、次のコマンドを実行します。

      helm -n gateway upgrade \
      --wait ingress flex-gateway/flex-gateway \
      --reuse-values \
      -f <your-YAML-config-file>