ネットワーク設定
OpenShift Container Platform における一般的なネットワーク設定プロセス
概要
第1章 チューニングプラグインを使用してシステムコントロールとインターフェイス属性を設定する リンクのコピーリンクがクリップボードにコピーされました!
Linux では、管理者は sysctl を使用してランタイム時にカーネルパラメーターを変更できます。チューニング Container Network Interface (CNI) メタプラグインを使用して、インターフェイスレベルのネットワーク sysctl を変更できます。チューニング CNI メタプラグインは、図に示すように、メインの CNI プラグインとチェーンで動作します。
メインの CNI プラグインはインターフェイスを割り当て、それをランタイム時にチューニング CNI メタプラグインに渡します。チューニング CNI メタプラグインを使用して、ネットワーク namespace の一部の sysctl といくつかのインターフェイス属性 (プロミスキャスモード、オールマルチキャストモード、MTU、および MAC アドレス) を変更できます。
1.1. チューニング CNI を使用してシステム制御を設定する リンクのコピーリンクがクリップボードにコピーされました!
次の手順では、チューニング CNI を設定し、インターフェイスレベルのネットワーク net.ipv4.conf.IFNAME.accept_redirects
sysctl を変更します。この例では、ICMP リダイレクトパケットの受け入れと送信を有効にします。チューニング CNI メタプラグイン設定では、インターフェイス名は IFNAME
トークンで表され、ランタイム時にインターフェイスの実際の名前に置き換えられます。
手順
次の内容を含む、
tuning-example.yaml
などのネットワークアタッチメント定義を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 作成する追加のネットワーク割り当ての名前を指定します。名前は指定された namespace 内で一意である必要があります。
- 2
- オブジェクトが関連付けられている namespace を指定します。
- 3
- CNI 仕様のバージョンを指定します。
- 4
- 設定の名前を指定します。設定名をネットワークアタッチメント定義の名前の値と一致させることを推奨します。
- 5
- 設定するメイン CNI プラグインの名前を指定します。
- 6
- CNI メタプラグインの名前を指定します。
- 7
- 設定する sysctl を指定します。インターフェイス名は
IFNAME
トークンで表され、ランタイム時にインターフェイスの実際の名前に置き換えられます。
YAML ファイルの例を次に示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して YAML を適用します。
oc apply -f tuning-example.yaml
$ oc apply -f tuning-example.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
networkattachmentdefinition.k8.cni.cncf.io/tuningnad created
networkattachmentdefinition.k8.cni.cncf.io/tuningnad created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のようなネットワークアタッチメント定義を使用して、
examplepod.yaml
などの Pod を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 設定済みの
NetworkAttachmentDefinition
の名前を指定します。 - 2
runAsUser
は、コンテナーが実行されるユーザー ID を制御します。- 3
runAsGroup
は、コンテナーが実行されるプライマリーグループ ID を制御します。- 4
allowPrivilegeEscalation
は、Pod が権限の昇格を許可するように要求できるかどうかを決定します。指定しない場合、デフォルトで true に設定されます。このブール値は、no_new_privs
フラグがコンテナープロセスに設定されるかどうかを直接制御します。- 5
capabilities
は、完全なルートアクセスを許可せずに権限操作を許可します。このポリシーにより、すべての機能が Pod から削除されます。- 6
runAsNonRoot: true
は、コンテナーが 0 以外の任意の UID を持つユーザーで実行されることを要求します。- 7
RuntimeDefault
は、Pod またはコンテナーワークロードのデフォルトの seccomp プロファイルを有効にします。
以下のコマンドを実行して yaml を適用します。
oc apply -f examplepod.yaml
$ oc apply -f examplepod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Pod が作成されていることを確認します。
oc get pod
$ oc get pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE tunepod 1/1 Running 0 47s
NAME READY STATUS RESTARTS AGE tunepod 1/1 Running 0 47s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Pod にログインします。
oc rsh tunepod
$ oc rsh tunepod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 設定された sysctl フラグの値を確認します。たとえば、次のコマンドを実行して、値
net.ipv4.conf.net1.accept_redirects
を見つけます。sysctl net.ipv4.conf.net1.accept_redirects
sh-4.4# sysctl net.ipv4.conf.net1.accept_redirects
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 予想される出力
net.ipv4.conf.net1.accept_redirects = 1
net.ipv4.conf.net1.accept_redirects = 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.2. チューニング CNI を使用してオールマルチキャストモードを有効にする リンクのコピーリンクがクリップボードにコピーされました!
チューニング Container Network Interface (CNI) メタプラグインを使用して、オールマルチキャストモードを有効にできます。
次の手順では、チューニング CNI を設定してオールマルチキャストモードを有効にする方法を説明します。
手順
次の内容を含む、
tuning-example.yaml
などのネットワークアタッチメント定義を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 作成する追加のネットワーク割り当ての名前を指定します。名前は指定された namespace 内で一意である必要があります。
- 2
- オブジェクトが関連付けられている namespace を指定します。
- 3
- CNI 仕様のバージョンを指定します。
- 4
- 設定の名前を指定します。設定の名前は、ネットワークアタッチメント定義の名前の値と一致させてください。
- 5
- 設定するメイン CNI プラグインの名前を指定します。
- 6
- CNI メタプラグインの名前を指定します。
- 7
- インターフェイスのオールマルチキャストモードを変更します。有効にすると、ネットワーク上のすべてのマルチキャストパケットがそのインターフェイスで受信されます。
YAML ファイルの例を次に示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、YAML ファイルで指定された設定を適用します。
oc apply -f tuning-allmulti.yaml
$ oc apply -f tuning-allmulti.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
networkattachmentdefinition.k8s.cni.cncf.io/setallmulti created
networkattachmentdefinition.k8s.cni.cncf.io/setallmulti created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の
examplepod.yaml
サンプルファイルで指定されているものと同様のネットワークアタッチメント定義を使用して Pod を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 設定された
NetworkAttachmentDefinition
の名前を指定します。 - 2
- コンテナーの実行に使用するユーザー ID を指定します。
- 3
- コンテナーの実行に使用するプライマリーグループ ID を指定します。
- 4
- Pod が権限昇格を要求できるか指定します。指定しない場合、デフォルトで
true
に設定されます。このブール値は、no_new_privs
フラグがコンテナープロセスに設定されるかどうかを直接制御します。 - 5
- コンテナーのケイパビリティーを指定します。
drop: ["ALL"]
ステートメントは、すべての Linux ケイパビリティーが Pod からドロップされ、より制限的なセキュリティープロファイルが提供されていることを示します。 - 6
- UID が 0 以外のユーザーでコンテナーが実行されるように指定します。
- 7
- コンテナーの seccomp プロファイルを指定します。この場合、タイプは
RuntimeDefault
に設定されます。Seccomp は、プロセスで使用できるシステムコールを制限し、攻撃対象領域を最小化してセキュリティーを強化する Linux カーネル機能です。
次のコマンドを実行して、YAML ファイルで指定された設定を適用します。
oc apply -f examplepod.yaml
$ oc apply -f examplepod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Pod が作成されていることを確認します。
oc get pod
$ oc get pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE allmultipod 1/1 Running 0 23s
NAME READY STATUS RESTARTS AGE allmultipod 1/1 Running 0 23s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Pod にログインします。
oc rsh allmultipod
$ oc rsh allmultipod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Pod に関連付けられているすべてのインターフェイスをリスト表示します。
ip link
sh-4.4# ip link
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第2章 ノードポートサービス範囲の設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスターのインストール中に、クラスターの要件を満たすようにノードのポート範囲を設定できます。クラスターのインストール後は、クラスター管理者のみがインストール後のタスクとして範囲を拡張できます。クラスターが多数のノードポートを使用する場合は、クラスターの要件に応じて使用可能なポート範囲を増やすことを検討してください。
ノードのポート範囲を拡張する前に、Red Hat はデフォルトのポート範囲 30000-32768
外ではテストを実行していないことに注意してください。デフォルトのポート範囲外の範囲については、拡張されたノードポート範囲がクラスターに影響を与えないことを確認するためにテストを行ってください。範囲を拡張したところポート割り当ての問題が発生した場合は、新しいクラスターを作成し、必要な範囲を設定します。
クラスターのインストール中にノードのポート範囲を設定しない場合は、デフォルトの範囲 30000-32768
がクラスターに適用されます。この場合、どちらの側でも範囲を拡張できますが、新しいポート範囲内で 30000-32768
を維持する必要があります。
ノードのポート範囲を拡張し、OpenShift API サーバーとのポート競合のために OpenShift CLI (oc
) が動作しなくなった場合は、新しいクラスターを作成する必要があります。新しいノードのポート範囲が、ホストネットワークで設定されているホストプロセスまたは Pod によってすでに使用されているポートと重複していないことを確認してください。
2.1. ノードのポート範囲の拡張 リンクのコピーリンクがクリップボードにコピーされました!
クラスターのノードポート範囲を拡張できます。ただし、OpenShift Container Platform クラスターをインストールした後は、どちらの側でもノードのポート範囲を縮小することはできません。
ノードのポート範囲を拡張する前に、Red Hat はデフォルトのポート範囲 30000-32768
外ではテストを実行していないことに注意してください。デフォルトのポート範囲外の範囲については、拡張されたノードポート範囲がクラスターに影響を与えないことを確認するためにテストを行ってください。範囲を拡張したところポート割り当ての問題が発生した場合は、新しいクラスターを作成し、必要な範囲を設定します。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。 -
クラスターインフラストラクチャーが拡張範囲内にあるポートへのアクセスを許可していることを確認している。たとえば、ノードのポート範囲を
30000-32900
に拡張する場合、ファイアウォールまたはパケットフィルタリングの設定で、30000-32900
のポート範囲 (両端の値を含む) を許可する必要があります。
手順
コマンドラインインターフェイス (CLI) で次のコマンドを入力して、クラスターが Pod のトラフィックを管理するために使用する
network.config.openshift.io
オブジェクト内のserviceNodePortRange
パラメーターの範囲を拡張します。oc patch network.config.openshift.io cluster --type=merge -p \ '{
$ oc patch network.config.openshift.io cluster --type=merge -p \ '{ "spec": { "serviceNodePortRange": "<port_range>" }
1 }'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ここで、
<port_range>
は30000-32900
などの拡張範囲です。
ヒント次の YAML を適用してノードのポート範囲を更新することもできます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
network.config.openshift.io/cluster patched
network.config.openshift.io/cluster patched
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
設定が成功したことを確認するには、次のコマンドを入力します。更新の適用には数分かかる場合があります。
oc get configmaps -n openshift-kube-apiserver config \ -o jsonpath="{.data['config\.yaml']}" | \ grep -Eo '"service-node-port-range":["[[:digit:]]+-[[:digit:]]+"]'
$ oc get configmaps -n openshift-kube-apiserver config \ -o jsonpath="{.data['config\.yaml']}" | \ grep -Eo '"service-node-port-range":["[[:digit:]]+-[[:digit:]]+"]'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
"service-node-port-range":["30000-32900"]
"service-node-port-range":["30000-32900"]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第3章 クラスターネットワーク範囲の設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、クラスターのインストール後にクラスターネットワークの範囲を拡張できます。追加ノード用にさらに多くの IP アドレスが必要な場合は、クラスターネットワーク範囲を拡張することを推奨します。
たとえば、クラスターをデプロイし、クラスターネットワーク範囲として 10.128.0.0/19
を指定し、ホスト接頭辞 23
を指定した場合、16 ノードに制限されます。クラスターの CIDR マスクを /14
に変更することで、これを 510 ノードに拡張できます。
クラスターネットワークアドレス範囲を拡張する場合、クラスターは OVN-Kubernetes ネットワークプラグイン を使用する必要があります。他のネットワークプラグインはサポートされていません。
クラスターネットワークの IP アドレス範囲を変更する場合、次の制限が適用されます。
- 指定する CIDR マスクサイズは、現在設定されている CIDR マスクサイズより常に小さくする必要があります。これは、インストールされたクラスターにノードを追加することによってのみ IP スペースを増やすことができるためです。
- ホスト接頭辞は変更できません
- オーバーライドされたデフォルトゲートウェイで設定された Pod は、クラスターネットワークの拡張後に再作成する必要があります。
3.1. クラスターネットワークの IP アドレス範囲の拡張 リンクのコピーリンクがクリップボードにコピーされました!
クラスターネットワークの IP アドレス範囲を拡張できます。この変更には新しい Operator 設定をクラスター全体にロールアウトする必要があるため、有効になるまでに最大 30 分かかる場合があります。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインする。 - クラスターが OVN-Kubernetes ネットワークプラグインを使用していることを確認します。
手順
クラスターのクラスターネットワーク範囲とホスト接頭辞を取得するには、次のコマンドを入力します。
oc get network.operator.openshift.io \ -o jsonpath="{.items[0].spec.clusterNetwork}"
$ oc get network.operator.openshift.io \ -o jsonpath="{.items[0].spec.clusterNetwork}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
[{"cidr":"10.217.0.0/22","hostPrefix":23}]
[{"cidr":"10.217.0.0/22","hostPrefix":23}]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスターネットワークの IP アドレス範囲を拡張するには、次のコマンドを入力します。前のコマンドの出力から返された CIDR IP アドレス範囲とホスト接頭辞を使用します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<network>
-
前の手順で取得した
cidr
フィールドのネットワーク部分を指定します。この値は変更できません。 <cidr>
-
ネットワーク接頭辞長を指定します。たとえば、
14
です。この値を前の手順の出力の値よりも小さい数値に変更して、クラスターネットワークの範囲を拡大します。 <prefix>
-
クラスターの現在のホスト接頭辞を指定します。この値は、前の手順で取得した
hostPrefix
フィールドの値と同じである必要があります。
コマンドの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
network.config.openshift.io/cluster patched
network.config.openshift.io/cluster patched
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 設定がアクティブであることを確認するには、以下のコマンドを入力します。この変更が有効になるまで、最大 30 分かかる場合があります。
oc get network.operator.openshift.io \ -o jsonpath="{.items[0].spec.clusterNetwork}"
$ oc get network.operator.openshift.io \ -o jsonpath="{.items[0].spec.clusterNetwork}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
[{"cidr":"10.217.0.0/14","hostPrefix":23}]
[{"cidr":"10.217.0.0/14","hostPrefix":23}]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第4章 IP フェイルオーバーの設定 リンクのコピーリンクがクリップボードにコピーされました!
このトピックでは、OpenShift Container Platform クラスターの Pod およびサービスの IP フェイルオーバーの設定を説明します。
IP フェイルオーバーは Keepalived を使用して、一連のホストで外部からアクセスできる仮想 IP (VIP) アドレスのセットをホストします。各仮想 IP アドレスは、一度に 1 つのホストによってのみサービスされます。Keepalived は Virtual Router Redundancy Protocol (VRRP) を使用して、(一連のホストの) どのホストがどの VIP を提供するかを判別します。ホストが利用不可の場合や Keepalived が監視しているサービスが応答しない場合は、VIP は一連のホストの別のホストに切り換えられます。したがって、VIP はホストが利用可能である限り常に提供されます。
セットのすべての VIP はセットから選択されるノードによって提供されます。単一のノードが使用可能な場合は、仮想 IP が提供されます。ノード上で VIP を明示的に配布する方法がないため、VIP のないノードがある可能性も、多数の VIP を持つノードがある可能性もあります。ノードが 1 つのみ存在する場合は、すべての VIP がそのノードに配置されます。
管理者は、すべての仮想 IP アドレスが次の要件を満たしていることを確認する必要があります。
- 設定されたホストでクラスター外からアクセスできる。
- クラスター内でこれ以外の目的で使用されていない。
各ノードの Keepalived は、必要とされるサービスが実行中であるかどうかを判別します。実行中の場合、VIP がサポートされ、Keepalived はネゴシエーションに参加してどのノードが VIP を提供するかを決定します。これに参加するノードについては、このサービスが VIP の監視ポートでリッスンしている、またはチェックが無効にされている必要があります。
セット内の各仮想 IP は、異なるノードによってサービスされる可能性があります。
IP フェイルオーバーは各 VIP のポートをモニターし、ポートがノードで到達可能かどうかを判別します。ポートが到達不能な場合、VIP はノードに割り当てられません。ポートが 0
に設定されている場合、このチェックは抑制されます。check スクリプトは必要なテストを実行します。
Keepalived を実行するノードが check スクリプトを渡す場合、ノードの VIP はプリエンプションストラテジーに応じて、その優先順位および現在のマスターの優先順位に基づいて master
状態になることができます。
クラスター管理者は OPENSHIFT_HA_NOTIFY_SCRIPT
変数を介してスクリプトを提供できます。このスクリプトは、ノードの VIP の状態が変更されるたびに呼び出されます。Keepalived は VIP を提供する場合は master
状態を、別のノードが VIP を提供する場合は backup
状態を、または check スクリプトが失敗する場合は fault
状態を使用します。notify スクリプトは、状態が変更されるたびに新規の状態で呼び出されます。
OpenShift Container Platform で IP フェイルオーバーのデプロイメント設定を作成できます。IP フェイルオーバーのデプロイメント設定は VIP アドレスのセットを指定し、それらの提供先となるノードのセットを指定します。クラスターには複数の IP フェイルオーバーのデプロイメント設定を持たせることができ、それぞれが固有な VIP アドレスの独自のセットを管理します。IP フェイルオーバー設定の各ノードは IP フェイルオーバー Pod として実行され、この Pod は Keepalived を実行します。
VIP を使用してホストネットワークを持つ Pod にアクセスする場合、アプリケーション Pod は IP フェイルオーバー Pod を実行しているすべてのノードで実行されます。これにより、いずれの IP フェイルオーバーノードもマスターになり、必要時に VIP を提供することができます。アプリケーション Pod が IP フェイルオーバーのすべてのノードで実行されていない場合、一部の IP フェイルオーバーノードが VIP を提供できないか、一部のアプリケーション Pod がトラフィックを受信できなくなります。この不一致を防ぐために、IP フェイルオーバーとアプリケーション Pod の両方に同じセレクターとレプリケーション数を使用します。
VIP を使用してサービスにアクセスしている間は、アプリケーション Pod が実行されている場所に関係なく、すべてのノードでサービスに到達できるため、任意のノードをノードの IP フェイルオーバーセットに含めることができます。いずれの IP フェイルオーバーノードも、いつでもマスターにすることができます。サービスは外部 IP およびサービスポートを使用するか、NodePort
を使用することができます。NodePort
のセットアップは権限付きの操作で実行されます。
サービス定義で外部 IP を使用する場合、VIP は外部 IP に設定され、IP フェイルオーバーのモニタリングポートはサービスポートに設定されます。ノードポートを使用する場合、ポートはクラスター内のすべてのノードで開かれ、サービスは、現在 VIP にサービスを提供しているあらゆるノードからのトラフィックの負荷を分散します。この場合、IP フェイルオーバーのモニタリングポートはサービス定義で NodePort
に設定されます。
サービス VIP の可用性が高い場合でも、パフォーマンスに影響が出る可能性があります。Keepalived は、各 VIP が設定内の一部のノードによってサービスされることを確認し、他のノードに VIP がない場合でも、複数の VIP が同じノードに配置される可能性があります。IP フェイルオーバーによって複数の VIP が同じノードに配置されると、VIP のセット全体で外部から負荷分散される戦略が妨げられる可能性があります。
ExternalIP
を使用する場合は、ExternalIP
範囲と同じ仮想 IP 範囲を持つように IP フェイルオーバーを設定できます。また、モニタリングポートを無効にすることもできます。この場合、すべての VIP がクラスター内の同じノードに表示されます。どのユーザーでも、ExternalIP
を使用してサービスをセットアップし、高可用性を実現できます。
クラスター内の VIP の最大数は 254 です。
4.1. IP フェイルオーバーの環境変数 リンクのコピーリンクがクリップボードにコピーされました!
以下の表は、IP フェイルオーバーの設定に使用される変数を示しています。
変数名 | デフォルト | 説明 |
---|---|---|
|
|
IP フェイルオーバー Pod は、各仮想 IP (VIP) のこのポートに対して TCP 接続を開こうとします。接続が設定されると、サービスは実行中であると見なされます。このポートが |
|
IP フェイルオーバーが Virtual Router Redundancy Protocol (VRRP) トラフィックの送信に使用するインターフェイス名。デフォルト値は
クラスターが OVN-Kubernetes ネットワークプラグインを使用する場合は、パケットロスを回避するためにこの値を | |
|
|
作成するレプリカの数。これは、IP フェイルオーバーデプロイメント設定の |
|
レプリケートする IP アドレス範囲のリスト。これは指定する必要があります。例: | |
|
|
仮想ルーター ID の設定に使用されるオフセット値。異なるオフセット値を使用すると、複数の IP フェイルオーバー設定が同じクラスター内に存在できるようになります。デフォルトのオフセットは |
|
VRRP に作成するグループの数。これが設定されていない場合、グループは | |
| INPUT |
iptables チェーンの名前であり、 |
| アプリケーションが動作していることを確認するために定期的に実行されるスクリプトの Pod ファイルシステム内の完全パス名。 | |
|
| check スクリプトが実行される期間 (秒単位)。 |
| 状態が変更されるたびに実行されるスクリプトの Pod ファイルシステム内の完全パス名。 | |
|
|
新たな優先度の高いホストを処理するためのストラテジー。 |
4.2. クラスター内の IP フェイルオーバーの設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、クラスター全体に IP フェイルオーバーを設定することも、ラベルセレクターの定義に基づいてノードのサブセットに IP フェイルオーバーを設定することもできます。クラスター内に IP フェイルオーバーのデプロイメントを複数設定して、それぞれを相互に切り離すこともできます。
IP フェイルオーバーのデプロイメントにより、使用される制約またはラベルに一致する各ノードでフェイルオーバー Pod が実行されるようになります。
この Pod は Keepalived を実行します。これは、最初のノードがサービスまたはエンドポイントに到達できない場合に、エンドポイントを監視し、Virtual Router Redundancy Protocol (VRRP) を使用して仮想 IP (VIP) を別のノードにフェイルオーバーできます。
実稼働環境で使用する場合は、少なくとも 2 つのノードを選択し、選択したノードの数に相当する replicas
を設定する selector
を設定します。
前提条件
-
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。 - プルシークレットを作成している。
Red Hat OpenStack Platform (RHOSP) のみ:
- ターゲット環境に RHOSP クライアント (RHCOS ドキュメント) をインストールした。
-
RHOSP
openrc.sh
rc ファイル (RHCOS ドキュメント) をダウンロードした。
手順
IP フェイルオーバーのサービスアカウントを作成します。
oc create sa ipfailover
$ oc create sa ipfailover
Copy to Clipboard Copied! Toggle word wrap Toggle overflow hostNetwork
の SCC (Security Context Constraints) を更新します。oc adm policy add-scc-to-user privileged -z ipfailover
$ oc adm policy add-scc-to-user privileged -z ipfailover
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm policy add-scc-to-user hostnetwork -z ipfailover
$ oc adm policy add-scc-to-user hostnetwork -z ipfailover
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat OpenStack Platform (RHOSP) のみ: フェイルオーバー仮想 IP アドレスが RHOSP ポートに到達できるように、次の手順を実行します。
RHOSP CLI を使用して、RHOSP クラスターの
allowed_address_pairs
パラメーターのデフォルトの RHOSP API および仮想 IP アドレスを表示します。openstack port show <cluster_name> -c allowed_address_pairs
$ openstack port show <cluster_name> -c allowed_address_pairs
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
*Field* *Value* allowed_address_pairs ip_address='192.168.0.5', mac_address='fa:16:3e:31:f9:cb' ip_address='192.168.0.7', mac_address='fa:16:3e:31:f9:cb'
*Field* *Value* allowed_address_pairs ip_address='192.168.0.5', mac_address='fa:16:3e:31:f9:cb' ip_address='192.168.0.7', mac_address='fa:16:3e:31:f9:cb'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow RHOSP CLI で次のコマンドを入力して、IP フェイルオーバーのデプロイメントに別の仮想 IP アドレスを設定し、RHOSP のポートでそのアドレスに到達できるようにします。デフォルトの RHOSP API および仮想 IP アドレスを、IP フェイルオーバーのデプロイメントのフェイルオーバー仮想 IP アドレスとして設定しないでください。
1.1.1.1
フェイルオーバー IP アドレスを RHOSP ポートの許可されたアドレスとして追加する例openstack port set <cluster_name> --allowed-address ip-address=1.1.1.1,mac-address=fa:fa:16:3e:31:f9:cb
$ openstack port set <cluster_name> --allowed-address ip-address=1.1.1.1,mac-address=fa:fa:16:3e:31:f9:cb
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - デプロイメントの IP フェイルオーバーを設定するためのデプロイメント YAML ファイルを作成します。後の手順の「IP フェイルオーバー設定のデプロイメント YAML の例」を参照してください。
IP フェイルオーバーのデプロイメントで次の仕様を指定して、フェイルオーバー仮想 IP アドレスを
OPENSHIFT_HA_VIRTUAL_IPS
環境変数に渡します。OPENSHIFT_HA_VIRTUAL_IPS
に1.1.1.1
仮想 IP アドレスを追加する例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
IP フェイルオーバーを設定するためのデプロイメント YAML ファイルを作成します。
注記Red Hat OpenStack Platform (RHOSP) の場合、デプロイメント YAML ファイルを再作成する必要はありません。このファイルは、以前の手順ですでに作成されています。
IP フェイルオーバー設定のデプロイメント YAML の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- IP フェイルオーバーデプロイメントの名前。
- 2
- レプリケートする IP アドレス範囲のリスト。これは指定する必要があります。例:
1.2.3.4-6,1.2.3.9
- 3
- VRRP に作成するグループの数。これが設定されていない場合、グループは
OPENSHIFT_HA_VIP_GROUPS
変数で指定されている仮想 IP 範囲ごとに作成されます。 - 4
- IP フェイルオーバーが VRRP トラフィックの送信に使用するインターフェイス名。デフォルトで
eth0
が使用されます。 - 5
- IP フェイルオーバー Pod は、各 VIP のこのポートに対して TCP 接続を開こうとします。接続が設定されると、サービスは実行中であると見なされます。このポートが
0
に設定される場合、テストは常にパスします。デフォルト値は80
です。 - 6
- 仮想ルーター ID の設定に使用されるオフセット値。異なるオフセット値を使用すると、複数の IP フェイルオーバー設定が同じクラスター内に存在できるようになります。デフォルトのオフセットは
0
で、許可される範囲は0
から255
までです。 - 7
- 作成するレプリカの数です。これは、IP フェイルオーバーデプロイメント設定の
spec.replicas
値に一致する必要があります。デフォルト値は2
です。 - 8
iptables
チェーンの名前であり、iptables
ルールを自動的に追加し、VRRP トラフィックをオンにすることを許可するために使用されます。この値が設定されていない場合、iptables
ルールは追加されません。チェーンが存在しない場合は作成されず、Keepalived はユニキャストモードで動作します。デフォルトはINPUT
です。- 9
- 状態が変更されるたびに実行されるスクリプトの Pod ファイルシステム内の完全パス名。
- 10
- アプリケーションが動作していることを確認するために定期的に実行されるスクリプトの Pod ファイルシステム内の完全パス名。
- 11
- 新たな優先度の高いホストを処理するためのストラテジー。デフォルト値は
preempt_delay 300
で、優先順位の低いマスターが VIP を保持する場合に、Keepalived インスタンスが VIP を 5 分後に引き継ぎます。 - 12
- check スクリプトが実行される期間 (秒単位)。デフォルト値は
2
です。 - 13
- デプロイメントを作成する前にプルシークレットを作成します。作成しない場合には、デプロイメントの作成時にエラーが発生します。
4.3. check スクリプトおよび notify スクリプトの設定 リンクのコピーリンクがクリップボードにコピーされました!
Keepalived は、オプションのユーザー指定のチェックスクリプトを定期的に実行してアプリケーションの正常性をモニターします。たとえば、このスクリプトは要求を発行し、応答を検証することで web サーバーをテストします。クラスター管理者は、オプションの notify スクリプトを提供できます。このスクリプトは状態が変更されるたびに呼び出されます。
check および notify スクリプトは、IP フェイルオーバー Pod で実行され、ホストファイルシステムではなく Pod ファイルシステムを使用します。ただし、IP フェイルオーバー Pod はホストファイルシステムが /hosts
マウントパスで利用可能にします。check または notify スクリプトを設定する場合は、スクリプトへの完全パスを指定する必要があります。スクリプトを提供する方法として、ConfigMap
オブジェクトの使用が推奨されます。
check および notify スクリプトの完全パス名は、Keepalived 設定ファイル (_/etc/keepalived/keepalived.conf
) に追加されます。このファイルは、Keepalived が起動するたびにロードされます。次の方法で説明するように、ConfigMap
オブジェクトを使用してスクリプトを Pod に追加できます。
Check script
チェックスクリプトが指定されない場合、TCP 接続をテストする単純なデフォルトスクリプトが実行されます。このデフォルトテストは、モニターポートが 0
の場合は抑制されます。
各 IP フェイルオーバー Pod は、Pod が実行されているノードで 1 つ以上の仮想 IP (VIP) アドレスを管理する Keepalived デーモンを管理します。Keepalived デーモンは、ノードの各 VIP の状態を維持します。特定のノード上の特定の VIP は、master
、backup
、または fault
状態にある可能性があります。
チェックスクリプトがゼロ以外を返す場合、ノードは backup
状態になり、保持されている仮想 IP は再割り当てされます。
Notify script
Keepalived は、次の 3 つのパラメーターを通知スクリプトに渡します。
-
$1
-group
またはinstance
-
$2
:group
またはinstance
の名前です。 -
$3
: 新規の状態:master
、backup
、またはfault
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。
手順
必要なスクリプトを作成し、それを保持する
ConfigMap
オブジェクトを作成します。スクリプトには入力引数は指定されず、OK
の場合は0
を、fail
の場合は1
を返す必要があります。チェックスクリプト
mycheckscript.sh
:#!/bin/bash # Whatever tests are needed # E.g., send request and verify response exit 0
#!/bin/bash # Whatever tests are needed # E.g., send request and verify response exit 0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ConfigMap
オブジェクトを作成します。oc create configmap mycustomcheck --from-file=mycheckscript.sh
$ oc create configmap mycustomcheck --from-file=mycheckscript.sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow スクリプトを Pod に追加します。マウントされた
ConfigMap
オブジェクトファイルのdefaultMode
は、oc
コマンドを使用するか、デプロイメント設定を編集することで実行できる必要があります。通常は、0755
、493
(10 進数) の値が使用されます。oc set env deploy/ipfailover-keepalived \ OPENSHIFT_HA_CHECK_SCRIPT=/etc/keepalive/mycheckscript.sh
$ oc set env deploy/ipfailover-keepalived \ OPENSHIFT_HA_CHECK_SCRIPT=/etc/keepalive/mycheckscript.sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc set volume deploy/ipfailover-keepalived --add --overwrite \ --name=config-volume \ --mount-path=/etc/keepalive \ --source='{"configMap": { "name": "mycustomcheck", "defaultMode": 493}}'
$ oc set volume deploy/ipfailover-keepalived --add --overwrite \ --name=config-volume \ --mount-path=/etc/keepalive \ --source='{"configMap": { "name": "mycustomcheck", "defaultMode": 493}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記oc set env
コマンドは空白を区別します。=
記号の両側に空白を入れることはできません。ヒントまたは、
ipfailover-keepalived
デプロイメント設定を編集することもできます。oc edit deploy ipfailover-keepalived
$ oc edit deploy ipfailover-keepalived
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 変更を保存し、エディターを終了します。これにより
ipfailover-keepalived
が再起動されます。
4.4. VRRP プリエンプションの設定 リンクのコピーリンクがクリップボードにコピーされました!
ノード上の仮想 IP (仮想 IP) がチェックスクリプトに合格して fault
状態から抜けたときに、そのノード上の仮想 IP の優先度が、現在 master
状態にあるノード上の仮想 IP よりも低い場合、そのノード上の仮想 IP は backup
状態になります。nopreempt
ストラテジーは master
をホスト上の優先度の低いホストからホスト上の優先度の高い VIP に移動しません。デフォルトの preempt_delay 300
の場合、Keepalived は指定された 300 秒の間待機し、master
をホスト上の優先度の高い VIP に移動します。
手順
プリエンプションを指定するには、
oc edit deploy ipfailover-keepalived
を入力し、ルーターのデプロイメント設定を編集します。oc edit deploy ipfailover-keepalived
$ oc edit deploy ipfailover-keepalived
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
OPENSHIFT_HA_PREEMPTION
の値を設定します。-
preempt_delay 300
: Keepalived は、指定された 300 秒の間待機し、master
をホスト上の優先度の高い VIP に移動します。これはデフォルト値です。 -
nopreempt
:master
をホスト上の優先度の低い VIP からホスト上の優先度の高い VIP に移動しません。
-
4.5. 複数の IP フェイルオーバーインスタンスのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
IP フェイルオーバーのデプロイメント設定で管理される各 IP フェイルオーバー Pod (ノード/レプリカあたり 1
Pod) は Keepalived デーモンを実行します。設定される IP フェイルオーバーのデプロイメント設定が多くなると、作成される Pod も多くなり、共通の Virtual Router Redundancy Protocol (VRRP) ネゴシエーションに参加するデーモンも多くなります。このネゴシエーションはすべての Keepalived デーモンによって実行され、これはどのノードがどの仮想 IP (VIP) を提供するかを決定します。
Keepalived は内部で固有の vrrp-id
を各 VIP に割り当てます。ネゴシエーションはこの vrrp-ids
セットを使用し、決定後には優先される vrrp-id
に対応する VIP が優先されるノードで提供されます。
したがって、IP フェイルオーバーのデプロイメント設定で定義されるすべての VIP について、IP フェイルオーバー Pod は対応する vrrp-id
を割り当てる必要があります。これは、OPENSHIFT_HA_VRRP_ID_OFFSET
から開始し、順序に従って vrrp-ids
を VIP のリストに割り当てることによって実行されます。vrrp-ids
には範囲 1..255
の値を設定できます。
複数の IP フェイルオーバーのデプロイメント設定がある場合は、OPENSHIFT_HA_VRRP_ID_OFFSET
を指定して、デプロイメント設定内の VIP 数を増やす余地があり、vrrp-id
範囲が重複しないようにする必要があります。
4.6. 254 を超えるアドレスに関する IP フェイルオーバーの設定 リンクのコピーリンクがクリップボードにコピーされました!
IP フェイルオーバー管理は、仮想 IP (VIP) アドレスの 254 グループに制限されています。デフォルトでは、OpenShift Container Platform は各グループに 1 つの IP アドレスを割り当てます。OPENSHIFT_HA_VIP_GROUPS
変数を使用してこれを変更し、複数の IP アドレスが各グループに含まれるようにして、IP フェイルオーバーを設定するときに各 Virtual Router Redundancy Protocol (VRRP) インスタンスで使用可能な VIP グループの数を定義できます。
VIP の作成により、VRRP フェイルオーバーの発生時の広範囲の VRRP の割り当てが作成され、これはクラスター内のすべてのホストがローカルにサービスにアクセスする場合に役立ちます。たとえば、サービスが ExternalIP
で公開されている場合などがこれに含まれます。
フェイルオーバーのルールとして、ルーターなどのサービスは特定の 1 つのホストに制限しません。代わりに、サービスは、IP フェイルオーバーの発生時にサービスが新規ホストに再作成されないように各ホストに複製可能な状態にする必要があります。
OpenShift Container Platform のヘルスチェックを使用している場合、IP フェイルオーバーおよびグループの性質上、グループ内のすべてのインスタンスはチェックされません。そのため、Kubernetes ヘルスチェック を使用してサービスが有効であることを確認する必要があります。
前提条件
-
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。
手順
各グループに割り当てられた IP アドレスの数を変更するには、
OPENSHIFT_HA_VIP_GROUPS
変数の値を変更します。次に例を示します。IP フェイルオーバー設定の
Deployment
YAML の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- たとえば、7 つの VIP のある環境で
OPENSHIFT_HA_VIP_GROUPS
が3
に設定されている場合、これは 3 つのグループを作成し、3 つの VIP を最初のグループに、2 つの VIP を 2 つの残りのグループにそれぞれ割り当てます。
OPENSHIFT_HA_VIP_GROUPS
で設定されたグループの数が、フェイルオーバーに設定された IP アドレスの数より少ない場合、グループには複数の IP アドレスが含まれ、すべてのアドレスが 1 つのユニットとして移動します。
4.7. ExternalIP の高可用性 リンクのコピーリンクがクリップボードにコピーされました!
非クラウドクラスターでは、IP フェイルオーバーとサービスへの ExternalIP
を組み合わせることができます。結果として、ExternalIP
を使用してサービスを作成するユーザーに高可用サービスが提供されます。
このアプローチでは、クラスターネットワーク設定の spec.ExternalIP.autoAssignCIDRs
範囲を指定し、同じ範囲を使用して IP フェイルオーバー設定を作成します。
IP フェイルオーバーはクラスター全体で最大 255 個の仮想 IP をサポートできるため、spec.ExternalIP.autoAssignCIDRs
は /24
以下にする必要があります。
4.8. IP フェイルオーバーの削除 リンクのコピーリンクがクリップボードにコピーされました!
IP フェイルオーバーが最初に設定されている場合、クラスターのワーカーノードは、Keepalived 用に 224.0.0.18
のマルチキャストパケットを明示的に許可する iptables
ルールを使用して変更されます。ノードが変更されるため、IP フェイルオーバーを削除するには、ジョブを実行して iptables
ルールを削除し、Keepalived が使用する仮想 IP アドレスを削除する必要があります。
手順
オプション: config map として保存されるチェックおよび通知スクリプトを特定し、削除します。
IP フェイルオーバーの Pod が config map をボリュームとして使用するかどうかを決定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Namespace: default Pod: keepalived-worker-59df45db9c-2x9mn Volumes that use config maps: volume: config-volume configMap: mycustomcheck
Namespace: default Pod: keepalived-worker-59df45db9c-2x9mn Volumes that use config maps: volume: config-volume configMap: mycustomcheck
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 前述の手順でボリュームとして使用される config map の名前が提供されている場合は、config map を削除します。
oc delete configmap <configmap_name>
$ oc delete configmap <configmap_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
IP フェイルオーバーの既存デプロイメントを特定します。
oc get deployment -l ipfailover
$ oc get deployment -l ipfailover
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE default ipfailover 2/2 2 2 105d
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE default ipfailover 2/2 2 2 105d
Copy to Clipboard Copied! Toggle word wrap Toggle overflow デプロイメントを削除します。
oc delete deployment <ipfailover_deployment_name>
$ oc delete deployment <ipfailover_deployment_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipfailover
サービスアカウントを削除します。oc delete sa ipfailover
$ oc delete sa ipfailover
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IP フェイルオーバーの設定時に追加された IP テーブルルールを削除するジョブを実行します。
以下の例のような内容で
remove-ipfailover-job.yaml
などのファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ジョブを実行します。
oc create -f remove-ipfailover-job.yaml
$ oc create -f remove-ipfailover-job.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
job.batch/remove-ipfailover-2h8dm created
job.batch/remove-ipfailover-2h8dm created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
ジョブが IP フェイルオーバーの初期設定を削除していることを確認します。
oc logs job/remove-ipfailover-2h8dm
$ oc logs job/remove-ipfailover-2h8dm
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
remove-failover.sh: OpenShift IP Failover service terminating. - Removing ip_vs module ... - Cleaning up ... - Releasing VIPs (interface eth0) ...
remove-failover.sh: OpenShift IP Failover service terminating. - Removing ip_vs module ... - Cleaning up ... - Releasing VIPs (interface eth0) ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第5章 クラスター全体のプロキシーの設定 リンクのコピーリンクがクリップボードにコピーされました!
実稼働環境では、インターネットへの直接アクセスを拒否し、代わりに HTTP または HTTPS プロキシーを使用することができます。既存クラスターのプロキシーオブジェクトを変更 するか、または新規クラスターの install-config.yaml
ファイルでプロキシー設定を行うことにより、OpenShift Container Platform をプロキシーを使用するように設定できます。
サポート対象プラットフォーム上のクラスターに対してクラスター全体の Egress プロキシーを有効にすると、Red Hat Enterprise Linux CoreOS (RHCOS) は status.noProxy
パラメーターに、サポート対象プラットフォーム上に存在する install-config.yaml
ファイルの networking.machineNetwork[].cidr
、networking.clusterNetwork[].cidr
、networking.serviceNetwork[]
フィールドの値を入力します。
インストール後のタスクとして、networking.clusterNetwork[].cidr
の値を変更できますが、networking.machineNetwork[].cidr
および networking.serviceNetwork[]
の値は変更できません。詳細は、「クラスターネットワーク範囲の設定」を参照してください。
Amazon Web Services (AWS)、Google Cloud Platform (GCP)、Microsoft Azure、および Red Hat OpenStack Platform (RHOSP) へのインストールの場合、status.noProxy
パラメーターには、インスタンスメタデータのエンドポイント (169.254.169.254
) も設定されます。
RHCOS によって Proxy
オブジェクトの status:
セグメントに追加される値の例
- 1
- Pod IP アドレスの割り当てに使用する IP アドレスブロックを指定します。デフォルト値は
10.128.0.0/14
で、ホストの接頭辞は/23
です。 - 2
- マシンの IP アドレスブロックを指定します。デフォルト値は
10.0.0.0/16
です。 - 3
- サービスの IP アドレスブロックを指定します。デフォルト値は
172.30.0.0/16
です。 - 4
oc get infrastructures.config.openshift.io cluster -o jsonpath='{.status.etcdDiscoveryDomain}'
コマンドを実行すると、内部 API サーバーの URL を見つけることができます。
使用しているインストールタイプに networking.machineNetwork[].cidr
フィールドの設定が含まれていない場合は、ノード間のトラフィックがプロキシーをバイパスできるようにするために、.status.noProxy
フィールドにマシンの IP アドレスを手動で含める必要があります。
5.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
クラスターがアクセスする必要のあるサイト を確認し、プロキシーをバイパスする必要があるかどうかを判断します。デフォルトで、すべてのクラスターシステムの Egress トラフィック (クラスターをホストするクラウドのクラウドプロバイダー API に対する呼び出しを含む) はプロキシーされます。システム全体のプロキシーは、ユーザーのワークロードではなく、システムコンポーネントにのみ影響を与えます。必要に応じて、Proxy
オブジェクトの spec.noProxy
パラメーターにサイトを追加してプロキシーをバイパスします。
5.2. クラスター全体のプロキシーの有効化 リンクのコピーリンクがクリップボードにコピーされました!
Proxy
オブジェクトは、クラスター全体の Egress プロキシーを管理するために使用されます。プロキシーが設定されていない状態でクラスターをインストールまたはアップグレードすると、Proxy
オブジェクトは生成されますが、その spec
が nil になります。以下に例を示します。
cluster
という名前の Proxy
オブジェクトのみがサポートされ、追加のプロキシーを作成することはできません。
クラスター管理者は、cluster
Proxy
オブジェクトを変更することで、OpenShift Container Platform のプロキシーを設定できます。
クラスターのクラスター全体のプロキシー機能を有効にし、Proxy
オブジェクトファイルを保存すると、Machine Config Operator (MCO) によってクラスター内のすべてのノードが再起動され、各ノードがクラスターの外部にある接続にアクセスできるようになります。これらのノードを手動で再起動する必要はありません。
前提条件
- クラスター管理者のパーミッション。
-
OpenShift Container Platform
oc
CLI ツールがインストールされている。
手順
HTTPS 接続のプロキシーに必要な追加の CA 証明書が含まれる config map を作成します。
注記プロキシーのアイデンティティー証明書が Red Hat Enterprise Linux CoreOS (RHCOS) トラストバンドルの認証局によって署名されている場合は、この手順をスキップできます。
user-ca-bundle.yaml
というファイルを作成し、PEM でエンコードされた証明書の値を指定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
user-ca-bundle.yaml
ファイルから config map を作成します。oc create -f user-ca-bundle.yaml
$ oc create -f user-ca-bundle.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
oc edit
コマンドを使用してProxy
オブジェクトを変更します。oc edit proxy/cluster
$ oc edit proxy/cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow プロキシーに必要なフィールドを設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- クラスター外の HTTP 接続を作成するために使用するプロキシー URL。URL スキームは
http
である必要があります。 - 2
- クラスター外で HTTPS 接続を作成するために使用するプロキシー URL。URL スキームは
http
またはhttps
である必要があります。URL スキームをサポートするプロキシーの URL を指定します。たとえば、プロキシーがhttps
を使用するように設定されていても、http
しかサポートしていない場合、ほとんどのプロキシーはエラーを報告します。このエラーメッセージはログに反映されず、代わりにネットワーク接続エラーのように見える場合があります。クラスターからのhttps
接続をリッスンするプロキシーを使用する場合は、プロキシーが使用する CA と証明書を受け入れるようにクラスターを設定する必要がある場合があります。 - 3
- プロキシーを除外するための宛先ドメイン名、ドメイン、IP アドレス (またはその他のネットワーク CIDR)、およびポート番号のコンマ区切りリスト。注記
ポート番号は、IPv6 アドレスを設定する場合にのみサポートされます。IPv4 アドレスを設定する場合、ポート番号はサポートされません。
サブドメインのみと一致するように、ドメインの前に
.
を付けます。たとえば、.y.com
はx.y.com
に一致しますが、y.com
には一致しません。*
を使用し、すべての宛先のプロキシーをバイパスします。noproxy
フィールドにドメインアドレスを含める必要がある場合は、noproxy
フィールドにその FQDN または接頭辞が一致するサブドメインを明示的に指定する必要があります。ドメインをカプセル化する IP アドレスまたは CIDR 範囲は使用できません。なぜなら、クラスターは DNS が IP アドレスを返すのを待たずにルート接続を割り当て、実行されているリクエストを明示的にチェックするからです。たとえば、noproxy
フィールドに10.0.0.0/24
などの CIDR ブロック値がある場合、フィールドがhttps://10.0.0.11
にアクセスしようとすると、アドレスが正常にマッチします。しかし、A レコードのエントリーが10.0.0.11
であるhttps://exampleserver.externaldomain.com
にアクセスしようとすると、失敗します。noproxy
フィールドに.externaldomain.com
という追加の値が必要です。インストール設定の
networking.machineNetwork[].cidr
フィールドで定義されたネットワークに含まれていないコンピュートノードをスケールアップする場合は、接続の問題を防ぐために、そのノードをこのリストに追加する必要があります。httpProxy
またはhttpsProxy
フィールドのいずれも設定されていない場合に、このフィールドは無視されます。 - 4
httpProxy
およびhttpsProxy
の値をステータスに書き込む前の readiness チェックに使用するクラスター外の 1 つ以上の URL。- 5
- HTTPS 接続のプロキシーに必要な追加の CA 証明書が含まれる、
openshift-config
namespace の config map の参照。ここで参照する前に config map が存在している必要があります。このフィールドは、プロキシーのアイデンティティー証明書が RHCOS 信頼バンドルからの認証局によって署名されない限り必要になります。
- 変更を適用するためにファイルを保存します。
5.3. クラスター全体のプロキシーの削除 リンクのコピーリンクがクリップボードにコピーされました!
cluster
プロキシーオブジェクトは削除できません。クラスターからプロキシーを削除するには、プロキシーオブジェクトからすべての spec
フィールドを削除します。
前提条件
- クラスター管理者のパーミッション。
-
OpenShift Container Platform
oc
CLI ツールがインストールされている。
手順
oc edit
コマンドを使用してプロキシーを変更します。oc edit proxy/cluster
$ oc edit proxy/cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow プロキシーオブジェクトからすべての
spec
フィールドを削除します。以下に例を示します。apiVersion: config.openshift.io/v1 kind: Proxy metadata: name: cluster spec: {}
apiVersion: config.openshift.io/v1 kind: Proxy metadata: name: cluster spec: {}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 変更を適用するためにファイルを保存します。
5.4. クラスター全体のプロキシー設定の検証 リンクのコピーリンクがクリップボードにコピーされました!
クラスター全体のプロキシー設定がデプロイしたら、期待どおりに動作していることを検証できます。次の手順に従って、ログを確認し、実装を検証してください。
前提条件
- クラスター管理者パーミッションがある。
-
OpenShift Container Platform
oc
CLI ツールがインストールされている。
手順
oc
コマンドを使用してプロキシー設定のステータスを確認します。oc get proxy/cluster -o yaml
$ oc get proxy/cluster -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
出力内のプロキシーフィールドを検証して、設定と一致していることを確認します。具体的には、
spec.httpProxy
、spec.httpsProxy
、spec.noProxy
、およびspec.trustedCA
フィールドを確認します。 Proxy
オブジェクトのステータスを検査します。oc get proxy/cluster -o jsonpath='{.status}'
$ oc get proxy/cluster -o jsonpath='{.status}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Machine Config Operator (MCO) のログをチェックして、設定の変更が正常に適用されたことを確認します。
oc logs -n openshift-machine-config-operator $(oc get pods -n openshift-machine-config-operator -l k8s-app=machine-config-operator -o name)
$ oc logs -n openshift-machine-config-operator $(oc get pods -n openshift-machine-config-operator -l k8s-app=machine-config-operator -o name)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 必要に応じて、プロキシー設定が適用され、ノードが再起動されたことを示すメッセージを確認します。
外部リクエストを行うコンポーネント (Cluster Version Operator (CVO) など) のログをチェックして、システムコンポーネントがプロキシーを使用していることを確認します。
oc logs -n openshift-cluster-version $(oc get pods -n openshift-cluster-version -l k8s-app=machine-config-operator -o name)
$ oc logs -n openshift-cluster-version $(oc get pods -n openshift-cluster-version -l k8s-app=machine-config-operator -o name)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 外部リクエストがプロキシー経由でルーティングされたことを示すログエントリーを確認します。
関連情報
第6章 カスタム PKI の設定 リンクのコピーリンクがクリップボードにコピーされました!
Web コンソールなどの一部のプラットフォームコンポーネントは、通信にルートを使用し、それらと対話するために他のコンポーネントの証明書を信頼する必要があります。カスタムのパブリックキーインフラストラクチャー (PKI) を使用している場合は、プライベートに署名された CA 証明書がクラスター全体で認識されるようにこれを設定する必要があります。
プロキシー API を使用して、クラスター全体で信頼される CA 証明書を追加できます。インストール時またはランタイム時にこれを実行する必要があります。
インストール 時に、クラスター全体のプロキシーを設定します。プライベートに署名された CA 証明書は、
install-config.yaml
ファイルのadditionalTrustBundle
設定で定義する必要があります。インストールプログラムは、定義した追加の CA 証明書が含まれる
user-ca-bundle
という名前の ConfigMap を生成します。次に Cluster Network Operator は、これらの CA 証明書を Red Hat Enterprise Linux CoreOS (RHCOS) 信頼バンドルにマージするtrusted-ca-bundle
ConfigMap を作成し、この ConfigMap はプロキシーオブジェクトのtrustedCA
フィールドで参照されます。-
ランタイム 時に、デフォルトのプロキシーオブジェクトを変更して、プライベートに署名された CA 証明書を追加 します (これは、クラスターのプロキシー有効化のワークフローの一部です)。これには、クラスターで信頼される必要があるプライベートに署名された CA 証明書が含まれる ConfigMap を作成し、次にプライベートに署名された証明書の ConfigMap を参照する
trustedCA
でプロキシーリソースを変更することが関係します。
インストーラー設定の additionalTrustBundle
フィールドおよびプロキシーリソースの trustedCA
フィールドは、クラスター全体の信頼バンドルを管理するために使用されます。additionalTrustBundle
はインストール時に使用され、プロキシーの trustedCA
がランタイム時に使用されます。
trustedCA
フィールドは、クラスターコンポーネントによって使用されるカスタム証明書とキーのペアを含む ConfigMap
の参照です。
6.1. インストール時のクラスター全体のプロキシーの設定 リンクのコピーリンクがクリップボードにコピーされました!
実稼働環境では、インターネットへの直接アクセスを拒否し、代わりに HTTP または HTTPS プロキシーを使用することができます。プロキシー設定を install-config.yaml
ファイルで行うことにより、新規の OpenShift Container Platform クラスターをプロキシーを使用するように設定できます。
前提条件
-
既存の
install-config.yaml
ファイルがある。 クラスターがアクセスする必要のあるサイトを確認済みで、それらのいずれかがプロキシーをバイパスする必要があるかどうかを判別している。デフォルトで、すべてのクラスター Egress トラフィック (クラスターをホストするクラウドに関するクラウドプロバイダー API に対する呼び出しを含む) はプロキシーされます。プロキシーを必要に応じてバイパスするために、サイトを
Proxy
オブジェクトのspec.noProxy
フィールドに追加している。注記Proxy
オブジェクトのstatus.noProxy
フィールドには、インストール設定のnetworking.machineNetwork[].cidr
、networking.clusterNetwork[].cidr
、およびnetworking.serviceNetwork[]
フィールドの値が設定されます。Amazon Web Services (AWS)、Google Cloud Platform (GCP)、Microsoft Azure、および Red Hat OpenStack Platform (RHOSP) へのインストールの場合、
Proxy
オブジェクトのstatus.noProxy
フィールドには、インスタンスメタデータのエンドポイント (169.254.169.254
) も設定されます。
手順
install-config.yaml
ファイルを編集し、プロキシー設定を追加します。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- クラスター外の HTTP 接続を作成するために使用するプロキシー URL。URL スキームは
http
である必要があります。 - 2
- クラスター外で HTTPS 接続を作成するために使用するプロキシー URL。
- 3
- プロキシーから除外するための宛先ドメイン名、IP アドレス、または他のネットワーク CIDR のコンマ区切りのリスト。サブドメインのみと一致するように、ドメインの前に
.
を付けます。たとえば、.y.com
はx.y.com
に一致しますが、y.com
には一致しません。*
を使用し、すべての宛先のプロキシーをバイパスします。 - 4
- 指定されている場合、インストールプログラムは HTTPS 接続のプロキシーに必要な 1 つ以上の追加の CA 証明書が含まれる
user-ca-bundle
という名前の設定マップをopenshift-config
namespace に生成します。次に Cluster Network Operator は、これらのコンテンツを Red Hat Enterprise Linux CoreOS (RHCOS) 信頼バンドルにマージするtrusted-ca-bundle
設定マップを作成し、この設定マップはProxy
オブジェクトのtrustedCA
フィールドで参照されます。additionalTrustBundle
フィールドは、プロキシーのアイデンティティー証明書が RHCOS 信頼バンドルからの認証局によって署名されない限り必要になります。 - 5
- オプション:
trustedCA
フィールドのuser-ca-bundle
設定マップを参照するProxy
オブジェクトの設定を決定するポリシー。許可される値はProxyonly
およびAlways
です。Proxyonly
を使用して、http/https
プロキシーが設定されている場合にのみuser-ca-bundle
設定マップを参照します。Always
を使用して、常にuser-ca-bundle
設定マップを参照します。デフォルト値はProxyonly
です。
注記インストールプログラムは、プロキシーの
readinessEndpoints
フィールドをサポートしません。注記インストーラーがタイムアウトした場合は、インストーラーの
wait-for
コマンドを使用してデプロイメントを再起動してからデプロイメントを完了します。以下に例を示します。./openshift-install wait-for install-complete --log-level debug
$ ./openshift-install wait-for install-complete --log-level debug
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ファイルを保存し、OpenShift Container Platform のインストール時にこれを参照します。
インストールプログラムは、指定の install-config.yaml
ファイルのプロキシー設定を使用する cluster
という名前のクラスター全体のプロキシーを作成します。プロキシー設定が指定されていない場合、cluster
Proxy
オブジェクトが依然として作成されますが、これには spec
がありません。
cluster
という名前の Proxy
オブジェクトのみがサポートされ、追加のプロキシーを作成することはできません。
6.2. クラスター全体のプロキシーの有効化 リンクのコピーリンクがクリップボードにコピーされました!
Proxy
オブジェクトは、クラスター全体の Egress プロキシーを管理するために使用されます。プロキシーが設定されていない状態でクラスターをインストールまたはアップグレードすると、Proxy
オブジェクトは生成されますが、その spec
が nil になります。以下に例を示します。
cluster
という名前の Proxy
オブジェクトのみがサポートされ、追加のプロキシーを作成することはできません。
クラスター管理者は、cluster
Proxy
オブジェクトを変更することで、OpenShift Container Platform のプロキシーを設定できます。
クラスターのクラスター全体のプロキシー機能を有効にし、Proxy
オブジェクトファイルを保存すると、Machine Config Operator (MCO) によってクラスター内のすべてのノードが再起動され、各ノードがクラスターの外部にある接続にアクセスできるようになります。これらのノードを手動で再起動する必要はありません。
前提条件
- クラスター管理者のパーミッション。
-
OpenShift Container Platform
oc
CLI ツールがインストールされている。
手順
HTTPS 接続のプロキシーに必要な追加の CA 証明書が含まれる config map を作成します。
注記プロキシーのアイデンティティー証明書が Red Hat Enterprise Linux CoreOS (RHCOS) トラストバンドルの認証局によって署名されている場合は、この手順をスキップできます。
user-ca-bundle.yaml
というファイルを作成し、PEM でエンコードされた証明書の値を指定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
user-ca-bundle.yaml
ファイルから config map を作成します。oc create -f user-ca-bundle.yaml
$ oc create -f user-ca-bundle.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
oc edit
コマンドを使用してProxy
オブジェクトを変更します。oc edit proxy/cluster
$ oc edit proxy/cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow プロキシーに必要なフィールドを設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- クラスター外の HTTP 接続を作成するために使用するプロキシー URL。URL スキームは
http
である必要があります。 - 2
- クラスター外で HTTPS 接続を作成するために使用するプロキシー URL。URL スキームは
http
またはhttps
である必要があります。URL スキームをサポートするプロキシーの URL を指定します。たとえば、プロキシーがhttps
を使用するように設定されていても、http
しかサポートしていない場合、ほとんどのプロキシーはエラーを報告します。このエラーメッセージはログに反映されず、代わりにネットワーク接続エラーのように見える場合があります。クラスターからのhttps
接続をリッスンするプロキシーを使用する場合は、プロキシーが使用する CA と証明書を受け入れるようにクラスターを設定する必要がある場合があります。 - 3
- プロキシーを除外するための宛先ドメイン名、ドメイン、IP アドレス (またはその他のネットワーク CIDR)、およびポート番号のコンマ区切りリスト。注記
ポート番号は、IPv6 アドレスを設定する場合にのみサポートされます。IPv4 アドレスを設定する場合、ポート番号はサポートされません。
サブドメインのみと一致するように、ドメインの前に
.
を付けます。たとえば、.y.com
はx.y.com
に一致しますが、y.com
には一致しません。*
を使用し、すべての宛先のプロキシーをバイパスします。noproxy
フィールドにドメインアドレスを含める必要がある場合は、noproxy
フィールドにその FQDN または接頭辞が一致するサブドメインを明示的に指定する必要があります。ドメインをカプセル化する IP アドレスまたは CIDR 範囲は使用できません。なぜなら、クラスターは DNS が IP アドレスを返すのを待たずにルート接続を割り当て、実行されているリクエストを明示的にチェックするからです。たとえば、noproxy
フィールドに10.0.0.0/24
などの CIDR ブロック値がある場合、フィールドがhttps://10.0.0.11
にアクセスしようとすると、アドレスが正常にマッチします。しかし、A レコードのエントリーが10.0.0.11
であるhttps://exampleserver.externaldomain.com
にアクセスしようとすると、失敗します。noproxy
フィールドに.externaldomain.com
という追加の値が必要です。インストール設定の
networking.machineNetwork[].cidr
フィールドで定義されたネットワークに含まれていないコンピュートノードをスケールアップする場合は、接続の問題を防ぐために、そのノードをこのリストに追加する必要があります。httpProxy
またはhttpsProxy
フィールドのいずれも設定されていない場合に、このフィールドは無視されます。 - 4
httpProxy
およびhttpsProxy
の値をステータスに書き込む前の readiness チェックに使用するクラスター外の 1 つ以上の URL。- 5
- HTTPS 接続のプロキシーに必要な追加の CA 証明書が含まれる、
openshift-config
namespace の config map の参照。ここで参照する前に config map が存在している必要があります。このフィールドは、プロキシーのアイデンティティー証明書が RHCOS 信頼バンドルからの認証局によって署名されない限り必要になります。
- 変更を適用するためにファイルを保存します。
6.3. Operator を使用した証明書の挿入 リンクのコピーリンクがクリップボードにコピーされました!
カスタム CA 証明書が ConfigMap 経由でクラスターに追加されると、Cluster Network Operator はユーザーによってプロビジョニングされる CA 証明書およびシステム CA 証明書を単一バンドルにマージし、信頼バンドルの挿入を要求する Operator にマージされたバンドルを挿入します。
config.openshift.io/inject-trusted-cabundle="true"
ラベルを config map に追加すると、そこに格納されている既存データが削除されます。Cluster Network Operator は config map の所有権を取得し、ca-bundle
をデータとしてのみ受け入れます。service.beta.openshift.io/inject-cabundle=true
アノテーションまたは同様の設定を使用して service-ca.crt
を保存するには、別の config map を使用する必要があります。同じ config map に config.openshift.io/inject-trusted-cabundle="true"
ラベルと service.beta.openshift.io/inject-cabundle=true
アノテーションを追加すると、問題が発生する可能性があります。
Operator は、以下のラベルの付いた空の ConfigMap を作成してこの挿入を要求します。
config.openshift.io/inject-trusted-cabundle="true"
config.openshift.io/inject-trusted-cabundle="true"
空の ConfigMap の例:
- 1
- 空の ConfigMap 名を指定します。
Operator は、この ConfigMap をコンテナーのローカル信頼ストアにマウントします。
信頼された CA 証明書の追加は、証明書が Red Hat Enterprise Linux CoreOS (RHCOS) 信頼バンドルに含まれない場合にのみ必要になります。
証明書の挿入は Operator に制限されません。Cluster Network Operator は、空の ConfigMap が config.openshift.io/inject-trusted-cabundle=true
ラベルを使用して作成される場合に、すべての namespace で証明書を挿入できます。
ConfigMap はすべての namespace に置くことができますが、ConfigMap はカスタム CA を必要とする Pod 内の各コンテナーに対してボリュームとしてマウントされる必要があります。以下に例を示します。
Legal Notice
リンクのコピーリンクがクリップボードにコピーされました!
Copyright © 2025 Red Hat
OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).
Modified versions must remove all Red Hat trademarks.
Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.
Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.