3.6. クラスターで OVS balance-slb モードを有効にする
Open vSwitch (OVS)の balance-slb モードを有効にして、2 つ以上の物理インターフェイスがネットワークトラフィックを共有できるようにすることができます。Balance -slb モードインターフェイスは、ネットワークスイッチとの負荷分散を必要とせずに、仮想化ワークロードを実行するクラスターにソース負荷分散(SLB)機能を提供することができます。
現在、ソース負荷分散はボンドインターフェイスで実行され、このインターフェイスは br-phy などの補助ブリッジに接続します。ソースの負荷分散は、異なる Media Access Control (MAC)アドレスと仮想ローカルエリアネットワーク(VLAN)の組み合わせでのみ分散されます。すべての OVN-Kubernetes Pod トラフィックは同じ MAC アドレスと VLAN を使用するため、このトラフィックは多くの物理インターフェイス間で負荷分散できないことに注意してください。
次の図は、単純なクラスターインフラストラクチャーレイアウトでの balance-slb モードを示しています。仮想マシン (VM) は、特定の localnet NetworkAttachmentDefinition (NAD) カスタムリソース定義 (CRD)、NAD 0 または NAD 1 に接続します。各 NAD は、VLAN タグ付きまたはタグなしのトラフィックをサポートする基盤となる物理ネットワークにアクセスできるように、VM を提供します。br-ex OVS ブリッジは仮想マシンからのトラフィックを受信し、そのトラフィックを次の OVS ブリッジである br-phy に渡します。br-phy ブリッジは SLB ボンディングのコントローラーとして機能します。SLB ボンディングは、eno0 や eno1 などの物理インターフェイスリンクを介して、異なる仮想マシンポートからのトラフィックを分散します。さらに、どちらの物理インターフェイスからの Ingress トラフィックも、OVS ブリッジのセットを通過して仮想マシンに到達できます。
図3.1 2 つの NAD CRD を持つ localnet で動作する OVS balance-slb モード
OVS ボンディングを使用して、balance-slb モードインターフェイスをプライマリーまたはセカンダリーネットワークタイプに統合できます。OVS ボンディングでは、次の点に注意してください。
- OVN-Kubernetes CNI プラグインをサポートし、プラグインと簡単に統合できます。
-
ネイティブで
balance-slbモードをサポートします。
前提条件
-
プライマリーネットワークに複数の物理インターフェイスが接続されており、それらのインターフェイスを
MachineConfigファイルで定義している。 -
マニフェストオブジェクトを作成し、オブジェクト設定ファイルでカスタマイズされた
br-exブリッジを定義している。 - プライマリーネットワークに複数の物理インターフェイスが割り当てられ、NAD CRD ファイルでインターフェイスを定義している。
手順
クラスター内に存在するベアメタルホストごとに、クラスターの
install-config.yamlファイルで、次の例のようにnetworkConfigセクションを定義します。apiVersion: v1 kind: InstallConfig metadata: name: <cluster-name> # ... networkConfig: interfaces: - name: enp1s01 type: ethernet state: up ipv4: dhcp: true enabled: true ipv6: enabled: false - name: enp2s02 type: ethernet state: up mtu: 15003 ipv4: dhcp: true enabled: true ipv6: dhcp: true enabled: true - name: enp3s04 type: ethernet state: up mtu: 1500 ipv4: enabled: false ipv6: enabled: false # ...NMState 設定ファイルで各ネットワークインターフェイスを定義します。
多くのネットワークインターフェイスを定義する NMState 設定ファイルの例
apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy metadata: # ... ovn: bridge-mappings: - localnet: localnet-network bridge: br-ex state: present interfaces: - name: br-ex type: ovs-bridge state: up bridge: allow-extra-patch-ports: true port: - name: br-ex - name: patch-ex-to-phy ovs-db: external_ids: bridge-uplink: "patch-ex-to-phy" - name: br-ex type: ovs-interface state: up mtu: 15001 ipv4: enabled: true dhcp: true auto-route-metric: 48 ipv6: enabled: false dhcp: false auto-route-metric: 48 - name: br-phy type: ovs-bridge state: up bridge: allow-extra-patch-ports: true port: - name: patch-phy-to-ex - name: ovs-bond link-aggregation: mode: balance-slb port: - name: enp2s0 - name: enp3s0 - name: patch-ex-to-phy type: ovs-interface state: up patch: peer: patch-phy-to-ex - name: patch-phy-to-ex type: ovs-interface state: up patch: peer: patch-ex-to-phy - name: enp1s0 type: ethernet state: up ipv4: dhcp: true enabled: true ipv6: enabled: false - name: enp2s0 type: ethernet state: up mtu: 1500 ipv4: enabled: false ipv6: enabled: false - name: enp3s0 type: ethernet state: up mtu: 1500 ipv4: enabled: false ipv6: enabled: false # ...- 1
- ボンディングポートで
br-exMTU を手動で設定します。
base64コマンドを使用して、NMState 設定ファイルのインターフェイスコンテンツをエンコードします。$ base64 -w0 <nmstate_configuration>.yml1 - 1
-w0オプションは、base64 エンコード操作中に行の折り返しを防止します。
masterロールとworkerロールのMachineConfigマニフェストファイルを作成します。前のコマンドの base64 でエンコードされた文字列を各MachineConfigマニフェストファイルに埋め込むようにしてください。次のマニフェストファイルの例では、クラスター内に存在するすべてのノードに対してmasterロールを設定します。ノード固有のmasterロールとworkerロールのマニフェストファイルを作成することもできます。apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: master name: 10-br-ex-master1 spec: config: ignition: version: 3.2.0 storage: files: - contents: source: data:text/plain;charset=utf-8;base64,<base64_encoded_nmstate_configuration>2 mode: 0644 overwrite: true path: /etc/nmstate/openshift/cluster.yml3 各
MachineConfigマニフェストファイルを./<installation_directory>/manifests ディレクトリーに保存します。ここで、<installation_directory> は、インストールプログラムがファイルを作成するディレクトリーに移動します。Machine Config Operator (MCO)は各マニフェストファイルからコンテンツを取得し、ローリング更新中に選択されたすべてのノードにコンテンツを一貫して適用します。