5.6. OpenShift Container Platform の DNS Operator
				OpenShift Container Platform の DNS Operator は、CoreDNS インスタンスをデプロイおよび管理して、クラスター内の Pod に名前解決サービスを提供し、DNS ベースの Kubernetes Service 検出を有効にし、内部の cluster.local 名を解決します。
			
5.6.1. DNS Operator のステータスの確認
					DNS Operator は、operator.openshift.io API グループから dns API を実装します。この Operator は、デーモンセットを使用して CoreDNS をデプロイし、デーモンセットのサービスを作成し、kubelet を Pod に対して名前解決に CoreDNS サービス IP を使用するように指示するように設定します。
				
手順
						DNS Operator は、インストール時に Deployment オブジェクトを使用してデプロイされます。
					
- oc getコマンドを使用してデプロイメントのステータスを表示します。- oc get -n openshift-dns-operator deployment/dns-operator - $ oc get -n openshift-dns-operator deployment/dns-operator- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 出力例 - NAME READY UP-TO-DATE AVAILABLE AGE dns-operator 1/1 1 1 23h - NAME READY UP-TO-DATE AVAILABLE AGE dns-operator 1/1 1 1 23h- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- oc getコマンドを使用して DNS Operator の状態を表示します。- oc get clusteroperator/dns - $ oc get clusteroperator/dns- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 出力例 - NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE dns 4.1.15-0.11 True False False 92m - NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE dns 4.1.15-0.11 True False False 92m- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - AVAILABLE、- PROGRESSING、および- DEGRADEDは、Operator のステータスに関する情報を示します。- AVAILABLEが- Trueになるのは、CoreDNS デーモンセットの 1 つ以上の Pod が- AVAILABLEステータス条件を報告し、DNS サービスがクラスター IP アドレスを持っている場合です。
5.6.2. デフォルト DNS の表示
					すべての新規 OpenShift Container Platform インストールには、default という名前の dns.operator があります。
				
手順
- oc describeコマンドを使用してデフォルトの- dnsを表示します。- oc describe dns.operator/default - $ oc describe dns.operator/default- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 出力例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- クラスターのサービス CIDR 範囲を確認するには、 - oc getコマンドを使用します。- oc get networks.config/cluster -o jsonpath='{$.status.serviceNetwork}'- $ oc get networks.config/cluster -o jsonpath='{$.status.serviceNetwork}'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 出力例 - [172.30.0.0/16] - [172.30.0.0/16]- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
5.6.3. DNS 転送の使用
					次の方法で、DNS 転送を使用して /etc/resolv.conf ファイル内のデフォルトの転送設定をオーバーライドできます。
				
- 
							すべてのゾーンにネームサーバー (spec.servers) を指定します。転送されるゾーンが OpenShift Container Platform によって管理される Ingress ドメインである場合、そのドメインに対してアップストリームのネームサーバーが許可されている必要があります。
- 
							アップストリーム DNS サーバーのリスト (spec.upstreamResolvers) を指定します。
- デフォルトの転送ポリシーを変更します。
						デフォルトドメインの DNS 転送設定には、/etc/resolv.conf ファイルおよびアップストリーム DNS サーバーで指定されたデフォルトのサーバーの両方を設定できます。
					
手順
- defaultという名前の DNS Operator オブジェクトを変更します。- oc edit dns.operator/default - $ oc edit dns.operator/default- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 上記のコマンドを実行すると、Operator が、 - spec.serversに基づく追加のサーバー設定ブロックを使用して- dns-defaultという名前の config map を作成および更新します。クエリーに一致するゾーンがサーバーにない場合には、名前解決はアップストリーム DNS サーバーにフォールバックします。- DNS 転送の設定 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- rfc6335サービス名の構文に準拠する必要があります。
- 2
- rfc1123サービス名構文のサブドメインの定義に準拠する必要があります。クラスタードメインの- cluster.localは、- zonesフィールドの無効なサブドメインです。
- 3
- forwardPluginにリストされているアップストリームリゾルバーを選択するポリシーを定義します。デフォルト値は- Randomです。- RoundRobinおよび- Sequentialの値を使用することもできます。
- 4
- forwardPluginごとに最大 15 の- upstreamsが許可されます。
- 5
- upstreamResolversを使用すると、デフォルトの転送ポリシーをオーバーライドし、デフォルトドメインの指定された DNS リゾルバー (アップストリームリゾルバー) に DNS 解決を転送できます。アップストリームリゾルバーを提供しなかった場合、DNS 名のクエリーが- /etc/resolv.confで宣言されたサーバーに送信されます。
- 6
- upstreamsにリストされているアップストリームサーバーをクエリーのために選択する順序を決定します。- Random、- RoundRobin、または- Sequentialのいずれかの値を指定できます。デフォルト値は- Sequentialです。
- 7
- 省略すると、デフォルト (通常は元のクライアント要求のプロトコル) が選択されます。TCPに設定すると、クライアント要求が UDP を使用する場合でも、すべてのアップストリーム DNS 要求に対して TCP が必ず使用されます。
- 8
- DNS 要求をアップストリームリゾルバーに転送するときに使用するトランスポートタイプ、サーバー名、およびオプションのカスタム CA または CA バンドルを設定するために使用されます。
- 9
- 2 種類のupstreams(SystemResolvConfまたはNetwork) を指定できます。SystemResolvConfで、アップストリームが/etc/resolv.confを使用するように設定して、NetworkでNetworkresolverを定義します。1 つまたは両方を指定できます。
- 10
- 指定したタイプがNetworkの場合には、IP アドレスを指定する必要があります。addressフィールドは、有効な IPv4 または IPv6 アドレスである必要があります。
- 11
- 指定したタイプがNetworkの場合、必要に応じてポートを指定できます。portフィールドには1-65535の値を指定する必要があります。アップストリームのポートを指定しない場合、デフォルトのポートは 853 です。
 
5.6.4. DNS Operator のステータスの確認
					oc describe コマンドを使用して、DNS Operator のステータスを検査し、その詳細を表示することができます。
				
手順
- DNS Operator のステータスを表示します。 - oc describe clusteroperators/dns - $ oc describe clusteroperators/dns- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - メッセージとスペルはリリースによって異なる場合がありますが、期待されるステータス出力は次のようになります。 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
5.6.5. DNS Operator のログの表示
					oc logs コマンドを使用して、DNS Operator ログを表示できます。
				
手順
- DNS Operator のログを表示します。 - oc logs -n openshift-dns-operator deployment/dns-operator -c dns-operator - $ oc logs -n openshift-dns-operator deployment/dns-operator -c dns-operator- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
5.6.6. CoreDNS ログレベルの設定
					CoreDNS と CoreDNS Operator のログレベルは、それぞれ異なる方法を使用して設定します。CoreDNS ログレベルを設定して、ログに記録されたエラーメッセージの情報量を決定できます。CoreDNS ログレベルの有効な値は、Normal、Debug、および Trace です。デフォルトの logLevel は Normal です。
				
CoreDNS のエラーログレベルは常に有効です。次のログレベル設定では、それぞれ異なるエラー応答が報告されます。
- 
								logLevel:Normalは "errors" class:log . { class error }を有効にします。
- 
								logLevel:Debugは "denial" class:log . { class denial error }を有効にします。
- 
								logLevel:Traceは "all" class:log . { class all }を有効にします。
手順
- logLevelを- Debugに設定するには、次のコマンドを入力します。- oc patch dnses.operator.openshift.io/default -p '{"spec":{"logLevel":"Debug"}}' --type=merge- $ oc patch dnses.operator.openshift.io/default -p '{"spec":{"logLevel":"Debug"}}' --type=merge- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- logLevelを- Traceに設定するには、次のコマンドを入力します。- oc patch dnses.operator.openshift.io/default -p '{"spec":{"logLevel":"Trace"}}' --type=merge- $ oc patch dnses.operator.openshift.io/default -p '{"spec":{"logLevel":"Trace"}}' --type=merge- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
検証
- 目的のログレベルが設定されていることを確認するには、config map を確認します。 - oc get configmap/dns-default -n openshift-dns -o yaml - $ oc get configmap/dns-default -n openshift-dns -o yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - たとえば、 - logLevelを- Traceに設定すると、各サーバーブロックに次のスタンザが表示されます。- errors log . { class all }- errors log . { class all }- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
5.6.7. CoreDNS ログの表示
					oc logs コマンドを使用して CoreDNS ログを表示できます。
				
手順
- 特定の CoreDNS Pod のログを表示するには、次のコマンドを入力します。 - oc -n openshift-dns logs -c dns <core_dns_pod_name> - $ oc -n openshift-dns logs -c dns <core_dns_pod_name>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- すべての CoreDNS Pod のログを追跡するには、次のコマンドを入力します。 - oc -n openshift-dns logs -c dns -l dns.operator.openshift.io/daemonset-dns=default -f --max-log-requests=<number> - $ oc -n openshift-dns logs -c dns -l dns.operator.openshift.io/daemonset-dns=default -f --max-log-requests=<number>- 1 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- ログをストリーミングする DNS Pod の数を指定します。最大は 6 です。
 
5.6.8. CoreDNS Operator のログレベルの設定
					CoreDNS と CoreDNS Operator のログレベルは、それぞれ異なる方法を使用して設定します。クラスター管理者は、Operator ログレベルを設定して、OpenShift DNS の問題をより迅速に追跡できます。operatorLogLevel の有効な値は、Normal、Debug、および Trace です。Trace には最も詳細にわたる情報が含まれます。デフォルトの operatorlogLevel は Normal です。Operator の問題のログレベルには、Trace、Debug、Info、Warning、Error、Fatal、および Panic の 7 つがあります。ログレベルの設定後に、その重大度またはそれを超える重大度のログエントリーがログに記録されます。
				
- 
							operatorLogLevel: "Normal"はlogrus.SetLogLevel("Info")を設定します。
- 
							operatorLogLevel: "Debug"はlogrus.SetLogLevel("Debug")を設定します。
- 
							operatorLogLevel: "Trace"はlogrus.SetLogLevel("Trace")を設定します。
手順
- operatorLogLevelを- Debugに設定するには、次のコマンドを入力します。- oc patch dnses.operator.openshift.io/default -p '{"spec":{"operatorLogLevel":"Debug"}}' --type=merge- $ oc patch dnses.operator.openshift.io/default -p '{"spec":{"operatorLogLevel":"Debug"}}' --type=merge- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- operatorLogLevelを- Traceに設定するには、次のコマンドを入力します。- oc patch dnses.operator.openshift.io/default -p '{"spec":{"operatorLogLevel":"Trace"}}' --type=merge- $ oc patch dnses.operator.openshift.io/default -p '{"spec":{"operatorLogLevel":"Trace"}}' --type=merge- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
検証
- 結果の変更を確認するには、次のコマンドを入力します。 - oc get dnses.operator -A -oyaml - $ oc get dnses.operator -A -oyaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 2 つのログレベルのエントリーが表示されるはずです。 - operatorLogLevelは OpenShift DNS Operator の問題に適用され、- logLevelは CoreDNS Pod のデーモンセットに適用されます。- logLevel: Trace operatorLogLevel: Debug - logLevel: Trace operatorLogLevel: Debug- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- デーモンセットのログを確認するには、次のコマンドを入力します。 - oc logs -n openshift-dns ds/dns-default - $ oc logs -n openshift-dns ds/dns-default- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
5.6.9. CoreDNS キャッシュのチューニング
CoreDNS の場合、成功または失敗したキャッシュ (それぞれポジティブキャッシュまたはネガティブキャッシュとも呼ばれます) の最大期間を設定できます。DNS クエリー応答のキャッシュ期間をチューニングすると、アップストリーム DNS リゾルバーの負荷を軽減できます。
TTL フィールドを低い値に設定すると、クラスター、上流のリゾルバー、またはその両方の負荷が増加する可能性があります。
手順
- 次のコマンドを実行して、 - defaultという名前の DNS Operator オブジェクトを編集します。- oc edit dns.operator.openshift.io/default - $ oc edit dns.operator.openshift.io/default- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- Time-to-Live (TTL) キャッシュ値を変更します。 - DNS キャッシングの設定 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
検証
- 変更を確認するには、次のコマンドを実行して config map を再度確認します。 - oc get configmap/dns-default -n openshift-dns -o yaml - oc get configmap/dns-default -n openshift-dns -o yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 次の例のようなエントリーが表示されていることを確認します。 - cache 3600 { denial 9984 2400 }- cache 3600 { denial 9984 2400 }- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
5.6.10. 高度なタスク
5.6.10.1. DNS Operator managementState の変更
						DNS Operator は、CoreDNS コンポーネントを管理し、クラスター内の Pod とサービスに名前解決サービスを提供します。DNS Operator の managementState は、デフォルトで Managed に設定されます。これは、DNS Operator がそのリソースをアクティブに管理していることを意味します。これを Unmanaged に変更できます。つまり、DNS Operator がそのリソースを管理していないことを意味します。
					
						以下は、DNS Operator managementState を変更するためのユースケースです。
					
- 
								開発者は、CoreDNS の問題が修正されているかどうかを確認するために、設定変更をテストする必要があります。managementStateをUnmanagedに設定することで、DNS Operator による設定変更の上書きを防止できます。
- 
								クラスター管理者は、CoreDNS の問題を報告していますが、問題が修正されるまで回避策を適用する必要があります。DNS Operator の managementStateフィールドをUnmanagedに設定して、回避策を適用できます。
手順
- DNS Operator の - managementStateを- Unmanagedに変更します。- oc patch dns.operator.openshift.io default --type merge --patch '{"spec":{"managementState":"Unmanaged"}}'- oc patch dns.operator.openshift.io default --type merge --patch '{"spec":{"managementState":"Unmanaged"}}'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- jsonpathコマンドライン JSON パーサーを使用して DNS Operator の- managementStateを確認します。- oc get dns.operator.openshift.io default -ojsonpath='{.spec.managementState}'- $ oc get dns.operator.openshift.io default -ojsonpath='{.spec.managementState}'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 出力例 - "Unmanaged" - "Unmanaged"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
							managementState が Unmanaged に設定されている間はアップグレードできません。
						
5.6.10.2. DNS Pod 配置の制御
						DNS Operator には 2 つのデーモンセットがあります。1 つは CoreDNS 用の dns-default という名前のデーモンセットで、もう 1 つは /etc/hosts ファイルの管理用の node-resolver という名前のデーモンセットです。
					
場合によっては、どのノードに CoreDNS Pod を割り当てて実行するかを制御する必要があります (ただし、これは一般的な操作ではありません)。たとえば、クラスター管理者がノードのペア間の通信を禁止できるセキュリティーポリシーを設定している場合、CoreDNS のデーモンセットが実行されるノードのセットを制限する必要があります。DNS Pod がクラスター内の一部のノードで実行されており、DNS Pod が実行されていないノードから DNS Pod が実行されているノードへのネットワーク接続がある場合、すべての Pod で DNS サービスが利用可能になります。
						node-resolver デーモンセットは、すべてのノードホストで実行する必要があります。このデーモンセットにより、イメージのプルをサポートするクラスターイメージレジストリーのエントリーが追加されるためです。node-resolver Pod には、1 つのジョブのみがあります。コンテナーランタイムがサービス名を解決できるように、image-registry.openshift-image-registry.svc サービスのクラスター IP アドレスを検索し、それをノードホストの /etc/hosts に追加するジョブです。
					
クラスター管理者は、カスタムノードセレクターを使用して、CoreDNS のデーモンセットを特定のノードで実行するか、実行しないように設定できます。
前提条件
- 
								ocCLI がインストールされている。
- 
								cluster-admin権限を持つユーザーとしてクラスターにログインしている。
- 
								DNS Operator の managementStateがManagedに設定されている。
手順
- CoreDNS のデーモンセットを特定のノードで実行できるようにするために、taint と toleration を設定します。 - defaultという名前の DNS Operator オブジェクトを変更します。- oc edit dns.operator/default - $ oc edit dns.operator/default- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- taint の taint キーおよび toleration を指定します。 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- taint がdns-onlyである場合、それは無制限に許容できます。tolerationSecondsは省略できます。
 
 
5.6.10.3. TLS を使用した DNS 転送の設定
高度に規制された環境で作業する場合は、要求をアップストリームリゾルバーに転送する際に DNS トラフィックのセキュリティーを確保して、追加の DNS トラフィックおよびデータのプライバシーを確保できるようにする必要がある場合があります。
CoreDNS は転送された接続を 10 秒間キャッシュすることに注意してください。要求が発行されない場合、CoreDNS はその 10 秒間、TCP 接続を開いたままにします。大規模なクラスターでは、ノードごとに接続を開始できるため、DNS サーバーが多くの新しい接続を開いたまま保持する可能性があることを認識しているか確認してください。パフォーマンスの問題を回避するために、それに応じて DNS 階層を設定します。
手順
- defaultという名前の DNS Operator オブジェクトを変更します。- oc edit dns.operator/default - $ oc edit dns.operator/default- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - クラスター管理者は、転送された DNS クエリーに Transport Layer Security (TLS) を設定できるようになりました。 - TLS を使用した DNS 転送の設定 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- rfc6335サービス名の構文に準拠する必要があります。
- 2
- rfc1123サービス名構文のサブドメインの定義に準拠する必要があります。クラスタードメインの- cluster.localは、- zonesフィールドの無効なサブドメインです。クラスタードメインの- cluster.localは、- zonesの無効な- subdomainです。
- 3
- 転送された DNS クエリーの TLS を設定する場合、transportフィールドの値をTLSに設定します。
- 4
- 転送された DNS クエリー用に TLS を設定する場合、これは、アップストリーム TLS サーバー証明書を検証するための Server Name Indication (SNI) の一部として使用される必須のサーバー名です。
- 5
- アップストリームリゾルバーを選択するためのポリシーを定義します。デフォルト値はRandomです。RoundRobinおよびSequentialの値を使用することもできます。
- 6
- 必須。アップストリームリゾルバーを指定するために使用します。forwardPluginエントリーごとに最大 15 のupstreamsエントリーが許可されます。
- 7
- 任意。これを使用して、デフォルトポリシーを上書きし、デフォルトドメインで指定された DNS リゾルバー (アップストリームリゾルバー) に DNS 解決を転送できます。アップストリームリゾルバーを指定しない場合に、DNS 名のクエリーは/etc/resolv.confのサーバーに送信されます。
- 8
- TLS を使用する場合、Networkタイプのみが許可され、IP アドレスを指定する必要があります。Networkタイプは、このアップストリームリゾルバーが/etc/resolv.confにリストされているアップストリームリゾルバーとは別に転送されたリクエストを処理する必要があることを示します。
- 9
- addressフィールドは、有効な IPv4 または IPv6 アドレスである必要があります。
- 10
- オプションでポートを指定できます。portの値は1〜65535である必要があります。アップストリームのポートを指定しない場合、デフォルトのポートは 853 です。
 注記- serversが定義されていないか無効な場合、config map にはデフォルトサーバーのみが含まれます。
検証
- config map を表示します。 - oc get configmap/dns-default -n openshift-dns -o yaml - $ oc get configmap/dns-default -n openshift-dns -o yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - TLS 転送の例に基づく DNS ConfigMap のサンプル - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- forwardPluginへの変更により、CoreDNS デーモンセットのローリング更新がトリガーされます。