5.2.3. ノード上の設計
ノードでは OpenShift SDN は先に、前述のレジストリーに、SDN マスターを持つローカルホストを登録し、マスターがノードにサブネットを割り当てられるようにします。
次に OpenShift SDN は、3 つのネットワークデバイスを作成、設定します。
-
br0
: Pod コンテナーが割り当てられる OVS ブリッジデバイスです。OpenShift SDN は、このブリッジにサブネット以外のフロールールも設定します。 -
tun0
: OVS の内部ポート (br0
のポート 2) です。これには、クラスターサブネットゲートウェイアドレスが割り当てられ、外部のネットワークアクセスに使用されます。OpenShift SDN は クラスターサブネットから外部ネットワークに NAT 経由でアクセスできるように、netfilter およびルーティングルールを設定します。 -
vxlan_sys_4789
: OVS VXLAN デバイス (br0
のポート 1) です。これはリモートノードのコンテナーへのアクセスを提供します。OVS ルールではvxlan0
として参照されます。
Pod がホストで起動されるたびに、OpenShift SDN は以下を行います。
- 対象の Pod に、ノードのクラスターサブネットから、空いている IP アドレスを割り当てます。
-
ホスト側の Pod の veth インターフェイスペアを OVS ブリッジ
br0
に割り当てます。 - OpenFlow ルールを OVS データベースに追加して、新規の Pod にアドレス指定されたトラフィックを正しい OVS ポートにルーティングします。
- ovs-multitenant プラグインの場合は、Pod からのトラフィックには、その Pod の VNID をタグ付けし、トラフィックの VNID が Pod の VNID (または特権のある VNID 0) と一致する場合にはその Pod にトラフィックを許可するという OpenFlow ルールを追加します。一致しないトラフィックは、一般的なルールで除外されます。
OpenShift SDN ノードは、SDN マスターからのサブネットの更新も監視します。新しいサブネットが追加された場合には、リモートサブネットの宛先 IP アドレスノードを持つパケットが vxlan0
(br0
のポート 1) に移動してネットワーク送信されるように、br0
に OpenFlow ルールを追加します。ovs-subnet プラグインは VNID 0 が指定された VXLAN に全パケットを送信しますが、ovs-multitenant プラグインは、ソースコンテナーに対して適切な VNID を使用します。