Slide 1

Slide 1 text

(いまさら) exabgpでFabric Controller連携やってみた Kazushige Takeuchi (@kaz_tech_ )

Slide 2

Slide 2 text

k8sjpと私 l (時期は忘れました・・・まぁNW関連やら、DevOps やら) l Kindを使った開発環境の構築 l OpenStack + IPv6で起こったこんな問題 l マルチクラスタネットワーク l

Slide 3

Slide 3 text

背景 l 前回マルチクラスタに関する発表をしたが、クラウドプロバイダ の各種実装の詳細は追えていなかった。 l テレコムの関心事である以下への拡張を検証したい(検証した、とは言っていない) • Network Isolation • Service Function Chanining (SFC)の実現性を確認

Slide 4

Slide 4 text

基本検証 Kubenet?(bridge)の基礎と exabgpによる経路注入

Slide 5

Slide 5 text

本日のアーキテクチャ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を利用

Slide 6

Slide 6 text

アンダーレイ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

Slide 7

Slide 7 text

オーバーレイ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は知ら れていないため、 到達できない

Slide 8

Slide 8 text

オーバーレイ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に転送すればいいことが伝わる

Slide 9

Slide 9 text

オーバーレイ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に到達が可能

Slide 10

Slide 10 text

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のカスタマイズができれば もっと柔軟な設定ができそう

Slide 11

Slide 11 text

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 ]; } }

Slide 12

Slide 12 text

応用検証 次回に向けて?(時間があればじっくりと)

Slide 13

Slide 13 text

以下の応用検証を実施(しようか悩み中, 調査の方優先したい) • マルチNW対応(Network Isolation) • Service Function Chanining • Multi Cluster Migration

Slide 14

Slide 14 text

マルチ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に接続できるのも問題

Slide 15

Slide 15 text

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に接続可能だが この場合は、未検証

Slide 16

Slide 16 text

Multi Cluster Migration Pod network Pod network pod pod

Slide 17

Slide 17 text

まとめ • exabgpを利用したアーキテクチャの一検討を行った。 – シンプルなユースケースで1NWであればCalicoを利用したほ うが楽 – Kubernetes標準ではサポートされてない、IPAMなどの拡張を 考慮した際に、本方向性が生きる(かもしれない)。 何か皆様でご存知のOSSや活用事例などがあればお伺いしたい • マルチNWや、RBAC, SR-IOVなどのNWを考えたとき、 Fabricのコントロールやクラスタ間の接続を考慮し、連 携する際には更なる検討が必要

Slide 18

Slide 18 text

さらなる拡張に必要な仕組み 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と連携すればよい