ネットワーク
クラスターネットワークの設定および管理
概要
第1章 OVN-Kubernetes ネットワークプラグインについて リンクのコピーリンクがクリップボードにコピーされました!
OVN-Kubernetes Container Network Interface (CNI) プラグインは、MicroShift ノードのデフォルトのネットワークソリューションです。OVN-Kubernetes は、Open Virtual Network (OVN) に基づく Pod およびサービス用の仮想化ネットワークです。
-
デフォルトのネットワーク設定と接続は、インストール中に
microshift-networkingRPM を使用して MicroShift に自動的に適用されます。 - OVN-Kubernetes ネットワークプラグインを使用するノードは、ノードで Open vSwitch (OVS) も実行します。
- OVN-K は、宣言されたネットワーク設定を実装するようにノードの OVS を設定します。
-
ホストの物理インターフェイスは、デフォルトでは OVN-K ゲートウェイブリッジ
br-exにバインドされません。Network Manager CLI (nmcli) など、ホスト上の標準ツールを使用してデフォルトゲートウェイを管理できます。 - CNI の変更は MicroShift ではサポートされていません。
設定ファイルまたはカスタムスクリプトを使用して、次のネットワーク設定を設定できます。
- サブネットの CIDR 範囲を使用して、Pod に IP アドレスを割り当てることができます。
- 最大伝送単位 (MTU) 値を変更できます。
- ファイアウォールの Ingress と Egress を設定できます。
- MicroShift では、Ingress ルールや Egress ルールなどのネットワークポリシーを定義できます。
- MicroShift Multus プラグインを使用して、他の CNI プラグインをチェーンできます。
- Ingress ルーターを設定または削除できます。
1.1. MicroShift ネットワーク設定マトリックス リンクのコピーリンクがクリップボードにコピーされました!
次の表はネットワーク機能のステータスをまとめたものです。デフォルトとして存在する機能、設定可能な機能、MicroShift サービスで使用できない機能があります。
| ネットワーク機能 | 可用性 | 設定のサポート |
|---|---|---|
| アドレスのアドバタイズ | はい | はい [1] |
| Kubernetes ネットワークポリシー | はい | はい |
| Kubernetes ネットワークポリシーログ | 利用不可 | 該当なし |
| 負荷分散 | はい | はい |
| マルチキャスト DNS | はい | はい [2] |
| ネットワークプロキシー | はい [3] | CRI-O |
| ネットワークパフォーマンス | はい | MTU 設定 |
| Egress IP | 利用不可 | 該当なし |
| Egress ファイアウォール | 利用不可 | 該当なし |
| Egress ルーター | 利用不可 | 該当なし |
| ファイアウォール | いいえ [4] | はい |
| ハードウェアのオフロード | 利用不可 | 該当なし |
| ハイブリッドネットワーク | 利用不可 | 該当なし |
| クラスター内通信の IPsec 暗号化 | 利用不可 | 該当なし |
| IPv6 | サポート対象 [5] | 該当なし |
| Ingress ルーター | はい | はい [6] |
| 複数のネットワークプラグイン | はい | はい |
-
設定されていない場合、デフォルト値はサービスネットワークのすぐ後のサブネットに設定されます。たとえば、サービスネットワークが
10.43.0.0/16の場合、advertiseAddressは、10.44.0.0/32に設定されます。 -
マルチキャスト DNS プロトコル (mDNS) を使用することで、
5353/UDPポートで公開されているマルチキャストを使用した、ローカルエリアネットワーク (LAN) 内で名前解決とサービス検出が可能になります。 - MicroShift には、Egress トラフィックをプロキシーする、埋め込みの透過的機能はありません。Egress は手動で設定する必要があります。
- firewalld サービスのセットアップは、RHEL for Edge でサポートされています。
- IPv6 は、OVN-Kubernetes ネットワークプラグインを使用するシングルスタックおよびデュアルスタックネットワークの両方でサポートされています。IPv6 は、MicroShift Multus CNI プラグインを使用して他のネットワークに接続することで使用することもできます。
-
MicroShift の
config.yamlファイルを使用して設定します。
1.1.1. デフォルトの設定 リンクのコピーリンクがクリップボードにコピーされました!
MicroShift の Generic Device Plugin は、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
config.yaml ファイルを作成しない場合、または設定スニペット YAML ファイルを使用しない場合は、デフォルト値が使用されます。次の例は、デフォルトの設定を示しています。
デフォルト値を確認するには、次のコマンドを実行します。
microshift show-config
$ microshift show-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow YAML 形式でのデフォルト値の出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.2. ネットワーク機能 リンクのコピーリンクがクリップボードにコピーされました!
以下は、MicroShift 4.20 で利用できるネットワーク機能です。
- Kubernetes ネットワークポリシー
- 動的ノード IP
- カスタムゲートウェイインターフェイス
- セカンドゲートウェイインターフェイス
- 指定されたホストインターフェイス上のノードネットワーク
- 特定のホストインターフェイス上の NodePort サービスへの外部アクセスをブロック
以下は、MicroShift 4.20 で利用できないネットワーク機能です。
- Egress IP/ファイアウォール/QoS: 無効
- ハイブリッドネットワーク: サポートなし
- IPsec: サポートなし
- ハードウェアオフロード: サポートなし
1.3. IP 転送 リンクのコピーリンクがクリップボードにコピーされました!
ホストネットワーク sysctl net.ipv4.ip_forward カーネルパラメーターは、起動時に ovnkube-master コンテナーによって自動的に有効になります。これは、着信トラフィックを CNI に転送するために必要です。たとえば、ip_forward が無効になっている場合は、ノードの外部から NodePort サービスにアクセスすると失敗します。
1.4. ネットワークパフォーマンスの最適化 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、リソース消費を最小限に抑えるために、OVS サービスに 3 つのパフォーマンス最適化が適用されます。
-
ovs-vswitchd.serviceおよびovsdb-server.serviceへの CPU アフィニティー -
no-mlockallからopenvswitch.service -
ハンドラーと
revalidatorのスレッドをovs-vswitchd.serviceに限定
1.5. MicroShift ネットワーキングコンポーネントおよびサービス リンクのコピーリンクがクリップボードにコピーされました!
この簡単な概要では、MicroShift でのネットワークコンポーネントとその操作を説明します。microshift-networking RPM は、ネットワーク関連の依存関係と systemd サービスを自動的に取り込み、ネットワークを初期化するパッケージです (microshift-ovs-init systemd サービスなど)。
- NetworkManager
-
MicroShift ノードで初期ゲートウェイブリッジをセットアップするには、NetworkManager が必要です。NetworkManager および
NetworkManager-ovsRPM パッケージは、必要な設定ファイルを含むmicroshift-networkingRPM パッケージへの依存関係としてインストールされます。MicroShift の NetworkManager はkeyfileファイルプラグインを使用し、microshift-networkingRPM パッケージのインストール後に再起動されます。 - microshift-ovs-init
-
microshift-ovs-init.serviceは、microshift.serviceに依存する systemd サービスとして、microshift-networkingRPM パッケージによりインストールされます。OVS ゲートウェイブリッジを設定します。 - OVN コンテナー
2 つの OVN-Kubernetes デーモンセットが MicroShift によってレンダリングおよび適用されます。
-
ovnkube-master
northd、nbdb、sbdb、およびovnkube-masterコンテナーが含まれます。 ovnkube-node ovnkube-node には、OVN-Controller コンテナーが含まれています。
MicroShift の起動後、OVN-Kubernetes デーモンセットが
openshift-ovn-kubernetesnamespace にデプロイされます。
-
ovnkube-master
- パッケージ
OVN-Kubernetes マニフェストと起動ロジックは MicroShift に組み込まれています。
microshift-networkingRPM に含まれる systemd サービスと設定は次のとおりです。-
NetworkManager.serviceの/etc/NetworkManager/conf.d/microshift-nm.conf -
ovs-vswitchd.serviceの/etc/systemd/system/ovs-vswitchd.service.d/microshift-cpuaffinity.conf -
ovs-server.serviceの/etc/systemd/system/ovsdb-server.service.d/microshift-cpuaffinity.conf -
microshift-ovs-init.serviceの/usr/bin/configure-ovs-microshift.sh -
microshift-ovs-init.serviceの/usr/bin/configure-ovs.sh -
CRI-O サービスの
/etc/crio/crio.conf.d/microshift-ovn.conf
-
1.6. ブリッジマッピング リンクのコピーリンクがクリップボードにコピーされました!
ブリッジマッピングにより、プロバイダーネットワークのトラフィックは、物理ネットワークに到達することが可能となります。トラフィックはプロバイダーネットワークから出て、br-int ブリッジに到達します。br-int と br-ex の間のパッチポートは、トラフィックがプロバイダーネットワークとエッジネットワークを通信できるようにします。Kubernetes Pod は、仮想イーサネットペアを介して br-int ブリッジに接続されます。仮想イーサネットペアの一端は Pod の namespace に接続され、他端は br-int ブリッジに接続されます。
1.7. ネットワークトポロジー リンクのコピーリンクがクリップボードにコピーされました!
OVN-Kubernetes は、オーバーレイベースのネットワーク実装を提供します。このオーバーレイには、Service および NetworkPolicy の OVS ベースの実装が含まれています。オーバーレイネットワークは、Geneve (Generic Network Virtualization Encapsulation) トンネルプロトコルを使用します。Geneve トンネルの Pod 最大伝送単位 (MTU) が設定されていない場合、デフォルトルートの MTU に設定されます。
MTU を設定する際には、ホスト上の物理インターフェイスの MTU 以下の値を設定する必要があります。その MTU 以下の値を設定することで、送信前にトンネルヘッダーに追加される必要な情報のための容量が確保されます。
MicroShift の OVN オーバーレイネットワークの MTU 値は、ベースネットワークの MTU 値より 100 バイト小さくする必要があります。MTU 値が設定されていない場合、MicroShift はホストのデフォルトゲートウェイ (インターネットプロトコルバージョン 4 (IPv4) またはインターネットプロトコルバージョン 6 (IPv6)) の MTU 値を使用して値を自動設定します。自動設定が正しく機能しない場合は、MTU 値を手動で設定できます。たとえば、ネットワークの MTU 値が 9000 の場合、OVN MTU サイズは 8900 に設定する必要があります。
OVS は MicroShift ノードで systemd サービスとして実行します。OVS RPM パッケージは、microshift-networking RPM パッケージへの依存関係としてインストールされます。OVS は、microshift-networking RPM がインストールされるとすぐに開始します。
Red Hat build of MicroShift ネットワークトポロジー
1.7.1. 仮想化ネットワークの OVN 論理コンポーネントの説明 リンクのコピーリンクがクリップボードにコピーされました!
- OVN ノードスイッチ
<node-name>という名前の仮想スイッチ。OVN ノードスイッチの名前は、ノードのホスト名に基づいて付けられます。-
この例では、
node-nameはmicroshift-devです。
-
この例では、
- OVN クラスタールーター
ovn_cluster_routerという名前の仮想ルーター。分散ルーターとも呼ばれます。-
この例では、ノードネットワークは
10.42.0.0/16です。
-
この例では、ノードネットワークは
- OVN 結合スイッチ
-
joinという名前の仮想スイッチ。 - OVN ゲートウェイルーター
-
GR_<node-name>という名前の仮想ルーター。外部ゲートウェイルーターとも呼ばれます。 - OVN 外部スイッチ
-
ext_<node-name>という名前の仮想スイッチ。
1.7.2. ネットワークトポロジー図の接続の説明 リンクのコピーリンクがクリップボードにコピーされました!
-
ネットワークサービスと OVN 外部スイッチ
ext_microshift-devの間の North-South トラフィックは、ゲートウェイブリッジbr-exによってホストカーネルを介して提供されます。 -
OVN ゲートウェイルーター
GR_microshift-devは、論理ルーターポート 4 を介して外部ネットワークスイッチext_microshift-devに接続しています。ポート 4 にはノード IP アドレス 192.168.122.14 が割り当てられます。 参加スイッチ
joinは、OVN ゲートウェイルーターGR_microshift-devを OVN クラスタールーターovn_cluster_routerに接続します。IP アドレス範囲は 100.62.0.0/16 です。-
OVN ゲートウェイルーター
GR_microshift-devは、論理ルーターポート 3 を介して OVN 結合スイッチjoinに接続します。ポート 3 は内部 IP アドレス 100.64.0.2 に接続します。 -
OVN クラスタールーター
ovn_cluster_routerは、論理ルーターポート 2 を介して参加スイッチjoinに接続します。ポート 2 は内部 IP アドレス 100.64.0.1 に接続します。
-
OVN ゲートウェイルーター
-
OVN クラスタールーター
ovn_cluster_routerは、論理ルーターポート 1 を介してノードスイッチmicroshift-devに接続します。ポート 1 には、OVN クラスターネットワーク IP アドレス 10.42.0.1 が割り当てられます。 -
Pod とネットワークサービス間の East-West トラフィックは、OVN クラスタールーター
ovn_cluster_routerとノードスイッチmicroshift-devによって提供されます。IP アドレス範囲は 10.42.0.0/24 です。 -
Pod 間の East-West トラフィックは、ネットワークアドレス変換 (NAT) を使用せずに、ノードスイッチ
microshift-devによって提供されます。 -
Pod と外部ネットワーク間の North-South トラフィックは、OVN クラスタールーター
ovn_cluster_routerとホストネットワークによって提供されます。このルーターは、ovn-kubernetes管理ポートovn-k8s-mp0を介して、IP アドレス 10.42.0.2 で接続しています。 すべての Pod は、インターフェイスを介して OVN ノードスイッチに接続します。
-
この例では、Pod 1 と Pod 2 は、
Interface 1とInterface 2を介してノードスイッチに接続しています。
-
この例では、Pod 1 と Pod 2 は、
第2章 ネットワーク設定について リンクのコピーリンクがクリップボードにコピーされました!
ネットワークのカスタマイズとデフォルト設定を MicroShift デプロイメントに適用する方法を学びます。各ノードは単一のマシンと単一の MicroShift に含まれているため、デプロイごとに個別の構成、Pod、および設定が必要です。
MicroShift 管理者は、ノードで実行されるアプリケーションを外部トラフィックに公開し、ネットワーク接続のセキュリティーを保護するための複数のオプションがあります。
- NodePort などのサービス
-
IngressやRouteなどの API リソース
デフォルトで、Kubernetes は各 Pod に、Pod 内で実行しているアプリケーションの内部 IP アドレスを割り当てます。Pod とそのコンテナーの間にはトラフィックを配置できますが、NodePort などのサービスで公開されている場合を除き、ノード外のクライアントは Pod に直接ネットワークアクセスできません。
2.1. OVN-Kubernetes 設定ファイルの作成 リンクのコピーリンクがクリップボードにコピーされました!
OVN-Kubernetes 設定ファイルが作成されていない場合、MicroShift は組み込みのデフォルト OVN-Kubernetes 値を使用します。OVN-Kubernetes 設定ファイルを /etc/microshift/ovn.yaml に書き込むことができます。設定用のサンプルファイルが提供されています。
手順
ovn.yamlファイルを作成するには、次のコマンドを実行します。$ sudo cp /etc/microshift/ovn.yaml.default /etc/microshift/ovn.yaml
$ sudo cp /etc/microshift/ovn.yaml.default /etc/microshift/ovn.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 作成した設定ファイルの内容を一覧表示するには、次のコマンドを実行します。
$ cat /etc/microshift/ovn.yaml
$ cat /etc/microshift/ovn.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトの最大伝送単位 (MTU) 値を含む YAML ファイルの例
mtu: 1400
mtu: 1400Copy to Clipboard Copied! Toggle word wrap Toggle overflow 設定をカスタマイズするには、MTU 値を変更します。以下の表で詳細を記載します。
Expand 表2.1 サポート対象の MicroShift の OVN-Kubernetes 設定 (任意) フィールド 型 デフォルト 説明 例 mtu
uint32
auto
Pod に使用される MTU 値
1300
重要ovn.yamlファイルのmtu設定値を変更した場合に、更新された設定を適用するには、Red Hat build of MicroShift が実行しているホストを再起動する必要があります。カスタム
ovn.yaml設定ファイルの例mtu: 1300
mtu: 1300Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2. ovnkube-master Pod の再起動 リンクのコピーリンクがクリップボードにコピーされました!
次の手順で ovnkube-master Pod を再起動します。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 - ノードへの root アクセス権限がある。
- インフラストラクチャーにインストールされたノードが OVN-Kubernetes ネットワークプラグインで設定されている。
- KUBECONFIG 環境変数が設定されている。
手順
次の手順を使用して、ovnkube-master Pod を再起動します。
次のコマンドを実行して、リモートノードにアクセスします。
export KUBECONFIG=$PWD/kubeconfig
$ export KUBECONFIG=$PWD/kubeconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、再起動する
ovnkube-masterPod の名前を見つけます。pod=$(oc get pods -n openshift-ovn-kubernetes | awk -F " " '/ovnkube-master/{print $1}')$ pod=$(oc get pods -n openshift-ovn-kubernetes | awk -F " " '/ovnkube-master/{print $1}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
ovnkube-masterPod を削除します。oc -n openshift-ovn-kubernetes delete pod $pod
$ oc -n openshift-ovn-kubernetes delete pod $podCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して、新しい
ovnkube-masterPod が実行されていることを確認します。oc get pods -n openshift-ovn-kubernetes
$ oc get pods -n openshift-ovn-kubernetesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 実行中の Pod のリストには、新しい
ovnkube-masterPod の名前と経過時間が表示されます。
2.3. HTTP または HTTPS プロキシーの背後への MicroShift のデプロイ リンクのコピーリンクがクリップボードにコピーされました!
基本的な匿名性とセキュリティー対策を Pod に追加する場合は、HTTP または HTTPS プロキシーの背後に MicroShift ノードをデプロイします。
プロキシーの背後に MicroShift をデプロイする場合は、HTTP または HTTPS 要求を開始するすべてのコンポーネントでプロキシーサービスを使用するように、ホストオペレーティングシステムを設定する必要があります。
クラウドサービスへのアクセスなど、Egress トラフィックを伴うユーザー固有のワークロードまたは Pod はすべて、プロキシーを使用するように設定する必要があります。MicroShift には、Egress トラフィックをプロキシーする、埋め込みの透過的機能はありません。
2.4. RPM-OStree HTTP または HTTPS プロキシーの使用 リンクのコピーリンクがクリップボードにコピーされました!
RPM-OStree で HTTP または HTTPS プロキシーを使用するには、設定ファイルに Service セクションを追加し、rpm-ostree サービスの http_proxy 環境変数を設定する必要があります。
手順
次の設定を
/etc/systemd/system/rpm-ostreed.service.d/00-proxy.confファイルに追加します。[Service] Environment="http_proxy=http://$PROXY_USER:$PROXY_PASSWORD@$PROXY_SERVER:$PROXY_PORT/"
[Service] Environment="http_proxy=http://$PROXY_USER:$PROXY_PASSWORD@$PROXY_SERVER:$PROXY_PORT/"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次に、設定をリロードして、サービスを再起動して変更を適用します。
次のコマンドを実行して、設定をリロードします。
sudo systemctl daemon-reload
$ sudo systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
rpm-ostreedサービスを再起動します。sudo systemctl restart rpm-ostreed.service
$ sudo systemctl restart rpm-ostreed.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5. CRI-O コンテナーランタイムでのプロキシーの使用 リンクのコピーリンクがクリップボードにコピーされました!
CRI-O で HTTP または HTTPS プロキシーを使用するには、設定ファイルに Service セクションを追加し、HTTP_PROXY および HTTPS_PROXY 環境変数を設定する必要があります。NO_PROXY 変数を設定して、ホストのリストをプロキシーから除外することもできます。
手順
設定ファイル用のディレクトリーが存在しない場合は、作成します。
sudo mkdir /etc/systemd/system/crio.service.d/
$ sudo mkdir /etc/systemd/system/crio.service.d/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の設定を
/etc/systemd/system/crio.service.d/00-proxy.confファイルに追加します。[Service] Environment=NO_PROXY="localhost,127.0.0.1" Environment=HTTP_PROXY="http://$PROXY_USER:$PROXY_PASSWORD@$PROXY_SERVER:$PROXY_PORT/" Environment=HTTPS_PROXY="http://$PROXY_USER:$PROXY_PASSWORD@$PROXY_SERVER:$PROXY_PORT/"
[Service] Environment=NO_PROXY="localhost,127.0.0.1" Environment=HTTP_PROXY="http://$PROXY_USER:$PROXY_PASSWORD@$PROXY_SERVER:$PROXY_PORT/" Environment=HTTPS_PROXY="http://$PROXY_USER:$PROXY_PASSWORD@$PROXY_SERVER:$PROXY_PORT/"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要環境変数の設定ファイルの
Serviceセクションを定義する必要があります。定義しないと、プロキシー設定が適用されません。設定を再読み込みします。
sudo systemctl daemon-reload
$ sudo systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow CRI-O サービスを再起動します。
sudo systemctl restart crio
$ sudo systemctl restart crioCopy to Clipboard Copied! Toggle word wrap Toggle overflow MicroShift サービスを再起動して設定を適用します。
sudo systemctl restart microshift
$ sudo systemctl restart microshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
次のコマンドを実行し、出力を調べて、Pod が起動していることを確認します。
oc get all -A
$ oc get all -ACopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行し、出力を調べて、MicroShift がコンテナーイメージをプルできることを確認します。
sudo crictl images
$ sudo crictl imagesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.6. 実行中のノードからの OVS インターフェイスのスナップショット取得 リンクのコピーリンクがクリップボードにコピーされました!
スナップショットは、特定の時点における OVS インターフェイスの状態とデータを表します。
手順
実行中の MicroShift ノードから OVS インターフェイスのスナップショットを表示するには、次のコマンドを使用します。
sudo ovs-vsctl show
$ sudo ovs-vsctl showCopy to Clipboard Copied! Toggle word wrap Toggle overflow 実行中のノードでの OVS インターフェイスの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
patch-br-ex_localhost.localdomain-to-br-intとpatch-br-int-to-br-ex_localhost.localdomainは、br-exとbr-intを接続する OVS パッチポートです。- 2
patch-br-ex_localhost.localdomain-to-br-intとpatch-br-int-to-br-ex_localhost.localdomainは、br-exとbr-intを接続する OVS パッチポートです。- 3
- Pod インターフェイス
eebee1ce5568761は、Pod Sandbox ID の最初の 15 ビットを使用して名前が付けられ、br-intブリッジにプラグインされます。 - 4
- Pod インターフェイス
b47b1995ada84f4は、Pod Sandbox ID の最初の 15 ビットを使用して名前が付けられ、br-intブリッジにプラグインされます。 - 5
- Pod インターフェイス
3031f43d67c167fは、Pod Sandbox ID の最初の 15 ビットを使用して名前が付けられ、br-intブリッジにプラグインされます。 - 6
- ヘアピントラフィック用の OVS 内部ポート
ovn-k8s-mp0は、ovnkube-masterコンテナーによって作成されます。
2.7. ワークロード用の MicroShift LoadBalancer サービス リンクのコピーリンクがクリップボードにコピーされました!
MicroShift には、ノード内のワークロードとアプリケーションに使用できる Network Load Balancer の実装が組み込まれています。Ingress ルールを理解し、Ingress コントローラーとして機能するように Pod を設定することで、LoadBalancer サービスを作成できます。以下の手順では、デプロイメントベースの LoadBalancer サービスの例を示します。
2.8. アプリケーション用のロードバランサーのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
次の手順例では、ノード IP アドレスを LoadBalancer サービス設定ファイルの外部 IP アドレスとして使用します。この例を、ロードバランサーをデプロイする方法のガイダンスとして使用します。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 - OVN-Kubernetes ネットワークプラグインで設定されたインフラストラクチャーにノードがインストールされている。
-
KUBECONFIG環境変数が設定されている。
手順
次のコマンドを入力して、Pod が実行されていることを確認します。
oc get pods -A
$ oc get pods -ACopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、namespace を作成します。
NAMESPACE=<nginx-lb-test>
$ NAMESPACE=<nginx-lb-test>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- _<nginx-lb-test> は、作成するアプリケーション namespace に置き換えます。
oc create ns $NAMESPACE
$ oc create ns $NAMESPACECopy to Clipboard Copied! Toggle word wrap Toggle overflow namespace の例
次の例では、
nginxテストアプリケーションの 3 つのレプリカを、作成された namespace にデプロイします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行すると、3 つのサンプルレプリカが正常に開始したことを確認できます。
oc get pods -n $NAMESPACE
$ oc get pods -n $NAMESPACECopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
nginxテストアプリケーションのLoadBalancerサービスを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記portパラメーターが、他のLoadBalancerサービスまたは MicroShift コンポーネントによって占有されていないホストポートであることを確認する必要があります。サービスファイルが存在し、外部 IP アドレスが適切に割り当てられていること、および外部 IP がノード IP と同一であることを確認するには、次のコマンドを実行します。
oc get svc -n $NAMESPACE
$ oc get svc -n $NAMESPACECopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx LoadBalancer 10.43.183.104 192.168.1.241 81:32434/TCP 2m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx LoadBalancer 10.43.183.104 192.168.1.241 81:32434/TCP 2mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
次のコマンドは、LoadBalancer サービス設定の外部 IP アドレスを使用して、例の nginx アプリケーションへの 5 つの接続を形成します。コマンドの結果は、それらのサーバー IP アドレスのリストです。
次のコマンドを実行して、ロードバランサーが実行中のすべてのアプリケーションにリクエストを送信していることを確認します。
EXTERNAL_IP=192.168.1.241 seq 5 | xargs -Iz curl -s -I http://$EXTERNAL_IP:81 | grep X-Server-IP
EXTERNAL_IP=192.168.1.241 seq 5 | xargs -Iz curl -s -I http://$EXTERNAL_IP:81 | grep X-Server-IPCopy to Clipboard Copied! Toggle word wrap Toggle overflow LoadBalancerサービスがトラフィックをアプリケーションに正常に分散している場合、前のコマンドの出力には異なる IP アドレスが含まれます。次に例を示します。出力例
X-Server-IP: 10.42.0.41 X-Server-IP: 10.42.0.41 X-Server-IP: 10.42.0.43 X-Server-IP: 10.42.0.41 X-Server-IP: 10.42.0.43
X-Server-IP: 10.42.0.41 X-Server-IP: 10.42.0.41 X-Server-IP: 10.42.0.43 X-Server-IP: 10.42.0.41 X-Server-IP: 10.42.0.43Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.9. 特定のホストインターフェイス上の NodePort サービスへの外部アクセスをブロック リンクのコピーリンクがクリップボードにコピーされました!
OVN-Kubernetes は、Red Hat build of MicroShift ノードの外部から NodePort サービスにアクセスできるホストインターフェイスを制限しません。次の手順では、特定のホストインターフェイスで NodePort サービスをブロックし、外部アクセスを制限する方法を説明します。
前提条件
- root 権限を持つアカウント。
手順
次のコマンドを実行して、
NODEPORT変数を Kubernetes NodePort サービスに割り当てられたホストポート番号に変更します。export NODEPORT=30700
# export NODEPORT=30700Copy to Clipboard Copied! Toggle word wrap Toggle overflow INTERFACE_IP値を、ブロックするホストインターフェイスの IP アドレスに変更します。以下に例を示します。export INTERFACE_IP=192.168.150.33
# export INTERFACE_IP=192.168.150.33Copy to Clipboard Copied! Toggle word wrap Toggle overflow natテーブル PREROUTING チェーンに新しいルールを挿入して、宛先ポートと IP アドレスに一致するすべてのパケットをドロップします。以下に例を示します。sudo nft -a insert rule ip nat PREROUTING tcp dport $NODEPORT ip daddr $INTERFACE_IP drop
$ sudo nft -a insert rule ip nat PREROUTING tcp dport $NODEPORT ip daddr $INTERFACE_IP dropCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、新しいルールをリスト表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記新しく追加したルールの
handle番号をメモします。次の手順でhandle番号を削除する必要があります次のサンプルコマンドを使用してカスタムルールを削除します。
sudo nft -a delete rule ip nat PREROUTING handle 134
$ sudo nft -a delete rule ip nat PREROUTING handle 134Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.10. マルチキャスト DNS プロトコル リンクのコピーリンクがクリップボードにコピーされました!
マルチキャスト DNS プロトコル (mDNS) を使用することで、5353/UDP ポートで公開されているマルチキャストを使用した、ローカルエリアネットワーク (LAN) 内で名前解決とサービス検出が可能になります。
MicroShift には、権威 DNS サーバーを MicroShift のサービスに対してクライアントを参照するように再設定できないデプロイメントシナリオ向けに、埋め込みの mDNS サーバーが含まれています。埋め込みの DNS サーバーにより、MicroShift によって公開された .local ドメインが LAN 上の他の要素によって検出されるようになります。
2.11. 公開されたネットワークポートの監査 リンクのコピーリンクがクリップボードにコピーされました!
MicroShift では、次の場合にワークロードによってホストポートを開くことができます。ログを確認してネットワークサービスを表示できます。
2.11.1. hostNetwork リンクのコピーリンクがクリップボードにコピーされました!
Pod が hostNetwork:true で設定されている場合、Pod はホストネットワーク namespace で実行されています。この設定では、ホストポートを独立して開くことができます。MicroShift コンポーネントログを使用してこのケースを追跡することはできません。ポートは firewalld ルールの対象となります。firewalld でポートが開いている場合は、firewalld デバッグログでポートの開きを確認できます。
前提条件
- ビルドホストへの root ユーザーアクセス権がある。
手順
オプション: 次のコマンド例を使用して、
hostNetwork:trueパラメーターが ovnkube-node Pod に設定されていることを確認できます。sudo oc get pod -n openshift-ovn-kubernetes <ovnkube-node-pod-name> -o json | jq -r '.spec.hostNetwork' true
$ sudo oc get pod -n openshift-ovn-kubernetes <ovnkube-node-pod-name> -o json | jq -r '.spec.hostNetwork' trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、firewalld ログのデバッグを有効にします。
sudo vi /etc/sysconfig/firewalld
$ sudo vi /etc/sysconfig/firewalld FIREWALLD_ARGS=--debug=10Copy to Clipboard Copied! Toggle word wrap Toggle overflow firewalld サービスを再起動します。
sudo systemctl restart firewalld.service
$ sudo systemctl restart firewalld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow デバッグオプションが適切に追加されたことを確認するには、次のコマンドを実行します。
sudo systemd-cgls -u firewalld.service
$ sudo systemd-cgls -u firewalld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow firewalld デバッグログは、
/var/log/firewalldパスに保存されます。ポートオープンルールが追加されたときのログの例:
2023-06-28 10:46:37 DEBUG1: config.getZoneByName('public') 2023-06-28 10:46:37 DEBUG1: config.zone.7.addPort('8080', 'tcp') 2023-06-28 10:46:37 DEBUG1: config.zone.7.getSettings() 2023-06-28 10:46:37 DEBUG1: config.zone.7.update('...') 2023-06-28 10:46:37 DEBUG1: config.zone.7.Updated('public')2023-06-28 10:46:37 DEBUG1: config.getZoneByName('public') 2023-06-28 10:46:37 DEBUG1: config.zone.7.addPort('8080', 'tcp') 2023-06-28 10:46:37 DEBUG1: config.zone.7.getSettings() 2023-06-28 10:46:37 DEBUG1: config.zone.7.update('...') 2023-06-28 10:46:37 DEBUG1: config.zone.7.Updated('public')Copy to Clipboard Copied! Toggle word wrap Toggle overflow ポートオープンルールが削除されたときのログの例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.11.2. hostPort リンクのコピーリンクがクリップボードにコピーされました!
MicroShift で hostPort 設定ログにアクセスできます。次のログは、hostPort 設定の例です。
手順
次のコマンドを実行すると、ログにアクセスできます。
journalctl -u crio | grep "local port"
$ journalctl -u crio | grep "local port"Copy to Clipboard Copied! Toggle word wrap Toggle overflow ホストポートが開いている場合の CRI-O ログの例:
Jun 25 16:27:37 rhel92 crio[77216]: time="2023-06-25 16:27:37.033003098+08:00" level=info msg="Opened local port tcp:443"
$ Jun 25 16:27:37 rhel92 crio[77216]: time="2023-06-25 16:27:37.033003098+08:00" level=info msg="Opened local port tcp:443"Copy to Clipboard Copied! Toggle word wrap Toggle overflow ホストポートが閉じている場合の CRI-O ログの例:
Jun 25 16:24:11 rhel92 crio[77216]: time="2023-06-25 16:24:11.342088450+08:00" level=info msg="Closing host port tcp:443"
$ Jun 25 16:24:11 rhel92 crio[77216]: time="2023-06-25 16:24:11.342088450+08:00" level=info msg="Closing host port tcp:443"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.11.3. NodePort および LoadBalancer サービス リンクのコピーリンクがクリップボードにコピーされました!
OVN-Kubernetes は、NodePort および LoadBalancer サービスタイプのホストポートを開きます。これらのサービスは、ホストポートから Ingress トラフィックを取得し、それをノード IP アドレスに転送する iptables ルールを追加します。NodePort および LoadBalancer サービスのログを次の例に示します。
手順
ovnkube-masterPod の名前にアクセスするには、次のコマンドを実行します。oc get pods -n openshift-ovn-kubernetes | awk '/ovnkube-master/{print $1}'$ oc get pods -n openshift-ovn-kubernetes | awk '/ovnkube-master/{print $1}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow ovnkube-masterPod 名の例ovnkube-master-n2shv
ovnkube-master-n2shvCopy to Clipboard Copied! Toggle word wrap Toggle overflow ovnkube-masterPod を使用し、次のコマンド例を実行すると、NodePortおよびLoadBalancerサービスのログにアクセスできます。oc logs -n openshift-ovn-kubernetes <ovnkube-master-pod-name> ovnkube-master | grep -E "OVN-KUBE-NODEPORT|OVN-KUBE-EXTERNALIP"
$ oc logs -n openshift-ovn-kubernetes <ovnkube-master-pod-name> ovnkube-master | grep -E "OVN-KUBE-NODEPORT|OVN-KUBE-EXTERNALIP"Copy to Clipboard Copied! Toggle word wrap Toggle overflow NodePort サービス:
ホストポートが開いている場合の ovnkube-master Pod の ovnkube-master コンテナー内のログの例:
I0625 09:07:00.992980 2118395 iptables.go:27] Adding rule in table: nat, chain: OVN-KUBE-NODEPORT with args: "-p TCP -m addrtype --dst-type LOCAL --dport 32718 -j DNAT --to-destination 10.96.178.142:8081" for protocol: 0
$ I0625 09:07:00.992980 2118395 iptables.go:27] Adding rule in table: nat, chain: OVN-KUBE-NODEPORT with args: "-p TCP -m addrtype --dst-type LOCAL --dport 32718 -j DNAT --to-destination 10.96.178.142:8081" for protocol: 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow ホストポートが閉じている場合の ovnkube-master Pod の ovnkube-master コンテナー内のログの例:
Deleting rule in table: nat, chain: OVN-KUBE-NODEPORT with args: "-p TCP -m addrtype --dst-type LOCAL --dport 32718 -j DNAT --to-destination 10.96.178.142:8081" for protocol: 0
$ Deleting rule in table: nat, chain: OVN-KUBE-NODEPORT with args: "-p TCP -m addrtype --dst-type LOCAL --dport 32718 -j DNAT --to-destination 10.96.178.142:8081" for protocol: 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow LoadBalancer サービス:
ホストポートが開いている場合の ovnkube-master Pod の ovnkube-master コンテナー内のログの例:
I0625 09:34:10.406067 128902 iptables.go:27] Adding rule in table: nat, chain: OVN-KUBE-EXTERNALIP with args: "-p TCP -d 172.16.47.129 --dport 8081 -j DNAT --to-destination 10.43.114.94:8081" for protocol: 0
$ I0625 09:34:10.406067 128902 iptables.go:27] Adding rule in table: nat, chain: OVN-KUBE-EXTERNALIP with args: "-p TCP -d 172.16.47.129 --dport 8081 -j DNAT --to-destination 10.43.114.94:8081" for protocol: 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow ホストポートが閉じている場合の ovnkube-master Pod の ovnkube-master コンテナー内のログの例:
I0625 09:37:00.976953 128902 iptables.go:63] Deleting rule in table: nat, chain: OVN-KUBE-EXTERNALIP with args: "-p TCP -d 172.16.47.129 --dport 8081 -j DNAT --to-destination 10.43.114.94:8081" for protocol: 0
$ I0625 09:37:00.976953 128902 iptables.go:63] Deleting rule in table: nat, chain: OVN-KUBE-EXTERNALIP with args: "-p TCP -d 172.16.47.129 --dport 8081 -j DNAT --to-destination 10.43.114.94:8081" for protocol: 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第3章 ルーターの概要および設定 リンクのコピーリンクがクリップボードにコピーされました!
MicroShift を使用して、ルーターとルート許可ポリシーを設定するためのデフォルト設定とカスタム設定を学習します。
3.1. ルーターの設定について リンクのコピーリンクがクリップボードにコピーされました!
Ingress をオプションにするには、MicroShift Ingress ルーター設定を指定して、ネットワークトラフィックに公開されるポート (存在する場合) を管理できます。指定されたルーティングは、Ingress ロードバランシングの例です。
-
デフォルトの Ingress ルーターは常にオンになっており、
http: 80およびhttps: 443ポート上のすべての IP アドレスで実行されます。 - デフォルトのルーター設定では、任意の namespace にアクセスできます。
MicroShift 上で実行されるアプリケーションによっては、デフォルトのルーターは必要なく、代わりに独自のルーターが作成される場合があります。ルーターを設定して、Ingress と namespace アクセスの両方を制御できます。
設定を開始する前に oc get deployment -n openshift-ingress コマンドを使用して MicroShift インストールにデフォルトルーターが存在するかどうかを確認できます。このコマンドは、次の出力を返します。
NAME READY UP-TO-DATE AVAILABLE AGE router-default 1/1 1 1 2d23h
NAME READY UP-TO-DATE AVAILABLE AGE
router-default 1/1 1 1 2d23h
3.1.1. ルーターの設定および有効な値 リンクのコピーリンクがクリップボードにコピーされました!
Ingress ルーターの設定は、以下のパラメーターおよび有効な値で構成されます。
config.yaml ルーター設定の例
- 1
ingress.listenAddressの値は、デフォルトでホストのネットワーク全体に設定されます。有効なカスタマイズ可能な値は、単一の IP アドレスまたはホスト名、あるいは IP アドレスまたはホスト名のリストです。- 2
- 両方のポートエントリーの有効な値は、1 - 65535 の範囲にある単一の一意のポートです。
ports.httpおよびports.httpsフィールドの値は、同じにすることはできません。 - 3
- デフォルト値。ルートが、複数の namespace において名前が同じでパスが異なる要求を許可します。
- 4
- デフォルト値。Ingress ポートを開いたままにするには、
Managedが必要です。
デフォルトの MicroShift ルーターとルーターを有効化二設定することで、firewalld サービスはバイパスされます。ルーターがアクティブな場合にネットワークポリシーを設定し、Ingress および Egress を制御する必要があります。
3.2. ルーターの無効化 リンクのコピーリンクがクリップボードにコピーされました!
MicroShift Pod がサウスバウンドの運用システムとノースバウンドのクラウドデータシステムのみに接続する必要がある産業用 IoT スペースなどのユースケースでは、インバウンドサービスは必要ありません。このような Egress のみのユースケースでルーターを無効にするには、この手順を使用します。
前提条件
- MicroShift をインストールしている。
-
MicroShift の
config.yamlファイルが作成されている。 -
OpenShift CLI (
oc) がインストールされている。
MicroShift config.yaml ファイルで指定する必要のある設定をすべて同時に完了すると、システムの再起動を最小限に抑えることができます。
手順
次の例に示すように、MicroShift
config.yamlファイルのingress.statusフィールドの値をRemovedに更新します。config.yamlIngress スタンザの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 値が
Removedに設定されている場合、ingress.portsにリストされているポートは自動的に閉じられます。Ingressスタンザ内のその他の設定 (routeAdmissionPolicy.namespaceOwnershipフィールドの値など) は無視されます。
次のコマンドを実行して、MicroShift サービスを再起動します。
sudo systemctl restart microshift
$ sudo systemctl restart microshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記MicroShift サービスは、再起動時に現在の設定を出力します。
検証
システムが再起動されると、次のコマンドを実行して、ルーターが削除され、Ingress が停止されていることを確認します。
oc -n openshift-ingress get svc
$ oc -n openshift-ingress get svcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 予想される出力
No resources found in openshift-ingress namespace.
No resources found in openshift-ingress namespace.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3. ルーター Ingress の設定 リンクのコピーリンクがクリップボードにコピーされました!
MicroShift アプリケーションがデータトラフィックのみをリッスンする必要がある場合は、listenAddress 設定を指定してデバイスを分離できます。ネットワーク接続用の特定のポートと IP アドレスを設定することもできます。ユースケースに合わせてエンドポイント設定をカスタマイズするために必要な組み合わせを使用します。
3.3.1. ルーターポートの設定 リンクのコピーリンクがクリップボードにコピーされました!
ルーター Ingress フィールドを設定することで、デバイスが使用するポートを制御できます。
前提条件
- MicroShift をインストールしている。
-
MicroShift の
config.yamlファイルが作成されている。 -
OpenShift CLI (
oc) がインストールされている。
MicroShift config.yaml ファイルで指定する必要のある設定をすべて同時に完了すると、システムの再起動を最小限に抑えることができます。
手順
ingress.ports.httpおよびingress.ports.httpsフィールドの MicroShiftconfig.yamlポート値を、使用するポートに更新します。config.yamlルーター設定の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、MicroShift サービスを再起動します。
sudo systemctl restart microshift
$ sudo systemctl restart microshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3.2. ルーターの IP アドレスの設定 リンクのコピーリンクがクリップボードにコピーされました!
特定の IP アドレスを設定することで、ルーターへのネットワークトラフィックを制限できます。以下に例を示します。
- ルーターが内部ネットワークでのみアクセス可能で、ノースバウンドのパブリックネットワークではアクセスできないユースケース
- ルーターがノースバウンドのパブリックネットワークからのみアクセス可能で、内部ネットワークからはアクセスできないユースケース
- ルーターが内部ネットワークとノースバウンドのパブリックネットワークの両方から到達可能であるが、別々の IP アドレス上にある場合のユースケース
前提条件
- MicroShift をインストールしている。
-
MicroShift の
config.yamlファイルが作成されている。 -
OpenShift CLI (
oc) がインストールされている。
MicroShift config.yaml ファイルで指定する必要のある設定をすべて同時に完了すると、システムの再起動を最小限に抑えることができます。
手順
要件に応じて、次の例に示すように、MicroShift
config.yamlのingress.listenAddressフィールドのリストを更新します。デフォルトのルーター IP アドレスリスト
# ... ingress: listenAddress: - "<host_network>" # ...# ... ingress: listenAddress: - "<host_network>"1 # ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
ingress.listenAddressの値は、デフォルトでホストのネットワーク全体に設定されます。デフォルトのリストを引き続き使用するには、MicroShiftconfig.yamlファイルからlisten.Addressフィールドを削除します。このパラメーターをカスタマイズするには、リストを使用します。リストには、単一の IP アドレスまたは NIC 名、あるいは複数の IP アドレスと NIC 名を含めることができます。
重要config.yamlファイルを使用する場合は、listenAddressパラメーターを削除するか、リスト形式で値を追加する必要があります。フィールドを空白のままにしないでください。空白のままにすると、再起動時に MicroShift がクラッシュします。単一のホスト IP アドレスを持つルーターの設定例
# ... ingress: listenAddress: - 10.2.1.100 # ...# ... ingress: listenAddress: - 10.2.1.100 # ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow IP アドレスと NIC 名を組み合わせたルーター設定の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、MicroShift サービスを再起動します。
sudo systemctl restart microshift
$ sudo systemctl restart microshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
-
設定が適用されていることを確認するには、
ingress.listenAddressの IP アドレスに到達可能であることを確認してから、これらのロードバランサー IP アドレスのいずれかを宛先とするルートをcurlで取得します。
3.5. ルートの受付ポリシーの設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、MicroShift は複数の namespace 内のルートが同じホスト名を使用することを許可します。ルートのポリシーを設定することで、namespace が異なる同じホスト名をルートが要求しないようにできます。
前提条件
- MicroShift をインストールしている。
-
MicroShift の
config.yamlファイルが作成されている。 OpenShift CLI (
oc) がインストールされている。ヒントMicroShift
config.yamlファイルで指定する必要のある設定をすべて同時に完了すると、システムの再起動を最小限に抑えることができます。
手順
異なる namespace 内のルートが同じホスト名を要求しないようにするには、MicroShift
config.yamlファイルでnamespaceOwnershipフィールドの値をStrictに更新します。以下の例を参照してください。config.yamlルート受付ポリシーの例# ... ingress: routeAdmissionPolicy: namespaceOwnership: Strict # ...# ... ingress: routeAdmissionPolicy: namespaceOwnership: Strict1 # ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 異なる namespace のルートが同じホストを要求しないようにします。有効な値は
StrictおよびInterNamespaceAllowedです。カスタマイズされたconfig.yaml内の値を削除すると、InterNamespaceAllowed値が自動的に設定されます。
設定を適用するには、次のコマンドを実行して MicroShift サービスを再起動します。
sudo systemctl restart microshift
$ sudo systemctl restart microshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第4章 ネットワークポリシー リンクのコピーリンクがクリップボードにコピーされました!
4.1. ネットワークポリシーについて リンクのコピーリンクがクリップボードにコピーされました!
MicroShift でネットワークポリシーがどのように機能し、ノード内の Pod へのネットワークトラフィックを制限または許可するかを説明します。
4.1.1. MicroShift でのネットワークポリシーの仕組み リンクのコピーリンクがクリップボードにコピーされました!
MicroShift のデフォルトの OVN-Kubernetes Container Network Interface (CNI) プラグインを使用するノードでは、ネットワーク分離は、ホスト上で設定されている firewalld と MicroShift 内で作成された NetworkPolicy オブジェクトの両方によって制御されます。firewalld と NetworkPolicy の同時使用がサポートされています。
-
ネットワークポリシーは、OVN-Kubernetes によって制御されるトラフィックの境界内でのみ機能するため、
hostPort/hostNetworkが有効な Pod を除くあらゆる状況に適用できます。 -
また、firewalld 設定は、
hostPort/hostNetworkが有効な Pod には適用されません。 -
firewalld ルールは、
NetworkPolicyが適用される前に実行されます。
ネットワークポリシーは、ホストのネットワーク namespace には適用されません。ホストネットワークが有効にされている Pod はネットワークポリシールールによる影響を受けません。ただし、ホストネットワークを使用する Pod に接続する Pod は、ネットワークポリシールールの影響を受ける可能性があります。
ネットワークポリシーではローカルホストからのトラフィックをブロックできません。
デフォルトでは、MicroShift ノード内のすべての Pod は、他の Pod およびネットワークエンドポイントからアクセスできます。ノードで 1 つ以上の Pod を分離するには、許可される受信接続を示す NetworkPolicy オブジェクトを作成してください。NetworkPolicy オブジェクトを作成および削除できます。
Pod が 1 つ以上の NetworkPolicy オブジェクトのセレクターと一致する場合、Pod はそれらの NetworkPolicy オブジェクトの少なくとも 1 つにより許可された接続だけを使用できます。NetworkPolicy オブジェクトによって選択されていない Pod は完全にアクセス可能です。
ネットワークポリシーは、TCP、UDP、ICMP、および SCTP プロトコルにのみ適用されます。他のプロトコルは影響を受けません。
以下のサンプル NetworkPolicy オブジェクトは、複数の異なるシナリオをサポートすることを示しています。
すべてのトラフィックを拒否します。
プロジェクトに deny by default (デフォルトで拒否) を実行させるには、すべての Pod に一致するが、トラフィックを一切許可しない
NetworkPolicyオブジェクトを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow MicroShift の Ingress であるデフォルトルーターからの接続を許可します。
MicroShift デフォルトルーターからの接続を許可するには、次の
NetworkPolicyオブジェクトを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 同じ namespace 内の Pod からの接続のみを受け入れます。
Pod が同じ namespace 内の他の Pod からの接続を受け入れるが、他の namespace 内の Pod からの接続はすべて拒否するようにするには、次の
NetworkPolicyオブジェクトを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod ラベルに基づいて HTTP および HTTPS トラフィックのみを許可します。
特定のラベル (以下の例の
role=frontend) の付いた Pod への HTTP および HTTPS アクセスのみを有効にするには、以下と同様のNetworkPolicyオブジェクトを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow namespace および Pod セレクターの両方を使用して接続を受け入れます。
namespace と Pod セレクターを組み合わせてネットワークトラフィックのマッチングをするには、以下と同様の
NetworkPolicyオブジェクトを使用できます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
NetworkPolicy オブジェクトは加算されるものです。つまり、複数の NetworkPolicy オブジェクトを組み合わせて複雑なネットワーク要件を満すことができます。
たとえば、先の例で定義された NetworkPolicy オブジェクトの場合、allow-same-namespace および allow-http-and-https ポリシーの両方を定義できます。この設定により、role=frontend ラベルの付いた Pod は各ポリシーで許可されている接続をすべて受け入れることができます。つまり、同じ namespace の Pod からのすべてのポート、およびすべての namespace の Pod からのポート 80 および 443 での接続を受け入れます。
4.1.2. OVN-Kubernetes ネットワークプラグインによるネットワークポリシーの最適化 リンクのコピーリンクがクリップボードにコピーされました!
ネットワークポリシーを設計する場合は、以下のガイドラインを参照してください。
-
同じ
spec.podSelector仕様を持つネットワークポリシーの場合、ingressルールまたはegressルールを持つ複数のネットワークポリシーを使用するよりも、複数のIngressルールまたはegressルールを持つ 1 つのネットワークポリシーを使用する方が効率的です。 podSelectorまたはnamespaceSelector仕様に基づくすべてのIngressまたはegressルールは、number of pods selected by network policy + number of pods selected by ingress or egress ruleに比例する数の OVS フローを生成します。そのため、Pod ごとに個別のルールを作成するのではなく、1 つのルールで必要な数の Pod を選択できるpodSelectorまたはnamespaceSelector仕様を使用することが推奨されます。たとえば、以下のポリシーには 2 つのルールが含まれています。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のポリシーは、上記と同じ 2 つのルールを 1 つのルールとして表現しています。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 同じガイドラインが
spec.podSelector仕様に適用されます。異なるネットワークポリシーに同じingressルールまたはegressルールがある場合、共通のspec.podSelector仕様で 1 つのネットワークポリシーを作成する方が効率的な場合があります。たとえば、以下の 2 つのポリシーには異なるルールがあります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のネットワークポリシーは、上記と同じ 2 つのルールを 1 つのルールとして表現しています。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この最適化は、複数のセレクターを 1 つのセレクターとして表現する場合に限り適用できます。セレクターが異なるラベルに基づいている場合、この最適化は適用できない可能性があります。その場合は、ネットワークポリシーの最適化に特化して新規ラベルをいくつか適用することを検討してください。
4.1.2.1. OVN-Kubernetes の NetworkPolicy CR と外部 IP リンクのコピーリンクがクリップボードにコピーされました!
OVN-Kubernetes では、NetworkPolicy カスタムリソース (CR) によって厳密な分離ルールが適用されます。サービスが外部 IP を使用して公開されている場合、トラフィックを許可するように明示的に設定されていない限り、ネットワークポリシーによって他の namespace からのアクセスがブロックされる可能性があります。
namespace をまたいで外部 IP へのアクセスを許可するには、必要な namespace からの Ingress を明示的に許可し、指定されたサービスポートへのトラフィックが許可されるようにする NetworkPolicy CR を作成します。必要なポートへのトラフィックを許可しなければ、アクセスが制限される可能性があります。
出力例
ここでは、以下のようになります。
<policy_name>- ポリシーの名前を指定します。
<my_namespace>- ポリシーがデプロイされる namespace の名前を指定します。
詳細は、「ネットワークポリシーについて」を参照してください。
4.2. ネットワークポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
namespace のネットワークポリシーを作成できます。
4.2.1. サンプル NetworkPolicy オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
以下は、サンプル NetworkPolicy オブジェクトにアノテーションを付けます。
4.2.2. CLI を使用したネットワークポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
クラスターの namespace に許可される Ingress または Egress ネットワークトラフィックを記述する詳細なルールを定義するには、ネットワークポリシーを作成できます。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 - ネットワークポリシーが適用される namespace で作業している。
手順
ポリシールールを作成します。
<policy_name>.yamlファイルを作成します。touch <policy_name>.yaml
$ touch <policy_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<policy_name>- ネットワークポリシーファイル名を指定します。
作成したばかりのファイルで、以下の例のようなネットワークポリシーを定義します。
すべての namespace のすべての Pod から Ingress を拒否します。
これは基本的なポリシーであり、他のネットワークポリシーの設定によって許可されたクロス Pod トラフィック以外のすべてのクロス Pod ネットワーキングをブロックします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 同じ namespace のすべての Pod から Ingress を許可する
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 特定の namespace から 1 つの Pod への Ingress トラフィックを許可する
このポリシーは、
namespace-yで実行されている Pod からpod-aラベルを持つ Pod へのトラフィックを許可します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ネットワークポリシーオブジェクトを作成するには、以下のコマンドを入力します。成功した出力には、ポリシーオブジェクトの名前と
createdステータスがリスト表示されます。oc apply -f <policy_name>.yaml -n <namespace>
$ oc apply -f <policy_name>.yaml -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<policy_name>- ネットワークポリシーファイル名を指定します。
<namespace>- オプションのパラメーター。現在の namespace とは異なる namespace でオブジェクトを定義した場合、パラメーターは namespace を指定します。
成功した出力には、ポリシーオブジェクトの名前と
createdステータスがリスト表示されます。
4.2.3. デフォルトの全拒否ネットワークポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
このポリシーは、デプロイされた他のネットワークポリシーの設定によって許可されたネットワークトラフィックと、ホストネットワークを使用する Pod 間のトラフィック以外のすべての Pod 間ネットワークをブロックします。この手順では、my-project namespace に deny-by-default ポリシーを適用することにより、強力な拒否ポリシーを強制します。
トラフィック通信を許可する NetworkPolicy カスタムリソース (CR) を設定しない場合、次のポリシーによってクラスター全体で通信問題が発生する可能性があります。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 - ネットワークポリシーが適用される namespace で作業している。
手順
すべての namespace におけるすべての Pod からの Ingress を拒否する
deny-by-defaultポリシーを定義する次の YAML を作成します。YAML をdeny-by-default.yamlファイルに保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、ポリシーを適用します。成功した出力には、ポリシーオブジェクトの名前と
createdステータスがリスト表示されます。oc apply -f deny-by-default.yaml
$ oc apply -f deny-by-default.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 成功した出力には、ポリシーオブジェクトの名前と
createdステータスがリスト表示されます。
4.2.4. 外部クライアントからのトラフィックを許可するネットワークポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
deny-by-default ポリシーを設定すると、外部クライアントからラベル app=web を持つ Pod へのトラフィックを許可するポリシーの設定に進むことができます。
firewalld ルールは、NetworkPolicy が適用される前に実行されます。
この手順に従って、パブリックインターネットから直接、またはロードバランサーを使用して Pod にアクセスすることにより、外部サービスを許可するポリシーを設定します。トラフィックは、ラベル app=web を持つ Pod にのみ許可されます。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 - ネットワークポリシーが適用される namespace で作業している。
手順
パブリックインターネットからのトラフィックが直接、またはロードバランサーを使用して Pod にアクセスできるようにするポリシーを作成します。YAML を
web-allow-external.yamlファイルに保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、ポリシーを適用します。成功した出力には、ポリシーオブジェクトの名前と
createdステータスがリスト表示されます。oc apply -f web-allow-external.yaml
$ oc apply -f web-allow-external.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 成功した出力には、ポリシーオブジェクトの名前と
createdステータスがリスト表示されます。
4.2.5. すべての namespace からアプリケーションへのトラフィックを許可するネットワークポリシーを作成する リンクのコピーリンクがクリップボードにコピーされました!
この手順に従って、すべての namespace 内のすべての Pod から特定のアプリケーションへのトラフィックを許可するポリシーを設定します。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 - ネットワークポリシーが適用される namespace で作業している。
手順
すべての namespace のすべての Pod から特定のアプリケーションへのトラフィックを許可するポリシーを作成します。YAML を
web-allow-all-namespaces.yamlファイルに保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記デフォルトでは、ポリシーオブジェクトで
namespaceSelectorパラメーターを指定しないと、namespace は選択されません。これは、そのネットワークポリシーがデプロイされている namespace からのみのトラフィックを許可することを意味します。次のコマンドを入力して、ポリシーを適用します。成功した出力には、ポリシーオブジェクトの名前と
createdステータスがリスト表示されます。oc apply -f web-allow-all-namespaces.yaml
$ oc apply -f web-allow-all-namespaces.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 成功した出力には、ポリシーオブジェクトの名前と
createdステータスがリスト表示されます。
検証
次のコマンドを入力して、
defaultnamespace で Web サービスを開始します。oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
$ oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
alpineイメージをsecondarynamespace にデプロイし、シェルを開始します。oc run test-$RANDOM --namespace=secondary --rm -i -t --image=alpine -- sh
$ oc run test-$RANDOM --namespace=secondary --rm -i -t --image=alpine -- shCopy to Clipboard Copied! Toggle word wrap Toggle overflow シェルで次のコマンドを実行し、サービスがリクエストを許可することを確認します。
wget -qO- --timeout=2 http://web.default
# wget -qO- --timeout=2 http://web.defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 予想される出力
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.6. namespace からアプリケーションへのトラフィックを許可するネットワークポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
特定の namespace からラベル app=web を持つ Pod へのトラフィックを許可するポリシーを設定するには、次の手順に従います。以下の場合にこれを行うことができます。
- 実稼働データベースへのトラフィックを、実稼働ワークロードがデプロイされている namespace のみに制限します。
- 特定の namespace にデプロイされた監視ツールを有効にして、現在の namespace からメトリクスをスクレイピングします。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 - ネットワークポリシーが適用される namespace で作業している。
手順
ラベルが
purpose=productionの特定の namespace 内にあるすべての Pod からのトラフィックを許可するポリシーを作成します。YAML をweb-allow-prod.yamlファイルに保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、ポリシーを適用します。成功した出力には、ポリシーオブジェクトの名前と
createdステータスがリスト表示されます。oc apply -f web-allow-prod.yaml
$ oc apply -f web-allow-prod.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 成功した出力には、ポリシーオブジェクトの名前と
createdステータスがリスト表示されます。
検証
次のコマンドを入力して、
defaultnamespace で Web サービスを開始します。oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
$ oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
prodnamespace を作成します。oc create namespace prod
$ oc create namespace prodCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
prodnamespace にラベルを付けます。oc label namespace/prod purpose=production
$ oc label namespace/prod purpose=productionCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
devnamespace を作成します。oc create namespace dev
$ oc create namespace devCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
devnamespace にラベルを付けます。oc label namespace/dev purpose=testing
$ oc label namespace/dev purpose=testingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
alpineイメージをdevnamespace にデプロイし、シェルを開始します。oc run test-$RANDOM --namespace=dev --rm -i -t --image=alpine -- sh
$ oc run test-$RANDOM --namespace=dev --rm -i -t --image=alpine -- shCopy to Clipboard Copied! Toggle word wrap Toggle overflow シェルで次のコマンドを実行し、ブロックされた要求の理由を確認します。たとえば、予想される出力には
wget: download timed outが表示されます。wget -qO- --timeout=2 http://web.default
# wget -qO- --timeout=2 http://web.defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
alpineイメージをprodnamespace にデプロイし、シェルを開始します。oc run test-$RANDOM --namespace=prod --rm -i -t --image=alpine -- sh
$ oc run test-$RANDOM --namespace=prod --rm -i -t --image=alpine -- shCopy to Clipboard Copied! Toggle word wrap Toggle overflow シェルで次のコマンドを実行し、リクエストが許可されていることを確認します。
wget -qO- --timeout=2 http://web.default
# wget -qO- --timeout=2 http://web.defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 予想される出力
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3. ネットワークポリシーの編集 リンクのコピーリンクがクリップボードにコピーされました!
namespace の既存のネットワークポリシーを編集できます。通常の編集には、ポリシーが適用される Pod、許可される Ingress トラフィック、トラフィックを受け入れる宛先ポートへの変更が含まれる場合があります。apiVersion、kind、および name フィールドは、リソース自体を定義するためのもので、NetworkPolicy オブジェクトを編集するときは、これらを変更しないでください。
4.3.1. ネットワークポリシーの編集 リンクのコピーリンクがクリップボードにコピーされました!
namespace のネットワークポリシーを編集できます。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 - ネットワークポリシーが存在する namespace で作業している。
手順
オプション: namespace のネットワークポリシーオブジェクトをリスト表示するには、以下のコマンドを入力します。
oc get networkpolicy
$ oc get networkpolicyCopy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<namespace>- オプション: オブジェクトが現在の namespace 以外の namespace に定義されている場合は namespace を指定します。
ネットワークポリシーオブジェクトを編集します。
ネットワークポリシーの定義をファイルに保存した場合は、ファイルを編集して必要な変更を加えてから、以下のコマンドを入力します。
oc apply -n <namespace> -f <policy_file>.yaml
$ oc apply -n <namespace> -f <policy_file>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<namespace>- オプション: オブジェクトが現在の namespace 以外の namespace に定義されている場合は namespace を指定します。
<policy_file>- ネットワークポリシーを含むファイルの名前を指定します。
ネットワークポリシーオブジェクトを直接更新する必要がある場合、以下のコマンドを入力できます。
oc edit networkpolicy <policy_name> -n <namespace>
$ oc edit networkpolicy <policy_name> -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<policy_name>- ネットワークポリシーの名前を指定します。
<namespace>- オプション: オブジェクトが現在の namespace 以外の namespace に定義されている場合は namespace を指定します。
ネットワークポリシーオブジェクトが更新されていることを確認します。
oc describe networkpolicy <policy_name> -n <namespace>
$ oc describe networkpolicy <policy_name> -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<policy_name>- ネットワークポリシーの名前を指定します。
<namespace>- オプション: オブジェクトが現在の namespace 以外の namespace に定義されている場合は namespace を指定します。
4.3.2. サンプル NetworkPolicy オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
以下は、サンプル NetworkPolicy オブジェクトにアノテーションを付けます。
4.4. ネットワークポリシーの削除 リンクのコピーリンクがクリップボードにコピーされました!
namespace からネットワークポリシーを削除できます。
4.4.1. CLI を使用したネットワークポリシーの削除 リンクのコピーリンクがクリップボードにコピーされました!
namespace のネットワークポリシーを削除できます。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 - ネットワークポリシーが存在する namespace で作業している。
手順
ネットワークポリシーオブジェクトを削除するには、以下のコマンドを入力します。成功した出力には、ポリシーオブジェクトの名前と
deletedステータスがリスト表示されます。oc delete networkpolicy <policy_name> -n <namespace>
$ oc delete networkpolicy <policy_name> -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<policy_name>- ネットワークポリシーの名前を指定します。
<namespace>- オプションのパラメーター。現在の namespace とは異なる namespace でオブジェクトを定義した場合、パラメーターは namespace を指定します。
成功した出力には、ポリシーオブジェクトの名前と
deletedステータスがリスト表示されます。
4.5. ネットワークポリシーの表示 リンクのコピーリンクがクリップボードにコピーされました!
namespace のネットワークポリシーを表示するには、次の手順を使用します。
4.5.1. CLI を使用したネットワークポリシーの表示 リンクのコピーリンクがクリップボードにコピーされました!
namespace のネットワークポリシーを検査できます。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 - ネットワークポリシーが存在する namespace で作業している。
手順
namespace のネットワークポリシーを一覧表示します。
namespace で定義されたネットワークポリシーオブジェクトを表示するには、以下のコマンドを実行します。
oc get networkpolicy
$ oc get networkpolicyCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 特定のネットワークポリシーを検査するには、以下のコマンドを入力します。
oc describe networkpolicy <policy_name> -n <namespace>
$ oc describe networkpolicy <policy_name> -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<policy_name>- 検査するネットワークポリシーの名前を指定します。
<namespace>- オプション: オブジェクトが現在の namespace 以外の namespace に定義されている場合は namespace を指定します。
以下に例を示します。
oc describe networkpolicy allow-same-namespace
$ oc describe networkpolicy allow-same-namespaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc describeコマンドの出力Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第5章 複数ネットワーク リンクのコピーリンクがクリップボードにコピーされました!
5.1. 複数ネットワークの使用について リンクのコピーリンクがクリップボードにコピーされました!
デフォルトの OVN-Kubernetes Container Network Interface (CNI) プラグインに加えて、MicroShift Multus CNI を使用して他の CNI プラグインをチェーンすることもできます。MicroShift Multus のインストールおよび使用はオプションです。
5.1.1. MicroShift のセカンダリーネットワーク リンクのコピーリンクがクリップボードにコピーされました!
ノードのインストール中、設定をカスタマイズしない限り、default の Pod ネットワークはデフォルト値で設定されます。デフォルトのネットワークは、ノードの通常のネットワークトラフィックをすべて処理します。MicroShift Multus CNI プラグインを使用すると、他のネットワークの Pod に追加のインターフェイスを追加できます。これにより、スイッチングやルーティングなどのネットワーク機能を提供する Pod を設定する際に柔軟性が得られます。
5.1.1.1. ネットワーク分離のためにサポートされているセカンダリーネットワーク リンクのコピーリンクがクリップボードにコピーされました!
MicroShift 4.20 では、次のセカンダリーネットワークがサポートされています。
- Bridge: 同じホスト上の Pod が相互に、またホストと通信できるようにします。
IPVLAN: ホスト上の Pod が他のホストと通信できるようにします。
- これは、MACVLAN ベースのセカンダリーネットワークに似ています。
- MACVLAN ベースのセカンダリーネットワークとは異なり、各 Pod は親の物理ネットワークインターフェイスと同じ MAC アドレスを共有します。
- MACVLAN: ホスト上の Pod が物理ネットワークインターフェイスを使用して他のホストや他のホスト上の Pod と通信できるようにします。MACVLAN ベースのセカンダリーネットワークに割り当てられる各 Pod には固有の MAC アドレスが割り当てられます。
セカンダリーネットワークのネットワークポリシーの設定はサポートされていません。
5.1.1.2. ユースケース: ネットワーク分離のためのセカンダリーネットワーク リンクのコピーリンクがクリップボードにコピーされました!
コントロールプレーンとデータプレーンの分離など、ネットワークの分離が必要な状況では、セカンダリーネットワークを使用できます。たとえば、Pod がホスト上のネットワークにアクセスし、エッジにデプロイされたデバイスと通信できるようにする場合は、セカンダリーインターフェイスを設定できます。これらのエッジデバイスは、分離された Operator ネットワーク上にあるか、定期的に切断される可能性があります。
トラフィックの分離は、以下のようなパフォーマンスおよびセキュリティー関連の理由で必要になります。
- パフォーマンス
- 2 つの異なるプレーンでトラフィックを送信して、各プレーンのトラフィック量を管理できます。
- セキュリティー
- 機密トラフィックは、セキュリティー上の考慮に基づいて管理されているネットワークに送信でき、テナントまたはカスタマー間で共有できないプライベートを分離できます。
Multus CNI プラグインは、MicroShift サービスの起動時にデプロイされます。したがって、MicroShift の起動後に microshift-multus RPM パッケージを追加する場合は、ホストの再起動が必要です。再起動すると、すべてのコンテナーが Multus アノテーション付きで再作成されます。
5.1.1.3. セカンダリーネットワークの実装方法 リンクのコピーリンクがクリップボードにコピーされました!
ノード内のすべての Pod は、ノード全体の接続を維持するために、ノード全体のデフォルトネットワークを引き続き使用します。すべての Pod には、ノード全体の Pod ネットワークに割り当てられる eth0 インターフェイスがあります。
-
oc get pod <pod_name> -o=jsonpath='{ .metadata.annotations.k8s\.v1\.cni\.cncf\.io/network-status }'コマンドを使用して、Pod のインターフェイスを表示できます。 -
MicroShift Multus CNI を使用するセカンダリーネットワークインターフェイスを追加すると、
net1、net2、…、netNという名前が付けられます。 - CNI 設定は、MicroShift Multus DaemonSet の起動時に作成されます。この設定は自動生成され、デフォルトの委譲であるプライマリー CNI が含まれます。MicroShift の場合、デフォルトの CNI は OVN-Kubernetes です。
5.1.1.4. Pod にセカンダリーネットワークを接続する方法 リンクのコピーリンクがクリップボードにコピーされました!
セカンダリーネットワークインターフェイスを Pod に接続するには、インターフェイスの接続方法を定義する設定を作成して適用する必要があります。
- 使用するセカンダリーネットワークを設定する必要があります。ネットワークにはそれぞれ違いがあるため、デフォルトの設定はありません。
-
NetworkAttachmentDefinitionカスタムリソース (CR) を使用して各インターフェイスを指定するには、YAML マニフェストを適用する必要があります。これらの各 CR 内の設定は、そのインターフェイスがどのように作成されるかを定義します。 CRI-O は Multus を使用するように設定する必要があります。デフォルト設定は
microshift-multusRPM に含まれています。- Multus CNI が既存の MicroShift インスタンスにインストールされている場合は、ホストを再起動する必要があります。
- Multus CNI が MicroShift と一緒にインストールされている場合は、CR と Pod を追加してから MicroShift サービスを開始できます。このシナリオではホストを再起動する必要はありません。
5.1.1.5. セカンダリーネットワークタイプの設定 リンクのコピーリンクがクリップボードにコピーされました!
次のセクションでは、セカンダリーネットワーク用の特定の設定フィールドを説明します。
5.1.2. 実行中のノードへの Multus CNI プラグインのインストール リンクのコピーリンクがクリップボードにコピーされました!
高性能ネットワーク設定のために Pod に追加のネットワークを接続する場合は、MicroShift Multus RPM パッケージをインストールできます。インストール後、Multus アノテーションを持つすべての Pod を再作成するには、ホストを再起動する必要があります。
Multus CNI プラグインのアンインストールはサポートされていません。
前提条件
- ホストへの root アクセス権限がある。
手順
次のコマンドを実行して、Multus RPM パッケージをインストールします。
sudo dnf install microshift-multus
$ sudo dnf install microshift-multusCopy to Clipboard Copied! Toggle word wrap Toggle overflow ヒントここで追加のネットワーク用のカスタムリソース (CR) を作成すると、1 回の再起動でインストールを完了し、設定を適用できます。
パッケージマニフェストをアクティブなノードに適用するには、次のコマンドを実行してホストを再起動します。
sudo systemctl restart
$ sudo systemctl restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
再起動後、次のコマンドを実行して、Multus CNI プラグインコンポーネントが作成されていることを確認します。
oc get pod -A | grep multus
$ oc get pod -A | grep multusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
openshift-multus dhcp-daemon-ktzqf 1/1 Running 0 45h openshift-multus multus-4frf4 1/1 Running 0 45h
openshift-multus dhcp-daemon-ktzqf 1/1 Running 0 45h openshift-multus multus-4frf4 1/1 Running 0 45hCopy to Clipboard Copied! Toggle word wrap Toggle overflow
次のステップ
- まだ行っていない場合は、使用する追加のネットワークを設定して適用します。
- 作成された CR を使用するアプリケーションをデプロイします。
5.1.3. ブリッジセカンダリーネットワークの設定 リンクのコピーリンクがクリップボードにコピーされました!
次のオブジェクトは、Bridge CNI プラグインの設定パラメーターを説明します。
| フィールド | 型 | 説明 |
|---|---|---|
|
|
|
CNI 仕様のバージョン。値 |
|
|
|
設定する CNI プラグインの名前: |
|
|
| IPAM CNI プラグインの設定オブジェクト。プラグインは、アタッチメント定義への IP アドレスの割り当てを管理します。 |
|
|
|
オプション: 使用する仮想ブリッジの名前を指定します。ブリッジインターフェイスがホストに存在しない場合は、これが作成されます。デフォルト値は |
|
|
|
オプション: 仮想ネットワークから外すトラフィックの IP マスカレードを有効にするには、 |
|
|
|
オプション: IP アドレスをブリッジに割り当てるには |
|
|
|
オプション: ブリッジを仮想ネットワークのデフォルトゲートウェイとして設定するには、 |
|
|
|
オプション: 仮想ブリッジの事前に割り当てられた IP アドレスの割り当てを許可するには、 |
|
|
|
オプション: 仮想ブリッジが受信時に使用した仮想ポートでイーサネットフレームを送信できるようにするには、 |
|
|
|
オプション: ブリッジで無作為検出モード (Promiscuous Mode) を有効にするには、 |
|
|
| オプション: 最大転送単位 (MTU) を指定された値に設定します。デフォルト値はカーネルによって自動的に設定されます。 |
|
|
|
オプション: コンテナー側の |
|
|
|
オプション: MAC スプーフィングチェックを有効にして、コンテナーから発信されるトラフィックをインターフェイスの MAC アドレスに制限します。デフォルト値は |
5.1.3.1. ブリッジ CNI プラグインの設定例 リンクのコピーリンクがクリップボードにコピーされました!
次の例では、MicroShift Multus CNI で使用するために bridge-conf という名前のセカンダリーネットワークを設定します。
5.1.4. IPVLAN セカンダリーネットワークの設定 リンクのコピーリンクがクリップボードにコピーされました!
次のオブジェクトは、IPVLAN、ipvlan、CNI プラグインの設定パラメーターを示しています。
| フィールド | 型 | 説明 |
|---|---|---|
|
|
|
CNI 仕様のバージョン。値 |
|
|
|
CNO 設定に以前に指定した |
|
|
|
設定する CNI プラグインの名前: |
|
|
| IPAM CNI プラグインの設定オブジェクト。プラグインは、アタッチメント定義への IP アドレスの割り当てを管理します。これは、プラグインが連鎖している場合を除き必要です。 |
|
|
|
オプション: 仮想ネットワークの操作モードを指定します。この値は、 |
|
|
|
オプション: ネットワーク割り当てに関連付けるイーサネットインターフェイスを指定します。 |
|
|
| オプション: 最大転送単位 (MTU) を指定された値に設定します。デフォルト値はカーネルによって自動的に設定されます。 |
|
|
|
オプション: |
-
ipvlanオブジェクトは、仮想インターフェイスがmasterインターフェイスと通信することを許可しません。したがって、コンテナーはipvlanインターフェイスを使用してホストに到達できません。コンテナーが、Precision Time Protocol (PTP) をサポートするネットワークなど、ホストへの接続を提供するネットワークに参加していることを確認してください。 -
1 つの
masterインターフェイスを、macvlanとipvlanの両方を同時に使用するように設定することはできません。 -
インターフェイスに依存できない IP 割り当てスキームの場合、
ipvlanプラグインは、このロジックを処理する以前のプラグインと連鎖させることができます。masterが省略された場合、前の結果にはスレーブにするipvlanプラグインのインターフェイス名が 1 つ含まれていなければなりません。ipamが省略された場合、ipvlanインターフェイスの設定には前の結果が使用されます。
5.1.4.1. IPVLAN CNI プラグインの設定例 リンクのコピーリンクがクリップボードにコピーされました!
次の例では、ipvlan-net という名前のセカンダリーネットワークを設定します。
5.1.5. MACVLAN セカンダリーネットワークの設定 リンクのコピーリンクがクリップボードにコピーされました!
以下のオブジェクトは、MAC 仮想 LAN (MACVLAN) Container Network Interface (CNI) プラグインの設定パラメーターを説明しています。
| フィールド | 型 | 説明 |
|---|---|---|
|
|
|
CNI 仕様のバージョン。値 |
|
|
|
CNO 設定に以前に指定した |
|
|
|
設定する CNI プラグインの名前: |
|
|
| IPAM CNI プラグインの設定オブジェクト。プラグインは、アタッチメント定義への IP アドレスの割り当てを管理します。 |
|
|
|
オプション: 仮想ネットワークのトラフィックの可視性を設定します。 |
|
|
| オプション: 新しく作成された macvlan インターフェイスに関連付けるホストネットワークインターフェイス。値が指定されていない場合は、デフォルトのルートインターフェイスが使用されます。 |
|
|
| オプション: 指定された値への最大転送単位 (MTU)。デフォルト値はカーネルによって自動的に設定されます。 |
|
|
|
オプション: |
プラグイン設定の master キーを指定する場合は、競合の可能性を回避するために、プライマリーネットワークプラグインに関連付けられているものとは異なる物理ネットワークインターフェイスを使用してください。
5.1.5.1. MACVLAN CNI プラグイン設定の例 リンクのコピーリンクがクリップボードにコピーされました!
次の例では、macvlan-net という名前のセカンダリーネットワークを設定します。
5.1.6. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
5.2. 複数のネットワークの設定と使用 リンクのコピーリンクがクリップボードにコピーされました!
MicroShift Multus Container Network Interface (CNI) をインストールした後、設定を使用して他のネットワークプラグインを使用できます。
5.2.1. IP アドレス管理タイプと追加ネットワーク リンクのコピーリンクがクリップボードにコピーされました!
IP アドレスは、設定した IP アドレス管理 (IPAM) CNI プラグインを通じて追加のネットワークにプロビジョニングされます。MicroShift でサポートされている IP アドレスのプロビジョニングタイプは host-local、static、および dhcp です。
5.2.1.1. ブリッジインターフェイスの詳細 リンクのコピーリンクがクリップボードにコピーされました!
bridge タイプのインターフェイスと dhcp IPAM を使用する場合は、ブリッジネットワークでリッスンする DHCP サーバーが必要です。ファイアウォールを使用している場合は、ネットワークゾーンで DHCP トラフィックを許可するために、firewall-cmd --remove-service=dhcp コマンドを実行して、firewalld サービスを設定することも必要です。
5.2.1.2. macvlan インターフェイスの詳細 リンクのコピーリンクがクリップボードにコピーされました!
macvlan タイプのインターフェイスは、ホストが接続されているネットワークにアクセスします。つまり、dhcp IPAM プラグインが使用されている場合、インターフェイスがホストネットワーク上の DHCP サーバーから IP アドレスを受信できます。
5.2.1.3. ipvlan インターフェイスの詳細 リンクのコピーリンクがクリップボードにコピーされました!
ipvlan インターフェイスは、ホストネットワークにも直接アクセスできますが、ホストインターフェイスと MAC アドレスを共有します。共有 MAC アドレスにより、ipvlan タイプのインターフェイスは、dhcp プラグインでは使用できません。IPAM プラグインは、ClientID を使用した DHCP プロトコルをサポートしていません。
5.2.2. 追加ネットワーク用の NetworkAttachmentDefinition の作成 リンクのコピーリンクがクリップボードにコピーされました!
追加のネットワークの NetworkAttachmentDefinition 設定ファイルを作成するには、次の手順に従います。この例では、bridge-type インターフェイスを使用します。また、host-local IP アドレス管理 (IPAM) を使用するここでのサンプルワークフローを使用して、サポートされているその他の追加ネットワークタイプを設定することもできます。
bridge と dhcp IPAM を使用する場合は、ブリッジされたネットワークでリッスンする DHCP サーバーが必要です。ファイアウォールも使用している場合は、ネットワークゾーンで DHCP トラフィックを許可するように firewalld サービスを設定することも必要です。この場合は、firewall-cmd --remove-service=dhcp コマンドを実行できます。
前提条件
- MicroShift Multus CNI がインストールされている。
-
OpenShift CLI (
oc) がインストールされている。 - MicroShift が実行中である。
手順
オプション: 次のコマンドを実行して、MicroShift ノードが Multus CNI で実行されていることを確認します。
oc get pods -n openshift-multus
$ oc get pods -n openshift-multusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE dhcp-daemon-dfbzw 1/1 Running 0 5h multus-rz8xc 1/1 Running 0 5h
NAME READY STATUS RESTARTS AGE dhcp-daemon-dfbzw 1/1 Running 0 5h multus-rz8xc 1/1 Running 0 5hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行し、次のサンプルファイルを参照して
NetworkAttachmentDefinition設定ファイルを作成します。oc apply -f network-attachment-definition.yaml
$ oc apply -f network-attachment-definition.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow NetworkAttachmentDefinitionのファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記ブリッジの名前の使用は、プラグインの
bridgeタイプに固有です。他のプラグインはNetworkAttachmentDefinitionsで異なるフィールドを使用します。たとえば、macvlanおよびipvlan設定はmasterを使用して、割り当てるホストインターフェイスを指定します。
5.2.3. Pod の追加ネットワークへの追加 リンクのコピーリンクがクリップボードにコピーされました!
Pod を追加のネットワークに追加できます。Pod が作成されると、追加のネットワークが Pod に接続されます。Pod は、デフォルトネットワークで通常のノード関連のネットワークトラフィックを継続的に送信します。
すでに実行中の Pod に追加のネットワークを接続する場合は、Pod を再起動する必要があります。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 - ノードが実行中である。
-
Pod を接続する
NetworkAttachmentDefinitionオブジェクトによって定義されたネットワークが存在します。
手順
PodYAML ファイルにアノテーションを追加します。以下のアノテーション形式のいずれかのみを使用できます。カスタマイズせずに追加ネットワークを割り当てるには、以下の形式でアノテーションを追加します。
<network>は、Pod に関連付ける追加ネットワークの名前に置き換えます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<network>は、Pod に関連付ける各追加ネットワークの名前に置き換えます。複数の追加ネットワークを指定するには、各ネットワークをコンマで区切ります。コンマの間に空白を入れないでください。同じ追加ネットワークを複数回指定すると、その Pod にはそのネットワークに接続された複数のネットワークインターフェイスが存在することになります。
ブリッジタイプの追加ネットワークのアノテーションの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow カスタマイズして追加のネットワークを割り当てるには、以下の形式でアノテーションを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
PodYAML ファイルを作成し、追加のネットワークのNetworkAttachmentDefinitionアノテーションを追加するには、次のコマンドを実行し、サンプル YAML を使用します。oc apply -f ./<test_bridge>.yaml
$ oc apply -f ./<test_bridge>.yaml1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<test_bridge>は、使用する Pod 名に置き換えます。
出力例
pod/test_bridge created
pod/test_bridge createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow test_bridgePod YAML の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow NetworkAttachmentDefinitionアノテーションが正しいことを確認します。NetworkAttachmentDefinitionアノテーションの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
NetworkAttachmentDefinitionアノテーションがPodYAML に存在することを確認するには、<name>を Pod の名前に置き換えて次のコマンドを実行します。oc get pod <name> -o yaml
$ oc get pod <name> -o yaml1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<name>は、使用する Pod 名に置き換えます。以下の例では、<test_bridge>が使用されます。
次の例では、
test_bridgeがnet1の追加ネットワークに接続されています。oc get pod <test_bridge> -o yaml
$ oc get pod <test_bridge> -o yaml1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- <test_bridge> は、使用するブリッジの名前に置き換えます。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
k8s.v1.cni.cncf.io/network-statusパラメーターは、オブジェクトの JSON 配列です。各オブジェクトは、Pod に割り当てられる追加のネットワークのステータスを説明します。アノテーションの値はプレーンテキストの値として保存されます。
以下のコマンドを使用して、Pod が実行されていることを確認します。
oc get pod
$ oc get podCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE test_bridge 1/1 Running 0 81s
NAME READY STATUS RESTARTS AGE test_bridge 1/1 Running 0 81sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.4. 追加のネットワークの設定 リンクのコピーリンクがクリップボードにコピーされました!
NetworkAttachmentDefinition オブジェクトを作成して適用した後、次の例の手順に従って追加のネットワークを設定します。この例では、bridge タイプの追加ネットワークが使用されます。このワークフローは、他の追加のネットワークタイプにも使用できます。
前提条件
-
NetworkAttachmentDefinitionオブジェクト設定を作成して適用しました。
手順
以下のコマンドを実行して、ブリッジがホストに作成されていることを確認します。
ip a show br-test
$ ip a show br-testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
22: br-test: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 96:bf:ca:be:1d:15 brd ff:ff:ff:ff:ff:ff inet6 fe80::34e2:bbff:fed2:31f2/64 scope link valid_lft forever preferred_lft forever22: br-test: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 96:bf:ca:be:1d:15 brd ff:ff:ff:ff:ff:ff inet6 fe80::34e2:bbff:fed2:31f2/64 scope link valid_lft forever preferred_lft foreverCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ブリッジの IP アドレスを設定します。
sudo ip addr add 10.10.0.10/24 dev br-test
$ sudo ip addr add 10.10.0.10/24 dev br-testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、IP アドレス設定がブリッジに追加されたことを確認します。
ip a show br-test
$ ip a show br-testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- IP アドレスは想定どおりに設定されています。
次のコマンドを実行して、Pod の IP アドレスを確認します。
oc get pod test-bridge --output=jsonpath='{.metadata.annotations.k8s\.v1\.cni\.cncf\.io/network-status}'$ oc get pod test-bridge --output=jsonpath='{.metadata.annotations.k8s\.v1\.cni\.cncf\.io/network-status}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ブリッジの追加ネットワークは想定どおりに接続されます。
オプション:
oc execを使用して Pod にアクセスし、ipコマンドを使用してそのインターフェイスを確認できます。oc exec -ti test-bridge -- ip a
$ oc exec -ti test-bridge -- ip aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 予想どおり、Pod は
net1 インターフェイス上の 10.10.0.20 IP アドレスに接続されます。
MicroShift ホストから Pod 内の HTTP サーバーにアクセスして、接続が期待どおりに機能していることを確認します。以下のコマンドを使用します。
curl 10.10.0.20:8080
$ curl 10.10.0.20:8080Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Hello MicroShift
Hello MicroShiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.5. セカンダリーネットワークから Pod を削除する リンクのコピーリンクがクリップボードにコピーされました!
Pod を削除することによってのみ、セカンダリーネットワークから Pod を削除できます。
前提条件
- セカンダリーネットワークが Pod にアタッチされている。
-
OpenShift CLI (
oc) がインストールされている。 - クラスターにログインする。
手順
Pod を削除するには、以下のコマンドを入力します。
oc delete pod <name> -n <namespace>
$ oc delete pod <name> -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
<name>は Pod の名前です。 -
<namespace>は Pod が含まれる namespace です。
-
5.2.6. Multus ネットワークのトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
複数のネットワークの設定が適切に設定されていない場合、Pod が起動に失敗する可能性があります。次の手順は、いくつかの一般的なシナリオを解決するのに役立ちます。
5.2.6.1. Pod のネットワークを設定できない リンクのコピーリンクがクリップボードにコピーされました!
Multus CNI プラグインが Pod にネットワークアノテーションを適用できない場合、Pod は起動しません。追加のネットワーク CNI のいずれかが失敗した場合、Pod も起動に失敗する可能性があります。
エラーの例
Warning NoNetworkFound 0s multus cannot find a network-attachment-definitio (asdasd) in namespace (default): network-attachment-definitions.k8s.cni.cncf.io "bad-ref-doesnt-exist" not found
Warning NoNetworkFound 0s multus cannot find a network-attachment-definitio (asdasd) in namespace (default): network-attachment-definitions.k8s.cni.cncf.io "bad-ref-doesnt-exist" not found
この場合、CNI 障害を解決するには次の手順を実行できます。
-
NetworkAttachmentDefinitionsとアノテーションの両方の値を確認します。 - アノテーションを削除して、デフォルトネットワークのみで Pod が正常に作成されたかどうかを確認します。そうでない場合は、Multus 設定以外のネットワークの問題を示している可能性があります。
デバイス管理者の場合は、
kubeletによって生成されたログに特に注意しながら、crio.serviceまたはmicroshift.serviceログを確認してください。たとえば、
kubeletからの以下のエラーは、プライマリー CNI が実行されていないことを示しています。この状況は、Pod が起動していないこと、またはcni_default_network設定が正しくないことなどの CRI-O の設定ミスが原因で発生する可能性があります。kubelet が生成したエラーの例
Feb 06 13:47:31 dev microshift[1494]: kubelet E0206 13:47:31.163290 1494 pod_workers.go:1298] "Error syncing pod, skipping" err="network is not ready: container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: No CNI configuration file in /etc/cni/net.d/. Has your network provider started?" pod="default/samplepod" podUID="fe0f7f7a-8c47-4488-952b-8abc0d8e2602"
Feb 06 13:47:31 dev microshift[1494]: kubelet E0206 13:47:31.163290 1494 pod_workers.go:1298] "Error syncing pod, skipping" err="network is not ready: container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: No CNI configuration file in /etc/cni/net.d/. Has your network provider started?" pod="default/samplepod" podUID="fe0f7f7a-8c47-4488-952b-8abc0d8e2602"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.6.2. 設定ファイルがない リンクのコピーリンクがクリップボードにコピーされました!
アノテーションが存在しない NetworkAttachmentDefinition 設定 YAML を参照しているため、Pod を作成できない場合があります。この場合、通常次のようなエラーが発生します。
ログの例
cannot find a network-attachment-definition (bad-conf) in namespace (default): network-attachment-definitions.k8s.cni.cncf.io "bad-conf" not found" pod="default/samplepod"`
cannot find a network-attachment-definition (bad-conf) in namespace (default): network-attachment-definitions.k8s.cni.cncf.io "bad-conf" not found" pod="default/samplepod"`
エラー出力の例
"CreatePodSandbox for pod failed" err="rpc error: code = Unknown desc = failed to create pod network sandbox k8s_samplepod_default_5fa13105-1bfb-4c6b-aee7-3437cfb50e25_0(7517818bd8e85f07b551f749c7529be88b4e7daef0dd572d049aa636950c76c6): error adding pod default_samplepod to CNI network \"multus-cni-network\": plugin type=\"multus\" name=\"multus-cni-network\" failed (add): Multus: [default/samplepod/5fa13105-1bfb-4c6b-aee7-3437cfb50e25]: error loading k8s delegates k8s args: TryLoadPodDelegates: error in getting k8s network for pod: GetNetworkDelegates: failed getting the delegate: getKubernetesDelegate: cannot find a network-attachment-definition (bad-conf) in namespace (default): network-attachment-definitions.k8s.cni.cncf.io \"bad-conf\" not found" pod="default/samplepod"
"CreatePodSandbox for pod failed" err="rpc error: code = Unknown desc = failed to create pod network sandbox k8s_samplepod_default_5fa13105-1bfb-4c6b-aee7-3437cfb50e25_0(7517818bd8e85f07b551f749c7529be88b4e7daef0dd572d049aa636950c76c6): error adding pod default_samplepod to CNI network \"multus-cni-network\": plugin type=\"multus\" name=\"multus-cni-network\" failed (add): Multus: [default/samplepod/5fa13105-1bfb-4c6b-aee7-3437cfb50e25]: error loading k8s delegates k8s args: TryLoadPodDelegates: error in getting k8s network for pod: GetNetworkDelegates: failed getting the delegate: getKubernetesDelegate: cannot find a network-attachment-definition (bad-conf) in namespace (default): network-attachment-definitions.k8s.cni.cncf.io \"bad-conf\" not found" pod="default/samplepod"
このエラーを修正するには、NetworkAttachmentDefinitions YAML を作成し、適用します。
5.2.7. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
第6章 ルートの設定 リンクのコピーリンクがクリップボードにコピーされました!
MicroShift ノードにアクセスできるようにサービスのルートを設定できます。
6.1. HTTP ベースのルートの作成 リンクのコピーリンクがクリップボードにコピーされました!
ルートを使用すると、公開された URL でアプリケーションをホストできます。これは、アプリケーションのネットワークセキュリティー設定に応じて、セキュリティー保護または保護なしを指定できます。HTTP ベースのルートとは、セキュアではないルートで、基本的な HTTP ルーティングプロトコルを使用してセキュリティー保護されていないアプリケーションポートでサービスを公開します。
次の手順では、hello-microshift アプリケーションを例として使用して、Web アプリケーションへの単純な HTTP ベースのルートを作成する方法を説明します。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 - MicroShift ノードにアクセスできる。
- あるポートを公開する Web アプリケーションと、そのポートでトラフィックをリッスンする TCP エンドポイントがあります。
手順
以下のコマンドを実行して、
hello-microshiftというサービスを作成します。oc expose pod hello-microshift -n $namespace
$ oc expose pod hello-microshift -n $namespaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
hello-microshiftアプリケーションに対して、安全ではないルートを作成します。oc expose svc/hello-microshift --hostname=microshift.com $namespace
$ oc expose svc/hello-microshift --hostname=microshift.com $namespaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
以下のコマンドを実行して、
routeリソースが作成されたことを確認します。oc get routes -o yaml <name of resource> -n $namespace
$ oc get routes -o yaml <name of resource> -n $namespace1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- この例では、ルートの名前は
hello-microshiftで、namespace の名前はhello-microshiftです。
上記で作成されたセキュアでないルートの YAML 定義
6.2. HTTP Strict Transport Security リンクのコピーリンクがクリップボードにコピーされました!
HTTP Strict Transport Security (HSTS) ポリシーは、HTTPS トラフィックのみがルートホストで許可されるブラウザークライアントに通知するセキュリティーの拡張機能です。また、HSTS は、HTTP リダイレクトを使用せずに HTTPS トランスポートにシグナルを送ることで Web トラフィックを最適化します。HSTS は Web サイトとの対話を迅速化するのに便利です。
HSTS ポリシーが適用されると、HSTS はサイトから Strict Transport Security ヘッダーを HTTP および HTTPS 応答に追加します。HTTP を HTTPS にリダイレクトするルートで insecureEdgeTerminationPolicy 値を使用できます。HSTS を強制している場合は、要求の送信前にクライアントがすべての要求を HTTP URL から HTTPS に変更するため、リダイレクトの必要がなくなります。
クラスター管理者は、以下を実行するために HSTS を設定できます。
- ルートごとに HSTS を有効にします。
- ルートごとに HSTS を無効にします。
- ドメインごとに HSTS を適用するか、ドメインと組み合わせた namespace ラベルを使用します。
HSTS はセキュアなルート (edge-terminated または re-encrypt) でのみ機能します。この設定は、HTTP または passthrough ルートには適していません。
6.3. ルートごとの HTTP Strict Transport Security の有効化 リンクのコピーリンクがクリップボードにコピーされました!
HTTP Strict Transport Security (HSTS) は HAProxy テンプレートに実装され、haproxy.router.openshift.io/hsts_header アノテーションを持つ edge および re-encrypt ルートに適用されます。
前提条件
- クラスターへの root アクセス権限がある。
-
OpenShift CLI (
oc) がインストールされている。
手順
ルートで HSTS を有効にするには、
haproxy.router.openshift.io/hsts_header値を edge-terminated または re-encrypt ルートに追加します。次のコマンドを実行すると、oc annotateツールを使用してこれを実行できます。コマンドを適切に実行するには、haproxy.router.openshift.io/hsts_header ルートアノテーション内のセミコロン (;) も二重引用符 ("") で囲まれていることを確認してください。最大経過時間を
31536000ミリ秒 (約 8.5 時間) に設定するannotateコマンドの例oc annotate route <route_name> -n <namespace> --overwrite=true "haproxy.router.openshift.io/hsts_header=max-age=31536000;\ includeSubDomains;preload"
$ oc annotate route <route_name> -n <namespace> --overwrite=true "haproxy.router.openshift.io/hsts_header=max-age=31536000;\ includeSubDomains;preload"Copy to Clipboard Copied! Toggle word wrap Toggle overflow アノテーションで設定されたルートの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 必須。
max-ageは、HSTS ポリシーが有効な期間 (秒単位) を測定します。0に設定すると、これはポリシーを無効にします。 - 2
- オプション:
includeSubDomainsは、クライアントに対し、ホストのすべてのサブドメインにホストと同じ HSTS ポリシーを持つ必要があることを指示します。 - 3
- オプション:
max-ageが 0 より大きい場合、preloadをhaproxy.router.openshift.io/hsts_headerに追加し、外部サービスがこのサイトをそれぞれの HSTS プリロードリストに含めることができます。たとえば、Google などのサイトはpreloadが設定されているサイトの一覧を作成します。ブラウザーはこれらのリストを使用し、サイトと対話する前でも HTTPS 経由で通信できるサイトを判別できます。preloadを設定していない場合、ブラウザーはヘッダーを取得するために、HTTPS を介してサイトと少なくとも 1 回対話している必要があります。
6.3.1. ルートごとの HTTP Strict Transport Security の無効化 リンクのコピーリンクがクリップボードにコピーされました!
ルートごとに HTTP Strict Transport Security (HSTS) を無効にするには、ルートアノテーションの max-age の値を 0 に設定します。
前提条件
- クラスターへの root アクセス権限がある。
-
OpenShift CLI (
oc) がインストールされている。
手順
HSTS を無効にするには、以下のコマンドを入力してルートアノテーションの
max-ageの値を0に設定します。oc annotate route <route_name> -n <namespace> --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=0"
$ oc annotate route <route_name> -n <namespace> --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=0"Copy to Clipboard Copied! Toggle word wrap Toggle overflow ヒントまたは、以下の YAML を適用して config map を作成できます。
ルートごとに HSTS を無効にする例
metadata: annotations: haproxy.router.openshift.io/hsts_header: max-age=0metadata: annotations: haproxy.router.openshift.io/hsts_header: max-age=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow namespace のすべてのルートで HSTS を無効にするには、following コマンドを入力します。
oc annotate route --all -n <namespace> --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=0"
$ oc annotate route --all -n <namespace> --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=0"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
すべてのルートのアノテーションをクエリーするには、以下のコマンドを入力します。
oc get route --all-namespaces -o go-template='{{range .items}}{{if .metadata.annotations}}{{$a := index .metadata.annotations "haproxy.router.openshift.io/hsts_header"}}{{$n := .metadata.name}}{{with $a}}Name: {{$n}} HSTS: {{$a}}{{"\n"}}{{else}}{{""}}{{end}}{{end}}{{end}}'$ oc get route --all-namespaces -o go-template='{{range .items}}{{if .metadata.annotations}}{{$a := index .metadata.annotations "haproxy.router.openshift.io/hsts_header"}}{{$n := .metadata.name}}{{with $a}}Name: {{$n}} HSTS: {{$a}}{{"\n"}}{{else}}{{""}}{{end}}{{end}}{{end}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Name: routename HSTS: max-age=0
Name: routename HSTS: max-age=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3.2. ドメインごとに HTTP Strict Transport Security の強制 リンクのコピーリンクがクリップボードにコピーされました!
準拠した HSTS ポリシーアノテーションを使用してルートを設定できます。準拠しない HSTS ルートを持つアップグレードされたノードを処理するには、ソースでマニフェストを更新し、更新を適用できます。
oc expose route コマンドまたは oc create route コマンドを使用して、HSTS を強制するドメインにルートを追加することはできません。このコマンドの API はアノテーションを受け入れないためです。
HSTS は安全でないルート、つまり TLS 以外のルートには適用できません。
前提条件
- ノードへの root アクセス権限がある。
-
OpenShift CLI (
oc) がインストールされている。
手順
次の
oc annotate コマンドを実行して、ノード内のすべてのルートに HSTS を適用します。oc annotate route --all --all-namespaces --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=31536000;preload;includeSubDomains"
$ oc annotate route --all --all-namespaces --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=31536000;preload;includeSubDomains"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の
oc annotate コマンドを実行して、特定の namespace 内のすべてのルートに HSTS を適用します。oc annotate route --all -n <my_namespace> --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=31536000;preload;includeSubDomains"
$ oc annotate route --all -n <my_namespace> --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=31536000;preload;includeSubDomains"1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<my_namespace>は、使用する namespace に置き換えます。
検証
以下のコマンドを実行して、すべてのルートで HSTS アノテーションを確認します。
oc get route --all-namespaces -o go-template='{{range .items}}{{if .metadata.annotations}}{{$a := index .metadata.annotations "haproxy.router.openshift.io/hsts_header"}}{{$n := .metadata.name}}{{with $a}}Name: {{$n}} HSTS: {{$a}}{{"\n"}}{{else}}{{""}}{{end}}{{end}}{{end}}'$ oc get route --all-namespaces -o go-template='{{range .items}}{{if .metadata.annotations}}{{$a := index .metadata.annotations "haproxy.router.openshift.io/hsts_header"}}{{$n := .metadata.name}}{{with $a}}Name: {{$n}} HSTS: {{$a}}{{"\n"}}{{else}}{{""}}{{end}}{{end}}{{end}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Name: <_routename_> HSTS: max-age=31536000;preload;includeSubDomains
Name: <_routename_> HSTS: max-age=31536000;preload;includeSubDomainsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.4. スループットの問題のトラブルシューティング方法 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of MicroShift を使用してデプロイされたアプリケーションによって、特定のサービス間の待機時間が異常に長くなるなど、ネットワークスループットの問題が発生する場合があります。
Pod のログが問題の原因を指摘しない場合は、以下の方法を使用してパフォーマンスの問題を分析します。
pingまたはtcpdumpなどのパケットアナライザーを使用して Pod とそのノード間のトラフィックを分析します。たとえば、問題を生じさせる動作を再現している間に各ノードで
tcpdumpツールを実行 します。両サイトでキャプチャーしたデータを確認し、送信および受信タイムスタンプを比較して Pod への/からのトラフィックの待ち時間を分析します。ノードインターフェイスが他の Pod、ストレージデバイス、またはデータプレーンからのトラフィックで過負荷になると、Red Hat build of MicroShift で遅延が発生する可能性があります。tcpdump -s 0 -i any -w /tmp/dump.pcap host <podip 1> && host <podip 2>
$ tcpdump -s 0 -i any -w /tmp/dump.pcap host <podip 1> && host <podip 2>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
podipは Pod の IP アドレスです。oc get pod <pod_name> -o wideコマンドを実行して Pod の IP アドレスを取得します。
tcpdumpは、これらの 2 つの Pod 間のすべてのトラフィックが含まれる/tmp/dump.pcapのファイルを生成します。ファイルサイズを最小限に抑えるために問題を再現するすぐ前と問題を再現したすぐ後ににアナライザーを実行することが良いでしょう。次のコマンドを使用して、ノード間でパケットアナライザーを実行 することもできます。tcpdump -s 0 -i any -w /tmp/dump.pcap port 4789
$ tcpdump -s 0 -i any -w /tmp/dump.pcap port 4789Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
ストリーミングのスループットおよび UDP スループットを測定するために
iperfなどの帯域幅測定ツールを使用します。最初に Pod からツールを実行し、次にノードから実行して、ボトルネックを特定します。
6.5. Cookie の使用によるルートのステートフル性の維持 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of MicroShift は、すべてのトラフィックを同じエンドポイントにヒットさせることによりステートフルなアプリケーションのトラフィックを可能にするスティッキーセッションを提供します。ただし、エンドポイント Pod が再起動、スケーリング、または設定の変更などによって終了する場合、このステートフル性はなくなります。
Red Hat build of MicroShift は Cookie を使用してセッションの永続化を設定できます。Ingress Controller はユーザー要求を処理するエンドポイントを選択し、そのセッションの Cookie を作成します。Cookie は要求の応答として戻され、ユーザーは Cookie をセッションの次の要求と共に送り返します。Cookie は Ingress Controller に対し、セッションを処理しているエンドポイントを示し、クライアント要求が Cookie を使用して同じ Pod にルーティングされるようにします。
Cookie は、HTTP トラフィックを表示できないので、passthrough ルートで設定できません。代わりに、送信元 IP アドレスをベースに数が計算され、バックエンドを判断します。
バックエンドが変わると、トラフィックが間違ったサーバーに転送されてしまい、スティッキーではなくなります。送信元 IP を非表示にするロードバランサーを使用している場合は、すべての接続に同じ番号が設定され、トラフィックは同じ Pod に送られます。
6.5.1. Cookie を使用したルートのアノテーション リンクのコピーリンクがクリップボードにコピーされました!
ルート用に自動生成されるデフォルト名を上書きするために Cookie 名を設定できます。これにより、ルートトラフィックを受信するアプリケーションが Cookie 名を認識できるようになります。Cookie を削除すると、次の要求でエンドポイントの再選択が強制的に実行される可能性があります。その結果、サーバーがオーバーロードしている場合は、クライアントからの要求を取り除き、それらの再分配を試行します。
手順
指定される cookie 名でルートにアノテーションを付けます。
oc annotate route <route_name> router.openshift.io/cookie_name="<cookie_name>"
$ oc annotate route <route_name> router.openshift.io/cookie_name="<cookie_name>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<route_name>- ルートの名前を指定します。
<cookie_name>- cookie の名前を指定します。
たとえば、ルート
my_routeに cookie 名my_cookieでアノテーションを付けるには、以下を実行します。oc annotate route my_route router.openshift.io/cookie_name="my_cookie"
$ oc annotate route my_route router.openshift.io/cookie_name="my_cookie"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 変数でルートのホスト名を取得します。
ROUTE_NAME=$(oc get route <route_name> -o jsonpath='{.spec.host}')$ ROUTE_NAME=$(oc get route <route_name> -o jsonpath='{.spec.host}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<route_name>- ルートの名前を指定します。
cookie を保存してからルートにアクセスします。
curl $ROUTE_NAME -k -c /tmp/cookie_jar
$ curl $ROUTE_NAME -k -c /tmp/cookie_jarCopy to Clipboard Copied! Toggle word wrap Toggle overflow ルートに接続する際に、直前のコマンドによって保存される cookie を使用します。
curl $ROUTE_NAME -k -b /tmp/cookie_jar
$ curl $ROUTE_NAME -k -b /tmp/cookie_jarCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.6. パスベースのルート リンクのコピーリンクがクリップボードにコピーされました!
パスベースのルートは、URL に対して比較できるパスコンポーネントを指定します。この場合、ルートのトラフィックは HTTP ベースである必要があります。そのため、それぞれが異なるパスを持つ同じホスト名を使用して複数のルートを提供できます。ルーターは、最も具体的なパスの順に基づいてルートと一致する必要があります。
以下の表は、ルートのサンプルおよびそれらのアクセシビリティーを示しています。
| ルート | 比較対象 | アクセス可能 |
|---|---|---|
| www.example.com/test | www.example.com/test | はい |
| www.example.com | いいえ | |
| www.example.com/test および www.example.com | www.example.com/test | はい |
| www.example.com | はい | |
| www.example.com | www.example.com/text | Yes (ルートではなく、ホストで一致) |
| www.example.com | はい |
パスが 1 つでセキュリティー保護されていないルート
- 1
- パスは、パスベースのルートに唯一追加される属性です。
ルーターは TLS を終了させず、要求のコンテンツを読み込みことができないので、パスベースのルーティングは、passthrough TLS を使用する場合には利用できません。
6.7. HTTP ヘッダーの設定 リンクのコピーリンクがクリップボードにコピーされました!
ヘッダーを設定または削除するときに、個別のルートを使用してリクエストヘッダーとレスポンスヘッダーを変更できます。ルートアノテーションを使用して特定のヘッダーを設定することもできます。ヘッダーを設定するさまざまな方法は、連携時に課題となる可能性があります。
ヘッダーを設定または削除できるのは、Route CR 内のみです。ヘッダーは、追加できません。HTTP ヘッダーに値が設定されている場合、その値は完全である必要があるため、今後追加する必要はありません。X-Forwarded-For ヘッダーなどのヘッダーを追加することが適切な状況では、spec.httpHeaders.actions の代わりに spec.httpHeaders.forwardedHeaderPolicy フィールドを使用します。
Route 仕様の例
ルートオーバーライド値で定義されたアクションはすべて、ルートアノテーションを使用して設定されます。
6.7.1. 特殊なケースのヘッダー リンクのコピーリンクがクリップボードにコピーされました!
次のヘッダーは、設定または削除が完全に禁止されているか、特定の状況下で許可されています。
| ヘッダー名 | Route 仕様を使用して設定可能かどうか | 不許可の理由 | 別の方法で設定可能かどうか |
|---|---|---|---|
|
| いいえ |
| いいえ |
|
| はい |
| いいえ |
|
| いいえ |
|
はい: |
|
| いいえ | HAProxy が設定する Cookie は、クライアント接続を特定のバックエンドサーバーにマップするセッション追跡に使用されます。これらのヘッダーの設定を許可すると、HAProxy のセッションアフィニティーが妨げられ、HAProxy の Cookie の所有権が制限される可能性があります。 | はい:
* |
6.8. ルート内の HTTP リクエストおよびレスポンスヘッダーの設定または削除 リンクのコピーリンクがクリップボードにコピーされました!
コンプライアンス目的またはその他の理由で、特定の HTTP 要求および応答ヘッダーを設定または削除できます。これらのヘッダーは、Ingress Controller によって提供されるすべてのルート、または特定のルートに対して設定または削除できます。
たとえば、ルートを提供する Ingress Controller によってデフォルトのグローバルな場所が指定されている場合でも、コンテンツが複数の言語で記述されていると、Web アプリケーションが特定のルートの別の場所でコンテンツを提供するように指定できます。
以下の手順では Content-Location HTTP リクエストヘッダーを設定するルートを作成し、アプリケーション (https://app.example.com) に URL が関連付けられ、https://app.example.com/lang/en-us のロケーションにダイレクトされるようにします。アプリケーショントラフィックをこの場所にダイレクトすると、特定のルートを使用する場合はすべて、アメリカ英語で記載された Web コンテンツにアクセスすることになります。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 - Red Hat build of MicroShift クラスターにプロジェクト管理者としてログインしている。
- あるポートを公開する Web アプリケーションと、そのポートでトラフィックをリッスンする HTTP または TLS エンドポイントがある。
手順
ルート定義を作成し、
app-example-route.yamlというファイルに保存します。HTTP ヘッダーディレクティブを使用して作成されたルートの YAML 定義
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- HTTP ヘッダーに対して実行するアクションのリスト。
- 2
- 変更するヘッダーのタイプ。この場合は、応答ヘッダーです。
- 3
- 変更するヘッダーの名前。設定または削除できる使用可能なヘッダーのリストは、HTTP ヘッダーの設定 を参照してください。
- 4
- ヘッダーに対して実行されるアクションのタイプ。このフィールドには、
SetまたはDeleteの値を指定できます。 - 5
- HTTP ヘッダーの設定時は、
値を指定する必要があります。値は、そのヘッダーで使用可能なディレクティブのリストからの文字列 (例:DENY)にすることも、HAProxy の動的値構文を使用して解釈される動的値にすることもできます。この場合、値はコンテンツの相対位置に設定されます。
新しく作成したルート定義を使用して、既存の Web アプリケーションへのルートを作成します。
oc -n app-example create -f app-example-route.yaml
$ oc -n app-example create -f app-example-route.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
HTTP リクエストヘッダーの場合、ルート定義で指定されたアクションは、Ingress Controller の HTTP リクエストヘッダーに対して実行されたアクションの後に実行されます。これは、ルート内のこれらのリクエストヘッダーに設定された値が、Ingress Controller に設定された値よりも優先されることを意味します。HTTP ヘッダーの処理順序の詳細は、HTTP ヘッダーの設定 を参照してください。
6.9. Ingress オブジェクトを使用したルートの作成 リンクのコピーリンクがクリップボードにコピーされました!
一部のエコシステムコンポーネントには Ingress リソースとの統合機能がありますが、ルートリソースとは統合しません。このケースに対応するために、Red Hat build of MicroShift は、Ingress オブジェクトが作成されるときに、管理対象ルートオブジェクトを自動的に作成します。これらのルートオブジェクトは、対応する Ingress オブジェクトが削除されると削除されます。
手順
Red Hat build of MicroShift コンソールまたは
oc createコマンドを実行して Ingress オブジェクトを定義します。Ingress の YAML 定義
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
route.openshift.io/terminationアノテーションは、Routeのspec.tls.terminationフィールドを設定するために使用できます。Ingressにはこのフィールドがありません。許可される値はedge、passthrough、およびreencryptです。その他のすべての値は警告なしに無視されます。アノテーション値が設定されていない場合は、edgeがデフォルトルートになります。デフォルトの edge ルートを実装するには、TLS 証明書の詳細をテンプレートファイルで定義する必要があります。- 3
Ingressオブジェクトを操作する場合、ルートを操作する場合とは異なり、明示的なホスト名を指定する必要があります。<host_name>.<cluster_ingress_domain>構文 (apps.openshiftdemos.comなど) を使用して、*.<cluster_ingress_domain>ワイルドカード DNS レコードとクラスターのサービング証明書を利用できます。それ以外の場合は、選択したホスト名の DNS レコードがあることを確認する必要があります。route.openshift.io/terminationアノテーションでpassthroughの値を指定する場合は、仕様でpathを''に設定し、pathTypeをImplementationSpecificに設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc apply -f ingress.yaml
$ oc apply -f ingress.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- 2
route.openshift.io/destination-ca-certificate-secretを Ingress オブジェクトで使用して、カスタム宛先証明書 (CA) でルートを定義できます。アノテーションは、生成されたルートに挿入される kubernetes シークレットsecret-ca-certを参照します。-
Ingress オブジェクトから宛先 CA を使用してルートオブジェクトを指定するには、シークレットの
data.tls.crt指定子に PEM エンコード形式の証明書を使用してkubernetes.io/tlsまたはOpaqueタイプのシークレットを作成する必要があります。
-
Ingress オブジェクトから宛先 CA を使用してルートオブジェクトを指定するには、シークレットの
ルートを一覧表示します。
oc get routes
$ oc get routesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 結果には、
frontend-で始まる名前の自動生成ルートが含まれます。NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD frontend-gnztq www.example.com frontend 443 reencrypt/Redirect None
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD frontend-gnztq www.example.com frontend 443 reencrypt/Redirect NoneCopy to Clipboard Copied! Toggle word wrap Toggle overflow このルートを検査すると、以下のようになります。
自動生成されるルートの YAML 定義
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.10. Ingress オブジェクトを介してデフォルトの証明書を使用してルートを作成する リンクのコピーリンクがクリップボードにコピーされました!
TLS 設定を指定せずに Ingress オブジェクトを作成すると、Red Hat build of MicroShift によって安全でないルートが生成されます。デフォルトの Ingress 証明書を使用してセキュアな edge 終端ルートを生成する Ingress オブジェクトを作成するには、次のように空の TLS 設定を指定できます。
前提条件
- 公開したいサービスがあります。
-
OpenShift CLI (
oc) にアクセスできる。
手順
Ingress オブジェクトの YAML ファイルを作成します。この例では、ファイルの名前は
example-ingress.yamlです。Ingress オブジェクトの YAML 定義
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- この正確な構文を使用して、カスタム証明書を指定せずに TLS を指定します。
次のコマンドを実行して、Ingress オブジェクトを作成します。
oc create -f example-ingress.yaml
$ oc create -f example-ingress.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
次のコマンドを実行して、Red Hat build of MicroShift が Ingress オブジェクトの想定されるルートを作成したことを確認します。
oc get routes -o yaml
$ oc get routes -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.11. Ingress アノテーションでの宛先 CA 証明書を使用したルート作成 リンクのコピーリンクがクリップボードにコピーされました!
route.openshift.io/destination-ca-certificate-secret アノテーションを Ingress オブジェクトで使用して、カスタム宛先 CA 証明書でルートを定義できます。
前提条件
- PEM エンコードされたファイルで証明書/キーのペアを持つことができます。ここで、証明書はルートホストに対して有効となっています。
- 証明書チェーンを完了する PEM エンコードされたファイルの別の CA 証明書が必要です。
- PEM エンコードされたファイルの別の宛先 CA 証明書が必要です。
- 公開する必要のあるサービスが必要です。
手順
次のコマンドを入力して、宛先 CA 証明書のシークレットを作成します。
oc create secret generic dest-ca-cert --from-file=tls.crt=<file_path>
$ oc create secret generic dest-ca-cert --from-file=tls.crt=<file_path>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下に例を示します。
oc -n test-ns create secret generic dest-ca-cert --from-file=tls.crt=tls.crt
$ oc -n test-ns create secret generic dest-ca-cert --from-file=tls.crt=tls.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
secret/dest-ca-cert created
secret/dest-ca-cert createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow route.openshift.io/destination-ca-certificate-secretを Ingress アノテーションに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- アノテーションは kubernetes シークレットを参照します。
このアノテーションで参照されているシークレットは、生成されたルートに挿入されます。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.12. セキュリティー保護されたルート リンクのコピーリンクがクリップボードにコピーされました!
セキュアなルートは、複数の TLS 終端タイプを使用してクライアントに証明書を提供できます。OpenShift Container Platform ドキュメントへの次のリンクでは、カスタム証明書を使用して再暗号化、エッジ、およびパススルールートを作成する方法を説明しています。
第7章 ファイアウォールの使用 リンクのコピーリンクがクリップボードにコピーされました!
MicroShift ではファイアウォールは必要ありませんが、ファイアウォールを使用すると、MicroShift API への望ましくないアクセスを防ぐことができます。
7.1. ファイアウォールを通過するネットワークトラフィックについて リンクのコピーリンクがクリップボードにコピーされました!
Firewalld は、バックグラウンドで実行され、接続要求に応答して、動的にカスタマイズ可能なホストベースのファイアウォールを作成するネットワークサービスです。Red Hat Enterprise Linux for Edge (RHEL for Edge) を MicroShift とともに使用している場合は、通常、firewalld がすでにインストールされているため、firewalld を設定するだけで済みます。詳細は、次の手順で説明します。全体として、firewalld サービスの実行中に次の OVN-Kubernetes トラフィックを明示的に許可する必要があります。
- CNI Pod から CNI Pod へ
- CNI Pod からホストネットワーク Pod/ホストネットワーク Pod からホストネットワーク Pod
- CNI Pod
- CNI ネットワークを使用する Kubernetes Pod
- ホストネットワーク Pod
-
ホストネットワークを使用する Kubernetes Pod 次の手順を使用して、
firewalldサービスを設定できます。ほとんどの場合、firewalld は RHEL for Edge インストールに含まれています。firewalld がインストールされなていない場合は、このセクションにある簡単な手順でインストールできます。
MicroShift Pod は、内部 CoreDNS コンポーネントおよび API サーバーにアクセスできる必要があります。
7.2. firewalld サービスのインストール リンクのコピーリンクがクリップボードにコピーされました!
RHEL for Edge を使用している場合は、firewalld をインストールする必要があります。サービスを使用するには、設定を行うだけです。firewalld がない場合で、firewalld を使用したい場合は、次の手順を使用できます。
次の手順を使用して、MicroShift の firewalld サービスをインストールして実行します。
手順
オプション: 以下のコマンドを実行して、システムで firewalld があるかを確認します。
rpm -q firewalld
$ rpm -q firewalldCopy to Clipboard Copied! Toggle word wrap Toggle overflow firewalldサービスがインストールされていない場合は、次のコマンドを実行します。sudo dnf install -y firewalld
$ sudo dnf install -y firewalldCopy to Clipboard Copied! Toggle word wrap Toggle overflow ファイアウォールを開始するには、次のコマンドを実行します。
sudo systemctl enable firewalld --now
$ sudo systemctl enable firewalld --nowCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3. 必要なファイアウォール設定 リンクのコピーリンクがクリップボードにコピーされました!
ノードネットワークの IP アドレス範囲は、ファイアウォールの設定時に有効にする必要があります。デフォルト値を使用するか、IP アドレス範囲をカスタマイズできます。デフォルトの 10.42.0.0/16 設定からノードネットワークの IP アドレス範囲をカスタマイズする場合は、ファイアウォール設定でも同じカスタム範囲を使用する必要があります。
| IP 範囲 | ファイアウォールルールが必要 | 説明 |
|---|---|---|
| 10.42.0.0/16 | いいえ | 他の Pod へのホストネットワーク Pod アクセス |
| 169.254.169.1 | はい | Red Hat build of MicroShift API サーバーへのホストネットワーク Pod アクセス |
ファイアウォール構成に必須の設定コマンドの例を次に示します。
コマンドの例
他の Pod へのホストネットワーク Pod アクセスを設定します。
sudo firewall-cmd --permanent --zone=trusted --add-source=10.42.0.0/16
$ sudo firewall-cmd --permanent --zone=trusted --add-source=10.42.0.0/16Copy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat build of MicroShift API などのホストエンドポイントによってバックアップされたサービスへのホストネットワーク Pod アクセスを設定します。
sudo firewall-cmd --permanent --zone=trusted --add-source=169.254.169.1
$ sudo firewall-cmd --permanent --zone=trusted --add-source=169.254.169.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4. オプションのポート設定の使用 リンクのコピーリンクがクリップボードにコピーされました!
MicroShift ファイアウォールサービスでは、オプションのポート設定が可能です。
手順
カスタマイズされたポートをファイアウォール設定に追加するには、次のコマンド構文を使用します。
sudo firewall-cmd --permanent --zone=public --add-port=<port number>/<port protocol>
$ sudo firewall-cmd --permanent --zone=public --add-port=<port number>/<port protocol>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Expand 表7.2 オプションのポート ポート プロトコル 説明 80
TCP
OpenShift Container Platform ルーターを介してアプリケーションを提供するために使用される HTTP ポート。
443
TCP
OpenShift Container Platform ルーターを介してアプリケーションを提供するために使用される HTTPS ポート。
5353
UDP
OpenShift Container Platform ルート mDNS ホストに応答する mDNS サービス。
30000-32767
TCP
NodePort サービス用に予約されたポート範囲。LAN 上のアプリケーションを公開するために使用できます。
30000-32767
UDP
NodePort サービス用に予約されたポート範囲。LAN 上のアプリケーションを公開するために使用できます。
6443
TCP
Red Hat build of MicroShift API の HTTPS API ポート。
以下は、API サーバーのポート 6443 など、MicroShift で実行されているサービスへのファイアウォールを介した外部アクセスを必要とする場合に使用されるコマンドの例です。たとえば、ルーターを介して公開されるアプリケーションのポート 80 および 443 です。
コマンドの例
MicroShift API サーバーのポートを設定します。
sudo firewall-cmd --permanent --zone=public --add-port=6443/tcp
$ sudo firewall-cmd --permanent --zone=public --add-port=6443/tcpCopy to Clipboard Copied! Toggle word wrap Toggle overflow
MicroShift インスタンスの不要なポートを閉じるには、「ネットワークセキュリティーを強化するために不使用または不要なポートの閉鎖」の手順に従ってください。
7.5. ポートを開くためのサービスの追加 リンクのコピーリンクがクリップボードにコピーされました!
MicroShift インスタンスでは、firewall-cmd コマンドを使用してポートでサービスを開くことができます。
手順
オプション: 次のコマンドを実行すると、firewalld 内のすべての事前定義サービスを表示できます。
sudo firewall-cmd --get-services
$ sudo firewall-cmd --get-servicesCopy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトのポートで必要なサービスを開くには、次のコマンド例を実行します。
sudo firewall-cmd --add-service=mdns
$ sudo firewall-cmd --add-service=mdnsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.6. ファイアウォールを介したネットワークトラフィックの許可 リンクのコピーリンクがクリップボードにコピーされました!
IP アドレス範囲を設定し、Pod からネットワークゲートウェイを通過する内部トラフィックを許可する DNS サーバーを挿入することで、ファイアウォールを通過するネットワークトラフィックを許可できます。
手順
次のコマンドのいずれかを使用して、IP アドレス範囲を設定します。
次のコマンドを実行して、IP アドレス範囲をデフォルト値で設定します。
sudo firewall-offline-cmd --permanent --zone=trusted --add-source=10.42.0.0/16
$ sudo firewall-offline-cmd --permanent --zone=trusted --add-source=10.42.0.0/16Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、カスタム値を使用して IP アドレス範囲を設定します。
sudo firewall-offline-cmd --permanent --zone=trusted --add-source=<custom IP range>
$ sudo firewall-offline-cmd --permanent --zone=trusted --add-source=<custom IP range>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Pod からの内部トラフィックがネットワークゲートウェイを通過できるようにするには、次のコマンドを実行します。
sudo firewall-offline-cmd --permanent --zone=trusted --add-source=169.254.169.1
$ sudo firewall-offline-cmd --permanent --zone=trusted --add-source=169.254.169.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ロードバランサーを使用している場合は、次のコマンドを実行して、IPv6 トラフィックがファイアウォールを通過できるようにします。
sudo firewall-cmd --permanent --zone=trusted --add-source=fd01::/48
$ sudo firewall-cmd --permanent --zone=trusted --add-source=fd01::/48Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.6.1. ファイアウォール設定の適用 リンクのコピーリンクがクリップボードにコピーされました!
ファイアウォール設定を適用するには、手順 1 だけからなる以下の手順を使用します。
手順
ファイアウォールを介したネットワークアクセスの設定が完了したら、次のコマンドを実行してファイアウォールを再起動し、設定を適用します。
sudo firewall-cmd --reload
$ sudo firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.7. ファイアウォール設定の確認 リンクのコピーリンクがクリップボードにコピーされました!
ファイアウォールを再起動したら、設定を一覧表示して確認できます。
手順
ポート関連のルールなど、デフォルトのパブリックゾーンに追加されたルールを確認するには、次のコマンドを実行します。
sudo firewall-cmd --list-all
$ sudo firewall-cmd --list-allCopy to Clipboard Copied! Toggle word wrap Toggle overflow 信頼されたゾーンに追加されたルール (IP 範囲関連のルールなど) を確認するには、次のコマンドを実行します。
sudo firewall-cmd --zone=trusted --list-all
$ sudo firewall-cmd --zone=trusted --list-allCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.8. サービスが公開されている場合のファイアウォールポートの概要 リンクのコピーリンクがクリップボードにコピーされました!
MicroShift でサービスを実行すると、firewalld がアクティブになることがよくあります。これにより、ポートへのトラフィックがファイアウォールによってブロックされる可能性があるため、MicroShift 上の特定のサービスが中断される可能性があります。ホストの外部から特定のサービスにアクセスできるようにする場合は、必要なファイアウォールポートが開いていることを確認する必要があります。ポートを開くには、いくつかの方法があります。
NodePortおよびLoadBalancerタイプのサービスは、OVN-Kubernetes によって自動的に利用可能になります。このような場合、OVN-Kubernetes が iptables ルールを追加して、ノード IP アドレスへのトラフィックが関連するポートに配信されるようにします。これは PREROUTING ルールチェーンを使用して実行されます。トラフィックはローカルホストポートとサービスの firewalld ルールをバイパスするために OVN-K に転送されます。iptables および firewalld は、Red Hat Enterprise Linux (RHEL) 9 の nftables でサポートされています。iptables が生成する nftables ルールは、firewalld が生成するルールよりも常に優先されます。
HostPortパラメーター設定を持つ Pod は自動的に使用可能になります。これには、ポート 80 と 443 を使用するrouter-defaultPod も含まれます。HostPortPod の場合、CRI-O 設定が iptables DNAT (宛先ネットワークアドレス変換) を Pod の IP アドレスとポートに設定します。
これらの方法は、クライアントが同じホスト上にあるかリモートホスト上にあるかに関係なく機能します。OVN-Kubernetes および CRI-O によって追加される iptables ルールは、PREROUTING チェーンと OUTPUT チェーンに割り当てられます。ローカルトラフィックは、インターフェイスが lo タイプに設定された OUTPUT チェーンを通過します。DNAT は、INPUT チェーンのフィラールールに到達する前に実行されます。
MicroShift API サーバーは CRI-O では実行されないため、ファイアウォール設定の影響を受けます。ファイアウォールでポート 6443 を開くと、MicroShift ノード内の API サーバーにアクセスできます。
7.10. 既知のファイアウォールの問題 リンクのコピーリンクがクリップボードにコピーされました!
ファイアウォールのリロードまたは再起動でトラフィックフローが中断されないようにするには、Red Hat Enterprise Linux (RHEL) を起動する前にファイアウォールコマンドを実行します。MicroShift の CNI ドライバーは、NodePort サービスを使用するトラフィックフローなど、一部のトラフィックフローに対して iptable ルールを使用します。iptable ルールは CNI ドライバーによって生成および挿入されますが、ファイアウォールのリロードまたは再起動時に削除されます。iptable ルールがないと、トラフィックフローが中断されます。MicroShift の起動後にファイアウォールコマンドを実行する必要がある場合は、openshift-ovn-kubernetes namespace で ovnkube-master Pod を手動で再起動して、CNI ドライバーによって制御されるルールをリセットします。
第8章 完全に非接続のホストのネットワーク設定 リンクのコピーリンクがクリップボードにコピーされました!
ネットワークのカスタマイズと設定を適用して、完全に切断されたホストで MicroShift を実行する方法を説明します。切断されたホストは、物理か仮想かに関係なく、ネットワーク接続なしで実行される Red Hat Enterprise Linux (RHEL) オペレーティングシステムバージョン 9.0 以降である必要があります。
8.1. 完全に切断されたホスト用のネットワークの準備 リンクのコピーリンクがクリップボードにコピーされました!
完全に切断されたオペレーティングシステムを実行しているデバイス上で MicroShift ノードを起動して実行するには、次の手順を使用します。MicroShift ホストは、外部ネットワーク接続がない場合、完全に切断されているとみなされます。
通常、これは、サブネットを提供するためのネットワークインターフェイスコントローラー (NIC) がデバイスにアタッチされていないことを意味します。これらの手順は、セットアップ後に NIC が取り外されたホストでも実行できます。キックスタートファイルの %post フェーズを使用して、NIC を持たないホスト上でこれらの手順を自動化することもできます。
MicroShift ではノード通信をサポートするためにネットワークデバイスが必要であるため、切断された環境のネットワークを設定することが必要です。この要件を満たすには、セットアップ中にシステムループバックデバイスに割り当てた "偽" の IP アドレスを使用するように MicroShift ネットワークを設定する必要があります。
8.1.1. 手順の概要 リンクのコピーリンクがクリップボードにコピーされました!
切断されたホストで MicroShift を実行するには、次の手順が必要です。
- ホストの準備
- MicroShift が現在実行中の場合は停止し、サービスがネットワークに加えた変更をクリーンアップします。
- 永続的なホスト名を設定します。
- ループバックインターフェイスに ”偽” の IP アドレスを追加します。
- 偽の IP をローカルネームサーバーとして使用するように DNS を設定します。
-
ホスト名のエントリーを
/etc/hostsに追加します。
- MicroShift 設定の更新
-
nodeIPパラメーターを新しいループバック IP アドレスとして定義します。 -
.node.hostnameOverrideパラメーターを永続的なホスト名に設定します。
-
- 変更内容の有効化
- デフォルトの NIC がアタッチされている場合は無効にします。
- ホストまたはデバイスを再起動します。
MicroShift は起動後、ノード内通信にループバックデバイスを使用して実行されます。
8.2. MicroShift ネットワーク設定をデフォルトに戻す リンクのコピーリンクがクリップボードにコピーされました!
MicroShift を停止してクリーンアップスクリプトを実行すると、ネットワークのカスタマイズを削除し、ネットワークをデフォルト設定に戻すことができます。
前提条件
- RHEL 9 以降。
- MicroShift 4.14 以降。
- ホスト CLI へのアクセスがある。
手順
次のコマンドを実行して、MicroShift サービスを停止します。
sudo systemctl stop microshift
$ sudo systemctl stop microshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
kubepods.slicesystemd ユニットを停止します。sudo systemctl stop kubepods.slice
$ sudo systemctl stop kubepods.sliceCopy to Clipboard Copied! Toggle word wrap Toggle overflow MicroShift は、OVN-K によって加えられたネットワークの変更を元に戻すためのヘルパースクリプトをインストールします。次のコマンドを入力して、クリーンアップスクリプトを実行します。
sudo /usr/bin/microshift-cleanup-data --ovn
$ sudo /usr/bin/microshift-cleanup-data --ovnCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.3. 完全に切断されたホストのネットワーク設定 リンクのコピーリンクがクリップボードにコピーされました!
完全に切断されたホスト上で MicroShift を実行するためのネットワークを設定するには、ホストを準備し、ネットワーク設定を更新してから、再起動して新しい設定を適用する必要があります。すべてのコマンドはホスト CLI から実行されます。
前提条件
- RHEL 9 以降。
- MicroShift 4.16 以降。
- ホスト CLI へのアクセスがある。
- MicroShift の実行時に、内部 IP の競合と今後使用される外部 IP の潜在的な競合の両方を回避するために選択された有効な IP アドレス。
- MicroShift ネットワーク設定はデフォルトに設定されています。
次の手順は、デバイスがフィールドにデプロイされた後に MicroShift ノードへのアクセスが必要ないユースケースを対象としています。ネットワーク接続が削除されると、リモートノードにアクセスできなくなります。
手順
次のコマンドを実行して、偽の IP アドレスをループバックインターフェイスに追加します。
IP="10.44.0.1" sudo nmcli con add type loopback con-name stable-microshift ifname lo ip4 ${IP}/32$ IP="10.44.0.1"1 $ sudo nmcli con add type loopback con-name stable-microshift ifname lo ip4 ${IP}/32Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- この例で使用される偽の IP アドレスは “10.44.0.1” です。
注記MicroShift の内部 IP の競合と今後使用される外部 IP の潜在的な競合の両方を回避できるのであれば、有効な IP はどれでも使用できます。たとえば、MicroShift ノードのサブネットと衝突しない、またはデバイス上の他のサービスによってアクセスされる任意のサブネットを使用することができます。
自動 DNS を無視し、ローカルネームサーバーにリセットするように設定を変更して、ローカルネームサーバーを使用するように DNS インターフェイスを設定します。
次のコマンドを実行して自動 DNS をバイパスします。
sudo nmcli conn modify stable-microshift ipv4.ignore-auto-dns yes
$ sudo nmcli conn modify stable-microshift ipv4.ignore-auto-dns yesCopy to Clipboard Copied! Toggle word wrap Toggle overflow DNS インターフェイスがローカルネームサーバーを使用するように指示します。
sudo nmcli conn modify stable-microshift ipv4.dns "10.44.1.1"
$ sudo nmcli conn modify stable-microshift ipv4.dns "10.44.1.1"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを実行して、デバイスのホスト名を取得します。
NAME="$(hostnamectl hostname)"
$ NAME="$(hostnamectl hostname)"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
/etc/hostsファイルにノードのホスト名のエントリーを追加します。echo "$IP $NAME" | sudo tee -a /etc/hosts >/dev/null
$ echo "$IP $NAME" | sudo tee -a /etc/hosts >/dev/nullCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次の YAML スニペットを
/etc/microshift/config.yamlに追加して、MicroShift 設定ファイルを更新します。sudo tee /etc/microshift/config.yaml > /dev/null <<EOF node: hostnameOverride: $(echo $NAME) nodeIP: $(echo $IP) EOF
sudo tee /etc/microshift/config.yaml > /dev/null <<EOF node: hostnameOverride: $(echo $NAME) nodeIP: $(echo $IP) EOFCopy to Clipboard Copied! Toggle word wrap Toggle overflow MicroShift は、ノード内通信にループバックデバイスを使用できるようになりました。オフラインで使用するためのデバイスの準備を完了します。
- 現在デバイスに NIC がアタッチされている場合は、デバイスをネットワークから切断します。
- デバイスをシャットダウンし、NIC を切断します。
- オフライン設定を有効にするには、デバイスを再起動します。
次のコマンドを実行して、MicroShift ホストを再起動し、設定の変更を適用します。
sudo systemctl reboot
$ sudo systemctl reboot1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- このステップによりノードが再起動されます。検証を実装する前に、greenboot ヘルスチェックによってシステムが正常であると報告されるまで待ちます。
検証
この時点で、MicroShift ホストへのネットワークアクセスは切断されています。ホストターミナルにアクセスできる場合は、ホスト CLI を使用して、ノードが安定した状態で開始されたことを確認できます。
次のコマンドを入力して、MicroShift ノードが実行されていることを確認します。
export KUBECONFIG=/var/lib/microshift/resources/kubeadmin/kubeconfig sudo -E oc get pods -A
$ export KUBECONFIG=/var/lib/microshift/resources/kubeadmin/kubeconfig $ sudo -E oc get pods -ACopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow