第16章 OVN-Kubernetes デフォルト CNI ネットワークプロバイダー
16.1. OVN-Kubernetes デフォルト Container Network Interface (CNI) ネットワークプロバイダーについて
OpenShift Container Platform クラスターは、Pod およびサービスネットワークに仮想化ネットワークを使用します。OVN-Kubernetes Container Network Interface (CNI) プラグインは、デフォルトのクラスターネットワークのネットワークプロバイダーです。OVN-Kubernetes は Open Virtual Network (OVN) をベースとしており、オーバーレイベースのネットワーク実装を提供します。OVN-Kubernetes ネットワークプロバイダーを使用するクラスターは、各ノードで Open vSwitch (OVS) も実行します。OVN は、宣言ネットワーク設定を実装するように各ノードで OVS を設定します。
16.1.1. OVN-Kubernetes の機能
OVN-Kubernetes Container Network Interface (CNI) クラスターネットワークプロバイダーは、以下の機能を実装します。
- Open Virtual Network (OVN) を使用してネットワークトラフィックフローを管理します。OVN はコミュニティーで開発され、ベンダーに依存しないネットワーク仮想化ソリューションです。
- ingress および egress ルールを含む Kubernetes ネットワークポリシーのサポートを実装します。
- ノード間にオーバーレイネットワークを作成するには、VXLAN ではなく GENEVE (Generic Network Virtualization Encapsulation) プロトコルを使用します。
16.1.2. サポートされるデフォルトの CNI ネットワークプロバイダー機能マトリクス
OpenShift Container Platform は、OpenShift SDN と OVN-Kubernetes の 2 つのサポート対象のオプションをデフォルトの Container Network Interface (CNI) ネットワークプロバイダーに提供します。以下の表は、両方のネットワークプロバイダーの現在の機能サポートをまとめたものです。
機能 | OVN-Kubernetes | OpenShift SDN |
---|---|---|
Egress IP | サポート対象 | サポート対象 |
Egress ファイアウォール [1] | サポート対象 | サポート対象 |
Egress ルーター | サポート対象 [2] | サポート対象 |
IPsec 暗号化 | サポート対象 | サポート対象外 |
IPv6 | サポート対象 [3] | サポート対象外 |
Kubernetes ネットワークポリシー | サポート対象 | 一部サポート対象 [4] |
Kubernetes ネットワークポリシーログ | サポート対象 | サポート対象外 |
マルチキャスト | サポート対象 | サポート対象 |
- egress ファイアウォールは、OpenShift SDN では egress ネットワークポリシーとしても知られています。これはネットワークポリシーの egress とは異なります。
- OVN-Kubernetes の egress ルーターはリダイレクトモードのみをサポートします。
- IPv6 はベアメタルクラスターでのみサポートされます。
-
OpenShift SDN のネットワークポリシーは、egress ルールおよび一部の
ipBlock
ルールをサポートしません。
16.1.3. OVN-Kubernetes の制限
OVN-Kubernetes Container Network Interface (CNI) クラスターネットワークプロバイダーには以下の制限があります。
-
OVN-Kubernetes には、Kubernetes サービスの外部トラフィックポリシーまたは内部トラフィックポリシーを
local
に設定するサポートはありません。デフォルト値はcluster
で、両方のパラメーターでサポートされます。この制限は、LoadBalancer
タイプ、NodePort
タイプのサービスを追加するか、外部 IP でサービスを追加する際に影響を受ける可能性があります。 -
sessionAffinityConfig.clientIP.timeoutSeconds
サービスは、OpenShift OVN 環境では効果がありませんが、OpenShiftSDN 環境では効果があります。この非互換性により、OpenShiftSDN から OVN への移行が困難になる可能性があります。
デュアルスタックネットワークに設定されたクラスターでは、IPv4 と IPv6 の両方のトラフィックがデフォルトゲートウェイとして同じネットワークインターフェイスを使用する必要があります。この要件が満たされない場合には、
ovnkube-node
デーモンセットのホストにある Pod は、CrashLoopBackOff
状態になります。oc get pod -n openshift-ovn-kubernetes -l app=ovnkube-node -o yaml
のようなコマンドで Pod を表示すると、以下の出力のように、status
フィールドにデフォルトゲートウェイに関する複数のメッセージが表示されます。I1006 16:09:50.985852 60651 helper_linux.go:73] Found default gateway interface br-ex 192.168.127.1 I1006 16:09:50.985923 60651 helper_linux.go:73] Found default gateway interface ens4 fe80::5054:ff:febe:bcd4 F1006 16:09:50.985939 60651 ovnkube.go:130] multiple gateway interfaces detected: br-ex ens4
唯一の解決策は、両方の IP ファミリーがデフォルトゲートウェイに同じネットワークインターフェイスを使用するように、ホストネットワークを再設定することです。
デュアルスタックネットワーク用に設定されたクラスターの場合、IPv4 と IPv6 の両方のルーティングテーブルにデフォルトゲートウェイが含まれている必要があります。この要件が満たされない場合には、
ovnkube-node
デーモンセットのホストにある Pod は、CrashLoopBackOff
状態になります。oc get pod -n openshift-ovn-kubernetes -l app=ovnkube-node -o yaml
のようなコマンドで Pod を表示すると、以下の出力のように、status
フィールドにデフォルトゲートウェイに関する複数のメッセージが表示されます。I0512 19:07:17.589083 108432 helper_linux.go:74] Found default gateway interface br-ex 192.168.123.1 F0512 19:07:17.589141 108432 ovnkube.go:133] failed to get default gateway interface
唯一の解決策として、両方の IP ファミリーにデフォルトゲートウェイが含まれるようにホストネットワークを再設定できます。