アーキテクチャ

2019.08.23

Author:

Ansible と ACI で実現するネットワークの Infrastructure as Code

インフラをコードとして定義し(Infrastructure as Code : IaC)、インフラの構築や運用を自動化する取組が多く行われています。IaC を実現するためには、そもそも IaC に対応しているインフラを用意する必要があります。クラウド環境においては、 IaC を実現するためのツールが既に提供されています。例えば、AWS では CloudFormation を使うことで、yaml 形式で記載された構成情報から、AWS のリソースを自動構築することができます。

そこで、オンプレミスのサーバーとネットワークがある環境でもクラウドと同じようにインフラをコードとして定義し、管理できる環境を構築しました。

何を出来るようにしたか

オンプレに用意した GitLab にネットワークの構成情報が書かれた yaml ファイルを git push すると、自動的に Cisco Nexus 9000 スイッチの上に仮想ネットワークが作成される環境を構築しました。加えて、仮想ネットワークに接続するためのポートグループが vCenter の vDS に作成されます。このため、仮想マシンのポートグループを変更するだけで、ネットワークが利用可能になります。また GitLab から対象の yaml ファイルを git rm すると、作成された仮想ネットワークは削除されるようになっています。

 

上記の yaml では、Web サーバーとクライアントが接続するネットワークを定義しています。192.168.1.0/24 を Web サーバー、192.168.2.0/24 をクライアント用に作成し、クライアントから、Web サーバーへの通信は、http と ICMP のみ許可するように設定しています。また、ネットワーク構築が完了するとエンタープライズ向けチャットツールである Webex Teams に通知されるようにしました。

yaml で記載したネットワークの構成情報を GitLab で管理することで、構成情報の管理に Git の仕組みを使うことが可能になります。先ほど作成したネットワークの通信ルールに、https を許可する変更を行ってみます。 yaml ファイルに https を許可する記載を加えて、 git push すると Web サーバーとクライアントの間で https の通信が許可されます。また、GitLab 上で変更点を確認することができます。

ネットワーク基盤として Cisco Application Centric Infrastructure (以下、ACI とする)を用いることで、予め最低限の設定さえ行っておけば、それぞれのスイッチの構成や設定、VLAN 番号などを意識しなくても、物理スイッチ上に仮想ネットワークを作成することが可能になります。実際に、ここで設定しているネットワークは Cisco Nexus 9000 シリーズスイッチ 3台から構成されています。仮にこの環境が、スイッチ数十台の規模であったとしても、オペレーションに変わりはありません。

どうやっているのか

GitLab にネットワークの構成情報が書かれた yaml ファイルが push されると、Jenkins に対して Webhook が送信されます。Webhook をトリガーとして、Jenkins はパイプラインを開始します。パイプライン内で、yaml ファイルをもとに Ansible の playbook を実行し、ACI の仮想ネットワークを作成します。Jenkins はパイプラインの状態を Webex Teams に通知します。ACI で仮想ネットワークが作成されると、ACI と vCenter が連携して、これに対応した vDS のポートグループが作成されます。

この構成を実現するために、Ansible の playbook と、 Jenkins のパイプライン内で git push された yaml から playbook を実行するためのシェルスクリプトを作成しています。その他は各コンポーネントが標準で用意している連携機能を利用しています。

Cisco ACI とは

ACI は Cisco 社が提供する Nexus 9000 シリーズスイッチ上で仮想ネットワークをポリシーベースで構築することができる SDN 製品です。Cisco Nexus 9000 シリーズスイッチと、SDN コントローラーとして動作する Application Policy Infrastructure Controller (APIC) から構成されます。各スイッチは APIC から管理されるため、ネットワークを作成する際に各スイッチに対して個別に設定を行う必要がありません。

ACI には以下のような特徴があります。

  • マルチハイパーバイザ環境に対応。
  • マルチクラウドに対応。
  • ユーザーが行う全ての操作について、APIが公開されており様々な製品と API 連携が可能。
  • Ansible のモジュールが充実。

まとめ

ACI, Ansible, Jenkins, GitLab, vCenter を組み合わせて、オンプレのサーバーとネットワークがある環境において、ネットワークを自動作成できる例を紹介しました。ACI を用いることで、スイッチ単体では難しかったネットワークの抽象化が実現することで、Ansible などの自動化ツールと組み合わせた際の運用効率化の効果が高まることが期待されます。

今回は Ansible と ACI で実現する Infrastructure as Code について紹介しました。ネットワンシステムズでは、多くの ACI の導入実績があります。また、Ansible に関しても積極的に取り組んでいます。興味がありましたら関連リンクの記事も読んでいただけると幸いです

関連リンク

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

Cisco CloudCenter と ACI を連携させたプライベートクラウドおよびハイブリットクラウド構築手法

Ansibleを用いたネットワーク設定の自動化

Ansibleでネットワークコード化――ネットワンに聞いた「地に足の着いた運用効率化」

 

※本記事の内容は執筆者個人の見解であり、所属する組織の見解を代表するものではありません。

MORE「アーキテクチャ」記事