このトピックでは、ExternalDNS パッケージのリファレンス情報について説明します。

ExternalDNS について

ExternalDNS により、公開された Kubernetes サービスおよび Ingress が DNS プロバイダに同期されます。

TKG クラスタに ExternalDNS をインストールするには、次のトピックを参照してください。

ExternalDNS のコンポーネント

ExternalDNS パッケージは、表に一覧表示されているコンテナをインストールします。このパッケージは、パッケージ リポジトリで指定されているパブリック レジストリからコンテナをプルします。
コンテナ リソースの種類 レプリカ 説明
ExternalDNS DaemonSet 6 DNS ルックアップのための Kubernetes サービスの公開

ExternalDNS データ値

ExternalDNS データ値ファイルは、ExternalDNS コンポーネントとサポートされている DNS プロバイダとのインターフェイスに使用されます。ExternalDNS パッケージは、AWS (Route 53)、Azure DNS、および RFC2136 準拠の DNS サーバ(BIND など)の各 DNS プロバイダで検証されます。

次の例は、RFC2136 準拠の DNS プロバイダ(BIND など)に使用できます。
---
# Namespace in which to deploy ExternalDNS pods
namespace: tanzu-system-service-discovery
# Deployment-related configuration
deployment:
args:
   - --registry=txt
   - --txt-owner-id=k8s
   - --txt-prefix=external-dns- #! Disambiguates TXT records from CNAME records
   - --provider=rfc2136
   - --rfc2136-host=IP-ADDRESS #! Replace with IP of RFC2136-compatible DNS server, such as 192.168.0.1
   - --rfc2136-port=53
   - --rfc2136-zone=DNS-ZONE #! Replace with zone where services are deployed, such as my-zone.example.org 
   - --rfc2136-tsig-secret=TSIG-SECRET #! Replace with TSIG key secret authorized to update DNS server
   - --rfc2136-tsig-secret-alg=hmac-sha256
   - --rfc2136-tsig-keyname=TSIG-KEY-NAME #! Replace with TSIG key name, such as externaldns-key
   - --rfc2136-tsig-axfr
   - --source=service
   - --source=ingress
   - --source=contour-httpproxy #! Enables Contour HTTPProxy object support
   - --domain-filter=DOMAIN #! Zone where services are deployed, such as my-zone.example.org
次の例は、AWS DNS プロバイダ (Route 53) に使用できます。
---
    namespace: service-discovery
    dns:
      pspNames: "vmware-system-restricted"
      deployment:
        args:
        - --source=service
        - --source=ingress
        - --source=contour-httpproxy #! read Contour HTTPProxy resources
        - --domain-filter=my-zone.example.org #! zone where services are deployed
        - --provider=aws
        - --policy=upsert-only #! prevent deleting any records, omit to enable full synchronization
        - --aws-zone-type=public #! only look at public hosted zones (public, private, no value for both)
        - --aws-prefer-cname
        - --registry=txt
        - --txt-owner-id=HOSTED_ZONE_ID #! Route53 hosted zone identifier for my-zone.example.org
        - --txt-prefix=txt #! disambiguates TXT records from CNAME records
        env:
          - name: AWS_ACCESS_KEY_ID
            valueFrom:
              secretKeyRef:
                name: route53-credentials #! Kubernetes secret for route53 credentials
                key: aws_access_key_id
          - name: AWS_SECRET_ACCESS_KEY
            valueFrom:
              secretKeyRef:
                name: route53-credentials #! Kubernetes secret for route53 credentials
                key: aws_secret_access_key
次の例は、Azure DNS プロバイダに使用できます。
---
    namespace: service-discovery
    dns:
      pspNames: "vmware-system-restricted"
      deployment:
        args:
        - --provider=azure
        - --source=service
        - --source=ingress
        - --source=contour-httpproxy #! read Contour HTTPProxy resources
        - --domain-filter=my-zone.example.org #! zone where services are deployed
        - --azure-resource-group=my-resource-group #! Azure resource group
        volumeMounts:
        - name: azure-config-file
          mountPath: /etc/kubernetes
          readOnly: true
        #@overlay/replace
        volumes:
        - name: azure-config-file
          secret:
            secretName: azure-config-file

ExternalDNS の構成

次の表に、ExternalDNS で使用可能な構成パラメータとその説明を示します。その他のガイダンスについては、 https://github.com/kubernetes-sigs/external-dns#running-externaldns サイトを参照してください。
表 1. 外部 DNS パッケージの構成
パラメータ 説明 タイプ デフォルト
externalDns.namespace external-dns がデプロイされる名前空間 文字列 tanzu-system-service-discovery
externalDns.image.repository external-dns image 文字列 projects.registry.vmware.com/tkg
externalDns.image.name external-dns の名前 文字列 external-dns
externalDns.image.tag ExternalDNS のイメージ タグ 文字列 v0.7.4_vmware.1
externalDns.image.pullPolicy ExternalDNS のイメージ プル ポリシー 文字列 IfNotPresent
externalDns.deployment.annotations external-dns のデプロイの注釈 map<string,string> {}
externalDns.deployment.args コマンドラインを介して external-dns に渡される引数 list<string> [](必須パラメータ)
externalDns.deployment.env external-dns に渡す環境変数 list<string> []
externalDns.deployment.securityContext external-dns コンテナのセキュリティ コンテキスト セキュリティ コンテキスト {}
externalDns.deployment.volumeMounts external-dns コンテナのボリューム マウント list<VolumeMount> []
externalDns.deployment.volumes external-dns ポッドのボリューム list<Volume> []

configmap の例

次に示す configmap の例では、ExternalDNS が操作できる Kerberos 構成を定義しています。カスタム エントリには、ドメイン/レルム名と kdc/admin_server アドレスが含まれます。
apiVersion: v1
kind: ConfigMap
metadata:
  name: krb.conf
  namespace: tanzu-system-service-discovery
data:
  krb5.conf: |
    [logging]
    default = FILE:/var/log/krb5libs.log
    kdc = FILE:/var/log/krb5kdc.log
    admin_server = FILE:/var/log/kadmind.log
 
    [libdefaults]
    dns_lookup_realm = false
    ticket_lifetime = 24h
    renew_lifetime = 7d
    forwardable = true
    rdns = false
    pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt
    default_ccache_name = KEYRING:persistent:%{uid}
 
    default_realm = CORP.ACME
 
    [realms]
    CORP.ACME = {
      kdc = controlcenter.corp.acme
      admin_server = controlcenter.corp.acme
    }
 
    [domain_realm]
    corp.acme = CORP.ACME
    .corp.acme = CORP.ACME