4.2.9. セカンダリーネットワークを使用した MetalLB の設定
OpenShift Container Platform 4.14 以降、デフォルトのネットワーク動作では、ネットワークインターフェイス間での IP パケットの転送は許可されません。したがって、MetalLB がセカンダリーインターフェイス上に設定されている場合は、必要なインターフェイスに対してのみ IP 転送を有効にするマシン設定を追加する必要があります。
4.13 からアップグレードされた OpenShift Container Platform クラスターは、アップグレード中にグローバル IP 転送を有効にするグローバルパラメーターが設定されるため、影響を受けません。
セカンダリーインターフェイスの IP 転送を有効にするには、次の 2 つのオプションがあります。
- 特定のインターフェイスの IP 転送を有効にします。
- すべてのインターフェイスで IP 転送を有効にします。
特定のインターフェイスに対して IP 転送を有効にすると、よりきめ細かい制御が可能になりますが、すべてのインターフェイスに対して有効にすると、グローバル設定が適用されます。
手順
以下のコマンドを実行して、Cluster Network Operator のパラメーター
routingViaHost をtrueに設定し、パッチを適用します。$ oc patch network.operator cluster -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"gatewayConfig": {"routingViaHost": true} }}}}' --type=merge特定のセカンダリーインターフェイス (
bridge-netなど) の転送を有効にするには、MachineConfigCR を作成して適用します。ローカルマシンで次のコマンドを実行して、ネットワークカーネルパラメーターを設定するために使用される文字列を Base64 でエンコードします。
$ echo -e "net.ipv4.conf.bridge-net.forwarding = 1" | base64 -w0出力例
bmV0LmlwdjQuY29uZi5icmlkZ2UtbmV0LmZvcndhcmRpbmcgPSAxCg==-
bridge-netという名前のセカンダリーインターフェイスの IP 転送を有効にするために、MachineConfigCR を作成します。 以下の YAML を
enable-ip-forward.yamlファイルに保存します。apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: <node_role> name: 81-enable-global-forwarding spec: config: ignition: version: 3.2.0 storage: files: - contents: source: data:text/plain;charset=utf-8;base64,bmV0LmlwdjQuY29uZi5icmlkZ2UtbmV0LmZvcndhcmRpbmcgPSAxCg== verification: {} filesystem: root mode: 420 path: /etc/sysctl.d/enable-global-forwarding.conf osImageURL: "" # ...ここでは、以下のようになります。
<node_role>-
IP 転送を有効にしたいノードのロール。たとえば、
ワーカー。 contents.source- 生成された Base64 文字列を入力します。
以下のコマンドを実行して設定を適用します。
$ oc apply -f enable-ip-forward.yaml
オプション: 次のコマンドを実行して、IP 転送をグローバルに有効にします。
$ oc patch network.operator cluster -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"gatewayConfig":{"ipForwarding": "Global"}}}}}' --type=merge
検証
マシン設定を適用した後、以下の手順を実行して変更内容を確認してください。
以下のコマンドを実行して、対象ノードでデバッグセッションに入ります。このコマンドは
、<node-name>-debugという名前のデバッグ Pod をインスタンス化します。$ oc debug node/<node-name>次のコマンドを実行して、デバッグシェル内で
/hostをルートディレクトリーとして設定します。デバッグ Pod は、ホストのルートファイルシステムを Pod 内の/hostにマウントします。ルートディレクトリーを/hostに変更することで、ホストの実行可能パスに含まれるバイナリーを実行できるようになります。$ chroot /host次のコマンドを実行して、IP 転送が有効になっていることを確認します。
$ cat /etc/sysctl.d/enable-global-forwarding.conf出力例
net.ipv4.conf.bridge-net.forwarding = 1この出力は、
bridge-netインターフェイスで IPv4 転送が有効になっていることを示しています。