SDN を利用したマルチハイパーバイザー(Kubernetes, vSphere)環境のネットワーク管理

ビジネス推進本部 第1応用技術部
データプラットフォームチーム
細谷 典弘

最近、コンテナの話題を聞くことが多くなりました。
それに伴い、コンテナ化されたアプリケーションのデプロイやスケーリングなどを自動化するオープンソースのソフトウェアである Kubernetes も注目されています。

Kubernetes で利用できるネットワークプラグインとして、Flannel や Calico などがありますが、物理ネットワークとの統合管理が出来ません。
また、Flannel や Calico などでは、いままで使われていた vSphere 環境の仮想マシンと Kubernetes 環境のコンテナとのネットワーク自動化も出来ません。

本コラムでは、Cisco ACI を用いて、マルチハイパーバイザー環境の構築方法をご紹介いたします。

まずは、Kubernetes と ACI の連携を紹介します。

Kubernetes と ACI を連携するメリット

Kubernetes が ACI と連携するメリットとして、次のようなものが挙げられます。
・アプリケーションをデプロイしたときに物理ネットワークを自動的に作成する
・物理ネットワークで、アプリケーションのセキュリティを確保する
・ロードバランサー機能を自動的に作成する
・vSphere 環境の仮想マシンや、ベアメタルサーバーとのネットワークを自動化し、一元管理する

Kubernetes と ACI の連携方法

Kubernetes Master から、ACI 設定用の yaml ファイルを実行することで、Kubernetes 用のアプリケーションプロファイルが自動的に作成されれます(一部手動で作成する必要あり)。

図にあるそれぞれの EPG には、次のようなサーバやコンテナが入ります。
kube-default: kube-apply 等でデプロイしたコンテナ
kube-nodes:   Kunbernetes の master や node のサーバ
kube-system: kube-dns, Kubernetes-dashboard

また、EPG 間は Contract で結ばれ、各 EPG 間で通信が可能になります。

次に、以下のように Web Server を2台デプロイし、Google Kubernetes Engine (GKE) と同じように Load Balancer が使えることを見ていきます。
デフォルトの状態では、Type は Nodeport になっており、EXTERNAL-IP は空白です。

「kubectl edit svc –namespace=webserver」で、Type を LoadBalancer に変更します。

Type を LoadBalancer に変更したことにより、EXTERNAL-IP が付与されていることが確認できます。

付与された 10.3.0.4 にブラウザでアクセスすると、2台の Web Server にロードバランスされていることが確認できます。

この EXTERNAL-IP にアクセスしたときのロードバランスは、ACI の機能であるサービスグラフの Policy-Based Redirect (PBR) を使って自動的に行われています。

デフォルトでは、デプロイしたコンテナは kube-default の EPG にアサインされますが、Namespace 毎に EPG を作成することも出来るため、デプロイしたコンテナを Namespace 毎の EPG にアサインすることも出来ます。
また、Deployment でも可能です。

Kubernetes と vSphere のネットワーク統合

ここからは、vSphere 環境の仮想マシンと Kubernetes 環境で作成した Web Server のコンテナを接続させます。
まず、vSphere 環境の仮想マシンを ACI ファブリックと接続させるため、vSphere 用の EPG を作成します。
そして、先ほど作成した LoadBalancer 機能が含まれている Contract と接続します。

APIC で vSphere 用の EPG を作成すると、vCenter にポートグループが作成されます。そのポートグループを、Windwos 仮想マシンのネットワークアダプターに適用します。
そのポートグループを適用した Windows から先ほどアクセスしていた IP と同じ 10.3.0.4 にアクセスすると、Kubernetes 環境の Web Server にアクセスすることが出来るようになります。

ここでは、仮想マシンとコンテナのネットワーク自動化を見てきましたが、ベアメタルサーバーにおいても、同じようにベアメタルサーバー用の EPG を作成し、コンテナと繋がっている Contact と接続すれば、ベアメタルサーバとコンテナの接続は出来るようになります。

最後に

ここまで見てきて分かりますように、コンテナをデプロイしたときに、物理ネットワークの設定を何も行わなくても、LoadBalancer を使ったネットワークが自動的に作成されてます。
さらに、Contract を使ったセキュアな環境を物理ネットワーク上に作成しています。
また、vSphere 環境の仮想マシンと Kubernetes 環境のコンテナを接続するときも、物理ネットワークの設定は何もせず、APIC 上でアプリケーションプロファイルを作成すれば、通信が可能になっています。
つまり、仮想ネットワークから物理ネットワーク、さらには vSphere や Kubernes などの違う仮想環境においても、ACI を用いることで、ネットワークの一元的管理が出来ます。

執筆者プロフィール

細谷 典弘
ネットワンシステムズ株式会社 ビジネス推進本部
第1応用技術部 データプラットフォームチーム 所属

クラウド基盤に用いられるハードウェアとソフトウェアの最先端テクノロジーに関する調査・検証と、案件の技術支援をする業務に従事。
・CCIE Routing and Switching (#16002)
・CCIE Data Center (#16002)
・Red Hat Certified System Administrator in Red Hat OpenStack(RHCSA) (EX210)

イベント/レポート

pagetop