Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Fabric Controller連携やってみた

Fabric Controller連携やってみた

KubernetesのBridge CNIを使った場合、Pod2Pod Connectivityを提供するためには、外部RTにルーティングの設定が必要。
今回はExabgpを使って、外部ルーターにルーティングを注入することで実現

その他実現可能なユースケースについて検討を行った。

Kazushige TAKEUCHI

July 27, 2021
Tweet

More Decks by Kazushige TAKEUCHI

Other Decks in Technology

Transcript

  1. 本日のアーキテクチャ1 K8s master K8s worker Pod network Pod network /31

    /31 /31 NIC NIC NIC NIC NIC bridge bridge SDN Controller NIC exabgp BGP Peering bgp frrouting 今回はCalicoは適用していない 手動でbridge を設定 /etc/cni/net.d/ に設定ファイルを配置 Route injection CLI NIC ※クラウドでは、NW管理機能と連携される模様 同じ環境が用意できないため、Bridgeを利用
  2. アンダーレイNW設計 K8s master K8s worker Pod network Pod network /31

    /31 /31 NIC NIC NIC NIC NIC bridge bridge SDN Controller NIC exabgp bgp frrouting アンダーレイの通信は、 frroutingに向けてあり、 インターネット通信が可能 Route injection CLI Default route NIC
  3. オーバーレイNW設計1 K8s master K8s worker Pod network Pod network /31

    /31 /31 NIC NIC NIC NIC NIC bridge bridge SDN Controller NIC exabgp bgp frrouting Route injection CLI NIC Pod networkは知ら れていないため、 到達できない
  4. オーバーレイNW設計2 K8s master K8s worker Pod network Pod network /31

    /31 /31 NIC NIC NIC NIC NIC bridge bridge SDN Controller NIC exabgp bgp frrouting Route injection CLI NIC pod podがk8sw1にあることを通知 announce route x.x.x.x next-hop y.y.y.y x.x.x.xは、Pod IP y.y.y.y は、k8sw1のホストのIP ここにx.x.x.x宛のパケットが到達すれば、 y.y.y.yに転送すればいいことが伝わる
  5. オーバーレイNW設計3 K8s master K8s worker Pod network Pod network /31

    /31 /31 NIC NIC NIC NIC NIC bridge bridge SDN Controller NIC exabgp bgp frrouting Route injection CLI NIC pod 結果的に、外部からもpodに到達が可能
  6. cni設定 l /etc/cni/net.d/10-mynet.conf { "cniVersion": "0.4.0", "name": "mynet", "type": "bridge",

    "bridge": "mybridge", "isDefaultGateway": true, "ipam": { "type": "host-local", "subnet": "192.168.100.0/24" } } IPAMのカスタマイズができれば もっと柔軟な設定ができそう
  7. exabgp設定 process announce-routes { run /usr/bin/socat stdout pipe:/var/run/exabgp.cmd; encoder json;

    } neighbor 192.168.0.0 { # Remote neighbor to peer with router-id 192.168.0.1; # Our local router-id local-address 192.168.0.1; # Our local update-source local-as 64512; # Our local AS peer-as 64512; # Peer's AS family { ipv4 unicast; ipv4 flow; } api { processes [ announce-routes ]; } }
  8. マルチNW(Network Isolation) K8s master K8s worker Pod network Pod network

    /31 /31 /31 NIC NIC NIC NIC NIC bridge bridge SDN Controller NIC exabgp bgp frrouting Route injection CLI NIC pod Pod network bridge 2.外部NWもIsolationに追従し、 1. この場合に 3.どういうアーキテクチャにすべきか? (すくなくとも再起動をしないと、 新しいBGPインスタンスに対応できない?) 4.対応できたとして、ユーザーが好き勝手に 他人のNWに接続できるのも問題
  9. Service Function Chaining K8s master K8s worker Pod network Pod

    network /31 /31 /31 NIC NIC NIC NIC NIC bridge bridge SDN Controller NIC exabgp bgp frrouting Route injection CLI NIC pod Pod network bridge destination network 宛先はこっち 透過プロキシのように 自分の宛先以外のパケットを処理 SR –IOVならL2で ダイレクトに外部NWに接続可能だが この場合は、未検証
  10. さらなる拡張に必要な仕組み l OpenContrail CNIやSONA CNIは既に同仕組みを持っているように見える(が、私自身は未 検証) l Service/ClusterIP への対応。Calicoだと、不要なノードへは転送されない l

    外部のNWを管理する仕組み l 外部NWにおいて、VRFを管理する仕組み l K8SのノードにBridge向けの設定を動的に配布 l 複数NW対応に向けて l Multus との連携やRBACとの紐付け l 今回はCLIから経路注入したが、K8Sのコントローラーと連携して管理 l Admission Webhookと連携? l 固定IPを割り振りたい。IPAMと連携すればよい