コンテナ化アプリケーションをクラスタにデプロイする場合、クラスタの内部サービスに加えて、外部サービスまたはインターフェースにアクセスする必要があります。この場合、外部ドメイン名解決が重要になります。DNS 解決速度を向上させるために、外部ドメイン名に DNS サーバーを指定できます。静的 IP アドレスにマップされているドメイン名については、ローカルホストファイルにマッピングを追加することもできます。このトピックでは、前述の要件を満たすために CustomDNSConfig CustomResource (CR) を定義することで、マネージド CoreDNS の DNS 設定を構成する方法について説明します。
カスタム CoreDNS パラメータの概要
次の例では、カスタム CoreDNS パラメータを構成する方法について説明します。
apiVersion: networking.alibabacloud.com/v1beta1
kind: CustomDNSConfig
metadata:
name: default
namespace: default
spec:
zones:
- name: example.com
forward:
protocolStrategy: ""
transportConfig: {}
upstreams:
- xxx.xxx.xxx.xxx # IPアドレス
- xxx.xxx.xxx.xxx:53 # IP:ポート
hosts:
- hostName: "a.example.com"
ipAddress: xxx.xxx.xxx.xxx カスタムゾーン。ゾーンは完全修飾ドメイン名 (FQDN) である必要があります。デフォルト値:
"."。.forward.protocolStrategyパラメータのデフォルト値は "" で、UDP が使用されることを指定します。このパラメータをtcpに設定することもできます。.forward.transportConfigパラメータのデフォルト値は {} です。このパラメータの値を変更することはできません。単一ゾーンで
.forward.upstreamsパラメータを使用して、カスタムアップストリーム DNS サーバーアドレスを構成できます。このパラメータは IP または IP:PORT の形式で、IPv4 のみをサポートします。.forward.upstreamsパラメータを指定しない場合、Alibaba Cloud DNS PrivateZone が使用されます。.forward.upstreamsパラメータには、最大 15 個のアップストリーム DNS サーバーアドレスを指定できます。
単一ゾーンでカスタムホストプラグインを構成し、静的 IP アドレスをドメイン名にマップできます。
hostNameパラメータは、特定のドメイン名を定義するために使用されます。ドメイン名の形式は、DNS 仕様に準拠している必要があります。ipAddressパラメータは、ドメイン名にマップされた IP アドレスを定義するために使用されます。これは有効な IPv4 アドレスである必要があります。hostNameパラメータを使用して、複数の IP アドレス (ipAddress) を定義できます。例:... hosts: - hostName: "a.example.com" ipAddress: 10.0.0.123 - hostName: "a.example.com" ipAddress: 10.0.0.124 ...
CustomDNSConfigは、名前空間全体の CustomResourceDefinition (CRD) ではありません。default という名前の CustomDNSConfig CR のみ作成できます。
前提条件
マネージド CoreDNS プラグインがインストールされています。プラグインのバージョンは 1.9.3.20 以後です。詳細については、コンポーネントの管理 を参照してください。
kubectl クライアントがクラスタに接続されています。詳細については、クラスタの kubeconfig ファイルを取得し、kubectl を使用してクラスタに接続する を参照してください。
シナリオ 1: カスタムゾーンを構成する
default.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。
apiVersion: networking.alibabacloud.com/v1beta1 kind: CustomDNSConfig metadata: name: default spec: zones: - name: example.com forward: upstreams: - 100.100.2.136 # example.com のアップストリーム DNS サーバーアドレスを 100.100.2.136 と 100.100.2.138 に設定します。 - 100.100.2.138 - name: foo.com hosts: -hostName: "a.foo.com"# foo.com ゾーンの a.foo.com と b.foo.com にカスタム静的 IP アドレスを構成します。 ipAddress: 192.168.0.251 - hostName: "b.foo.com" ipAddress: 192.168.0.252YAML ファイルには、2 つのカスタムゾーンが構成されています。
example.com
アップストリーム DNS サーバーアドレスを
100.100.2.136と100.100.2.138に設定します。説明100.100.2.136と100.100.2.138は、システムによって割り当てられたデフォルトの内部 DNS 解決サービスアドレスです。詳細については、エンドポイント を参照してください。foo.com
a.foo.comとb.foo.comにカスタム静的 IP アドレスを構成します。
次のコマンドを実行して、CustomDNSConfig CR を作成します。
kubectl apply -f default.yaml次のコマンドを実行して、生成された corefile を表示します。
kubectl get customdnsconfig default -o yaml |grep corefile -A 35 -B 1予期される出力:
status: corefile: | example.com:53 { prometheus :9153 forward . 100.100.2.136 100.100.2.138 { policy random prefer_udp } ... } foo.com:53 { prometheus :9153 hosts { 192.168.0.251 a.foo.com 192.168.0.252 b.foo.com fallthrough } forward . /etc/resolv.conf { policy random prefer_udp } ... } ... -- corefileHash: 41f7be21cf3022c305091665ed33b1e5 lastTransitionTime: "2024-09-13T09:07:37Z" phase: GenerateSuccess出力は、default という名前の CustomDNSConfig CR が作成され、対応する
corefileがstatusパラメータにあることを示しています。
シナリオ 2: デフォルトゾーン構成を変更する
default.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。
apiVersion: networking.alibabacloud.com/v1beta1 kind: CustomDNSConfig metadata: name: default spec: zones: - name: . forward: upstreams: -100.100.2.136 # "." という名前のカスタムデフォルトゾーンのアップストリーム DNS サーバーアドレスは 100.100.2.136 と 100.100.2.138 です。 - 100.100.2.138YAML ファイルでは、カスタムアップストリーム DNS サーバーアドレスは
100.100.2.136と100.100.2.138です。次のコマンドを実行して、CustomDNSConfig CR を作成します。
kubectl apply -f default.yaml次のコマンドを実行して、生成された corefile を表示します。
kubectl get customdnsconfig default -o yaml |grep corefile -A 35 -B 1予期される出力:
status: corefile: | .:53 { errors health { lameduck 20s } ready kubeapi { kubeconfig /etc/kubernetes/config/managed-coredns.conf } k8s_event { level error warning } ... prometheus :9153 forward . 100.100.2.136 100.100.2.138 { policy random prefer_udp } ... } corefileHash: 847bf69cc4c97cee965945f45d17c661 lastTransitionTime: "2024-09-13T09:54:22Z" phase: GenerateSuccessdefault という名前の CustomDNSConfig CR が作成され、corefile が生成されます。
説明CustomDNSConfigCR を作成または変更した後、CoreDNS は構成の再読み込みを実行する必要があります。これには約 20 秒かかります。corefileパラメータのlamduckの値を変更することで、CoreDNS の再読み込み時間を調整できます。デフォルト値は 20 秒です。
トラブルシューティング
default という名前の CustomDNSConfig CR のみ作成できます。このセクションでは、default 以外の名前で CustomDNSConfig CR を作成すると、CustomDNSConfig のステータスが NotSupported になる理由について説明します。
gotest.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。
apiVersion: networking.alibabacloud.com/v1beta1 kind: CustomDNSConfig metadata: name: test ## default という名前の CustomDNSConfig CR のみ作成できます。 spec: zones: - name: example.com forward: upstreams: - 100.100.2.138 - name: foo.com hosts: - hostName: "ah.foo.com" ipAddress: 1.1.xx.251 - hostName: "aha.foo.com" ipAddress: 1.1.xx.252次のコマンドを実行して、CustomDNSConfig CR を作成します。
kubectl apply -f test.yaml次のコマンドを実行して、生成された corefile を表示します。
kubectl get customdnsconfig予期される出力:
NAME PHASE VERSION AGE default GenerateSuccess 847bf69cc4c97cee96xxxxxxxxxxx 89m test NotSupported 9s出力は、test という名前の CustomDNSConfig CR を作成できず、
NotSupportedが表示されることを示しています。
イベント情報
カスタム CoreDNS コントローラは、イベント情報をデフォルトの名前空間に同期します。
次のコマンドを実行して、イベントを表示します。
kubectl get events予期される出力:
LAST SEEN TYPE REASON OBJECT MESSAGE
45m Normal CustomDNSConfigSyncOk customdnsconfig/default custom dns config sync to coredns configmap success