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 のデーモンセットを特定のノードで実行するか、実行しないように設定できます。
前提条件
-
oc
CLI がインストールされている。 -
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:NoExecute
1 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/default
Copy 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/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 デーモンセットのローリング更新がトリガーされます。