さまざまな用途・環境で使われるNGINX――マルチクラウドにはKubernetesで環境を共通化
NGINXはさまざまなLinuxサーバーにインストール可能で、オープンソースの構成管理ツールAnsibleを使ったインストールの自動化にも対応。また、GitHubにはそのロールが公開されている。
NGINXの環境をDocker化して、自分のPCをはじめ、クラウドのテスト環境、本番環境などさまざまな場所に展開できる。Docker向けに作成したコンテナを公開するDocker Hubにも公式イメージがアップされており、公式のDockerfileも公開されている。
また、開発において、コードをコミットして、JenkinsやGitLabなどでテストをしたあと、ステージングや本番に反映していくといった、一連のCI/CDの局面でも何らかの形でNGINXは関わってくる。
「NGINXをアプリケーションサーバー側で使う場合もあれば、その手前にNGINXを置いてリバースプロキシとして使う場合もあるでしょう。商用版ならセキュリティを高める認証やWebアプリケーションファイアウォールなど高度な機能やサポートも提供可能です。キャッシュの機能もあるので、CSSやjsファイル、写真や動画をキャッシュして、一番近いところからアクセスしてもらうことも可能です」と鈴木氏は述べ、身近な例として、Netflixの動画配信ワークロードについて触れた。
さらに鈴木氏は、NGINXが広く採用される理由として、競合サービスと比較すると同時接続処理やメモリ使用量が優れていることや、商用版は帯域幅やvCPUによるライセンスや制限がないことを説明。加えて、AWS環境やAzure環境でのオートスケールにも対応したツールも公開されており、これを使ってリバースプロキシのバックエンドを自動的に追加する仕組みを構築できるとした。
最近のアプリケーション提供環境として、パブリッククラウドやベアメタルサーバーでのバーチャルマシン以外に、Kubernetesなどのコンテナプラットフォームの利用が進んでいる。Kubernetesの環境においても、「NGINX Ingress Controller」を使うことでNGINXにて外部からのアクセスを制御できるようになる。GCPには、Google Kubernetes Engine(GKE)でのNGINX Ingress Controllerのコミュニティドキュメントが公開されている。
鈴木氏は「GKEの標準ではL7のロードバランサーが起動しますが、NGINXのパラメーターをつけると、L4のロードバランサーが設定され、L7が担う処理はNGINXにおまかせする仕組みを構築できます。TCPとUDPはクラクラウド側のL4、そのあとのドメインやパスの制御についてはNGINX Ingress Controllerを通して設定できるようになります」と説明した。
AzureでもKubernetesの環境を作ると同様にロードバランサーが作られ、その後の処理はNGINXに任せられるようになる。
- Azure Kubernetes Service (AKS) でイングレス コントローラーを作成する
- How Kubernetes Ingress and LoadBalancer resources work together
このように、URLやホストなどによって、本番やテスト環境、異なるバージョンのアプリケーションなど、Kubernetes内のPodにあるサービスへのルーティングを設定できる。
鈴木氏はユーザーコミュニティのイベント「F5/NGINX Community!」で披露されたカカクコムの利用例について触れ「オンプレミスのKubernetes環境でドメインやパスの振り分けに利用されています。アノテーションの中に『server-snippets, location-snippets』というものがあり、これにすでにお持ちのNGINXの設定をserver/locationブロックに適用して利用されています」と説明した。