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

skupper-introduction

 skupper-introduction

Kubernetes Meetup Tokyo #49 LTの資料です

orimanabu

March 29, 2022
Tweet

More Decks by orimanabu

Other Decks in Technology

Transcript

  1. skupperとは 4 ▸ https://skupper.io/ ▸ 異なるKubernetesクラスター間で、L7サービスインターコネクトを実現 する ・ AMQPによる接続 ・

    Apache QpidのDispatch Routerを使用 ・ https://qpid.apache.org/components/dispatch-router/ ・ Namespace単位で接続できる ・ mTLSによるセキュアな通信 ・ 複雑なトポロジーを構成できる ・ Submarinerはフルメッシュ接続のみ
  2. cluster X cluster Y namespace A namespace B 全体像 5

    hello svc/web skupper- router skupper- service- controller svc/web skupper- router skupper- service- controller AMQP Link hello web ▸ ns Bのsvc/webにアクセスすると、AMQP Linkを通ってns Aのpod/webに届く ・ pod replicaへのロードバランスは(kube-proxyではなく)skupper-routerの機能で行う connector listener connector
  3. ▸ 2つのk8sクラスター X, Y ▸ それぞれにNamespace A, B ▸ ns

    Aにsvc/webとpod/web (replica=3) cluster X cluster Y namespace A スタート地点 7 hello svc/web namespace B hello web
  4. ▸ skupperコマンドを取得する ▸ それぞれのnsで “skupper init” コマンドを実行すると、2個のPodが起動 ・ skupper-service-controller ・

    skupper-router ▸ 外部からリンク接続するためのIngress or type: LoadBalancerが自動的に作成される ・ Ingressやtype: LoadBalancerのServiceがない環境では “skupper init --ingress none” を実行する cluster X cluster Y namespace A Skupperの初期化 8 hello svc/web skupper- router skupper- service- controller namespace B skupper- router skupper- service- controller hello web 初期化 (Ingress or type: LoadBalancer がある環境の場合) skupper init 1 初期化 (Ingress or type: LoadBalancer がない環境の場合) skupper init --ingress none 1
  5. cluster X cluster Y namespace A namespace B ▸ 片方のns

    (図のcluster X, ns A) で接続用のトークンを作成 ・ skupper token create c-X_ns-A.yaml ・ Ingress or type: LoadBalancer Serviceで外部から接続できる必要がある ▸ 他方のns (図のcluster Y, ns B)で「ns Aに向けたリンク」を作成 → ルータ間を接続 ・ skupper link create c-X_ns-A.yaml ・ こちらのnsのrouterからns AのrouterにAMQP Linkを張る AMQP Link作成 9 hello svc/web skupper- router skupper- service- controller skupper- router skupper- service- controller hello web AMQP Link トークンを使ってリンク作成 skupper link create token.yaml --cost 1 3 リンクには「接続する向き」があるが、一 度接続が確立すると、そのリンクを使っ て双方向通信ができる 接続トークン作成 skupper token create token.yaml 2
  6. cluster X cluster Y namespace A namespace B ns AのServiceを公開

    10 hello svc/web skupper- router skupper- service- controller svc/web skupper- router skupper- service- controller AMQP Link hello web ▸ ns AのService webを「公開」する ・ “skupper expose” ・ ns Aのskupper-routerにsvc/webのlistenerとconnectorができる ・ listenerの向き先はpod/web ・ ns Aのsvc/webのEndpointがrouterのconnectorに向く ▸ ns Bに同名のServiceが作成される ・ ns Bのsvc/webのEndpointはns Bのskupper-routerのconnector connector listener connector Expose! Serviceの公開 skupper expose svc/web ... 4
  7. cluster X cluster Y namespace A namespace B 通信の様子 -

    Namespaceまたぎ 11 hello svc/web skupper- router skupper- service- controller svc/web skupper- router skupper- service- controller AMQP Link hello web ▸ ns Bのsvc/webにアクセスすると、AMQP Linkを通ってns Aのpod/webに届く ・ pod replicaへのロードバランスは(kube-proxyではなく)skupper-routerの機能で行う connector listener connector client
  8. cluster X cluster Y namespace A namespace B 通信の様子 -

    Namespace内 12 hello svc/web skupper- router skupper- service- controller svc/web skupper- router skupper- service- controller AMQP Link hello web ▸ ns Aのsvc/webにアクセスしても、ns Aのrouterを経由してpod/webに届く ・ pod replicaへのロードバランスは(kube-proxyではなく)skupper-routerの機能で行う connector listener connector client
  9. 複雑なネットワーク 13 ▸ ns “c2-ns3” のsvc/webをskupper exportすると、ネットワーク上の全てのns内にsvc/webが生まれる ▸ どのnsのsvc/webに接続しても、skupper-routerのネットワークを通してns “c2-ns3”

    のpod/webに届く ▸ 経路障害が発生した場合は、Link Stateに応じて最短経路を再計算 skupper- router skupper- service-controller ns c1-ns3 skupper- router skupper- service-controller ns c2-ns3 skupper- router skupper- service-controller ns c2-ns1 skupper- router skupper- service-controller ns c2-ns2 skupper- router skupper- service-controller ns c1-ns1 skupper- router skupper- service-controller ns c1-ns2 listener connector connector svc/web svc/web svc/web svc/web svc/web svc/web hello hello web connector connector connector connector
  10. AMQPとは 15 ▸ メッセージキューを実現するプロトコルのひとつ ・ メッセージ指向 ・ 非同期、疎結合 ▸ MQTTとの違いは...

    ▸ MQTT: MQ Telemetry Transport ・ 軽量、省電力なプロトコル ・ ヘッダサイズは最小2バイト (cf. HTTPは最小50バイ ト) ・ 1対多、多対多の通信に特化 ・ 低速、不安定なネットワークでの使用を想定 ・ 1999年に誕生(IBM, Eurotech)、2010年に仕様をロイヤリ ティフリーで公開、今はOASIS標準 ・ メッセージの順序や到達性が保証されない ▸ AMQP: Advanced Message Queuing Protocol ・ エンタープライズな要件に対応できる MQプロトコル ・ 高信頼性 ・ Brokerによるメッセージ永続化、Sub側の受信処理のト ランザクション対応 ・ 高度なメッセージ配信 ・ Exchange(Direct, Fanout, Topic, Header)、Priority Queue、QoS/Prefetching、Immediate ・ アクセス制御 ・ Virtual Host + ACL ・ プロトコルの仕様はOASISで標準化されている ・ 金融業界でも使われている ・ ワーキンググループにBoA、JP Morgan、GS等がいる
  11. メッセージングのネットワーク化 18 ▸ “Interconnect Layer” を導入 ▸ Broker、EndpointはInterconnect Layerに接続 ▸

    AMQPレベルではEndpointはBroker(や他のEndpoint)とメッセージを交換する ▸ メッセージのルーティングは(AMQP的な)アドレスベースで行う Interconnect Layer endpoint endpoint endpoint endpoint endpoint Broker Broker Broker Broker R R R R R R R R
  12. Dispatch Router 19 ▸ AMQPのSender, Receiver, Broker等を接続するネットワークを構成 ▸ (メッセージのレプリケーションではなく) パスの冗長化によるHA

    ▸ ネットワークトポロジーの自動検出 ・ Link State型のルーティングプロトコル ・ Shortest Path Firstによる最短パスの計算 ・ トポロジー変更に自動的に追随 OSPFやIS-ISとほぼ同じ コストはリンク作成時に設定可 能 Publisher Broker Subscriber Publisher Router Subscriber Send message Accepted Send message Accepted Send message Accepted Send message Accepted Broker: メッセージを受け取り、配送する Router: メッセージを転送する
  13. その他雑感 21 ▸ Qpid Dispatch Router (qdrouterd) さん、基本はCで書かれているが、Link Stateの管理や Dijkstra's

    algorithmで最短経路を計算するロジックはPythonで書かれている ・ Python Embedding ▸ NATの向こうのオンプレクラスターとパブリッククラウドのクラスターでも接続できるのは良い ・ パブリッククラウド側でトークンを作成し、オンプレクラスターからリンクを張る ・ Forward Proxy越えだとうまくリンクが張れなかった...要調査(そもそもできないかも) ▸ 気になるところ ・ UDPは送れない ・ パフォーマンス出るか気になる ・ インターネット越しのLink State型ルーティングプロトコルってちゃんと動くかドキドキする ・ てゆーかなんでAMQP...
  14. 参考文献 22 ▸ 公式 ・ https://skupper.io/ ・ https://github.com/skupperproject ・ https://qpid.apache.org/components/dispatch-router/

    ・ https://github.com/apache/qpid-dispatch ▸ Skupper ・ Skupper.io: Let your services communicate across Kubernetes clusters ・ Use Skupper to connect multiple Kubernetes clusters ・ Virtual Application Networks for Hybrid Cloud Interconnect ・ AMQP InterconnectベースでKubernetesのマルチクラスタ間のネットワークを構成する Skupperのご紹介 ・ Skupperを使ってMAC PCとAWS上のOpenShiftのマルチクラスタネットワークを作ってみる ・ Skupperを使ってクラスタ間を結びコンテナイメージをコピー ▸ MQTT, AMQP, ... ・ MQTTとAMQPと.NET ・ 初めてのMQTT ・ MQTTとはなんだったのか ・ MQTTのMQはMessage Queueではありません ・ 通信プロトコルAMQPはIoTに向いているか調査せよ! ・ Messages-as-a-Service
  15. linkedin.com/company/red-hat youtube.com/user/RedHatVideos facebook.com/redhatinc twitter.com/RedHat 23 Red Hat is the world’s

    leading provider of enterprise open source software solutions. Award-winning support, training, and consulting services make Red Hat a trusted adviser to the Fortune 500. Thank you