7.10. 高度なタスク
7.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 注記managementStateがUnmanagedに設定されている間はアップグレードできません。
7.10.2. DNS Pod 配置の制御 リンクのコピーリンクがクリップボードにコピーされました!
DNS Operator には 2 つのデーモンセットがあります。1 つは CoreDNS 用の dns-default という名前のデーモンセットで、もう 1 つは /etc/hosts ファイルの管理用の node-resolver という名前のデーモンセットです。
指定したノードに CoreDNS Pod を割り当て、そのノード上で実行できます。たとえば、クラスター管理者がノードペア間の通信を禁止するセキュリティーポリシーを設定している場合は、制限されたノードセットで実行するように CoreDNS Pod を設定できます。
次の状況が当てはまる場合、すべての Pod で DNS サービスを使用できます。
- クラスター内の一部のノードで DNS Pod が実行されている。
- DNS Pod が実行されていないノードに、DNS Pod が実行されているノードとのネットワーク接続がある。
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 を設定します。
次のコマンドを入力して、DNS Pod の配置を制御するノードに taint を設定します。
oc adm taint nodes <node_name> dns-only=abc:NoExecute
$ oc adm taint nodes <node_name> dns-only=abc:NoExecute1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<node_name>は、ノードの実際の名前に置き換えます。
次のコマンドを入力して、
defaultという名前の DNS Operator オブジェクトを、対応する toleration が含まれるように変更します。oc edit dns.operator/default
$ oc edit dns.operator/defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow taint の taint キーと toleration を指定します。次の toleration は、ノードに設定された taint と一致します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: ノードセレクターを使用してノードの配置を指定するには、デフォルトの DNS Operator を変更します。
defaultという名前の DNS Operator オブジェクトを編集して、ノードセレクターを含めます。spec: nodePlacement: nodeSelector: node-role.kubernetes.io/control-plane: ""spec: nodePlacement: nodeSelector:1 node-role.kubernetes.io/control-plane: ""Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- このノードセレクターにより、CoreDNS Pod がコントロールプレーンノードでのみ実行されるようになります。
7.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/defaultCopy 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 yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow TLS 転送の例に基づく DNS ConfigMap のサンプル
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
forwardPluginへの変更により、CoreDNS デーモンセットのローリング更新がトリガーされます。