5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

KubernetesAdvent Calendar 2017

Day 5

opencontrail kubernetes連携の紹介

Last updated at Posted at 2017-12-04

この記事は、Kubernetes Advent Calendar 2017 5日目の記事です。

この記事では、opencontrail (以下、contrail) とkubernetes の連携について、まとめていきます。

contrail概要

contrail は、linux上でMPLS VPN類似の機能を使えるようにした仕組みで、
control planeは以下:
  BGP(inet-vpn, evpn)
data planeは以下:
  MPLS over GRE, VXLAN, MPLS over UDP
をそれぞれ実装しています。

上記の性質から、ルーターやスイッチとの相互運用が可能となっており、サーバーからルーターやスイッチと直接bgp peer を張って、外部のノードとvmやコンテナの間で、通信を行わせることが出来ます。

もともと openstack の neutron バックエンドとして開発されており、分離されたネットワークの提供や外部接続の提供、セキュリティポリシー、ロードバランサーなど、neutron の各機能を提供しています。

※ architecture document はこちら:
http://www.opencontrail.org/opencontrail-architecture-documentation/

contrail k8s連携 概要

contrailとkubernetes との連携ですが、contrailのv4.0から、contrail-kube-manager として、kube-apiserver とやりとりするための仕組みが実装されており、cni の要求を受け取って、port, ip の払い出し、等が出来るようになっています。
http://www.opencontrail.org/container-networking-made-simple-with-opencontrail-and-kubernetes/

また、kubernetes の標準のネットワークを拡張した動きとして、ネットワーク分離、および、type: LoadBalancer の提供が行われているので、これらについて、ざっくりまとめていきます。
※ こちらの記載とほぼ同じ内容です。
http://aaabbb-200904.hatenablog.jp/entry/2017/11/04/022638
http://aaabbb-200904.hatenablog.jp/entry/2017/11/06/004312

ネットワーク分離

ネットワーク分離は、namespace 単位で実施可能で、以下のようにannotation を設定したyamlを使用します。
https://github.com/tnaganawa/contrail-k8s-tutorial/blob/master/yml/3_contrail-cni-features/4_namespace/myns1.yaml

この場合、namespace内に払い出されたpodは、他のnamespace のpodからネットワーク疎通が取れない (内部的にはnamespaceの名前で、別の仮想ネットワークが作成され、podはその中に作成される) という動作になります。

同じk8s内のアプリケーション間で、疎通が取れないようにしたい場合に、活用可能と思われます。
※ HR, Finance など互いにデータ連携がないアプリを同じk8sで提供する場合、など

type: LoadBalancer

k8s serviceの ServiceTypeにLoadBalancerが設定された場合、contrailは、クラスタIPのnext-hopを複数 (pod単位) 設定して、各ルーターに経路配布を行います。
このため、各ルーターは、複数のvrouter (podが立っているもの) に対して、分散してパケット転送を行う動作になります。
※ DNATはvrouter側で実施

通常、type: LoadBalancer を提供しようとすると、kube-proxy 等を使って、工夫する必要があるのですが、contrail の場合は、直接ルーターから分散できるため、構成が簡単になる、というメリットがあるものと思われます。

他環境とのMPLS over GRE連携

上記の通り、contrail は単独でも多くの機能を提供していますが、
更に、MPLS over GRE という標準的な仕組みを実装している関係で、別立てしたk8sやopenstack等、別のオーケストレーターで動作しているvm/container とも、BGP経由の経路配布を通じて、互いに通信を行うことが出来ます。
※ (やろうと思えば) openstack内の特定のvm (外部からは疎通できない) から、特定のk8s deployment (こちらも外部からは疎通できない)、に対して、疎通を設定することもできます (仮想ネットワークに対してroute-target の取り込み設定が必要)
http://aaabbb-200904.hatenablog.jp/entry/2017/11/06/011959

こちらも、vmとcontainer を交えたシステムを構築する場合は、便利な動作かもしれません。

まとめ

contrail はオープンソースとして開発されており、最新のモジュールはdockerhubからダウンロードすることが出来ます。
https://hub.docker.com/u/opencontrail/

※ インストール手順はこちら
http://www.opencontrail.org/opencontrail-containers-now-on-dockerhub/
https://github.com/Juniper/contrail-docker/wiki/Provision-Contrail-CNI-for-Kubernetes

IaaS, PaaS を絡めた複雑なネットワーク構成を構築しようとしている場合には、この機会に試してみてはいかがでしょうか??

更に詳しい情報はこちら:
http://www.opencontrail.org/
https://www.youtube.com/user/OpenContrail
http://aaabbb-200904.hatenablog.jp/archive/category/Contrail

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?