NGINX Plusをデータプレーンとして利用してKubernetes環境のコンテナトラフィックを管理する、完全統合型の軽量サービスメッシュ「NGINX Service Mesh(NSM)」の開発版を発表します。NSMは現在無料でダウンロードできますので、開発・テスト環境で、ぜひNSMをお試しください。皆様からのGitHubへのフィードバック投稿をお待ちしています。
マイクロサービス手法を採用する場合、導入の規模の拡大と複雑化に伴い、いくつかの課題が生じることになります。サービス間の通信は複雑で、問題のデバッグが困難になる恐れがあり、またサービス が増えればその分、管理対象のリソースが増加することになります。
NSMは、以下の機能の一元的なプロビジョニングを可能にすることで、これらの課題に対処します。
- セキュリティ– セキュリティはこれまで以上に重要になっています。データ侵害によって、組織は収益と評判の面で年間数百万ドルの損害を被る可能性があります。NSMはすべての通信をmTLS暗号化することで、通信機密データがハッカーに盗み取られることがないようにします。アクセス制御によって、互いに通信可能なサービスを指定するポリシーを定義することができます。
- トラフィック管理 – 新しいバージョンのアプリケーションを導入する際には、バグがあった場合に備え、最初は受信するトラフィックの量を制限したほうがいいかもしれません。NSMのインテリジェントコンテナトラフィック管理では、新サービスへのトラフィックを制限し、徐々に増やしていくためのポリシーを設定できます。レート制限やサーキットブレーカー等の機能により、サービスを通過するトラフィックを完全に制御できます。
- ビジュアライゼーション – 数千のサービスを管理するとなると、デバッグや可視性の問題に悩まされることが懸念されます。NSMは、NGINX Plusで使用可能なすべてのメトリックが表示される組み込み型のGrafanaダッシュボードにより、モニタリング環境を支援します。加えて、Open Tracingの統合により、トランザクションの詳細な追跡が可能になっています。
- ハイブリッド導入 – 大半の企業では、まだインフラストラクチャ全体がKubernetesのみではなく、ハイブリッド環境での動作を想定しなければなりません。NSMを使えば、NGINX Kubernetes Ingress Controllerの統合により、レガシーアプリケーションを疎外することなく、レガシーサービスがメッシュサービスと通信でき、またその逆も可能となります。
NSMは、暗号化と認証をコンテナトラフィックにシームレスに適用することで、ゼロトラスト環境のアプリケーションを保護します。これによってトランザクションの可観測性と洞察がもたらされ、すばやく的確な導入と問題解決が促進されます。さらには、トラフィックの細かな管理が実現することで、DevOpsチームによるアプリケーションコンポーネントの導入と最適化が可能になるだけでなく、Devチームが分散アプリケーションを構築し、それらに容易に接続できるようになります。
NGINX Service Meshとは?
NSMは、マイクロサービスアプリケーション間トラフィック用の統合データプレーンと、ネイティブに統合された外部トラフィック用のNGINX Plus Ingress Controllerからなり、これらが1つのコントロールプレーンで管理されます。
コントロールプレーンは、NGINX Plus データプレーン向けに設計・最適化されており、NGINX Plusサイドカーに分散されるトラフィック管理ルールを定義します。
NSMでは、すべてのサービスやアプリケーションに並んでサイドカープロキシがメッシュに導入されます。これらのプロキシは、以下のオープンソースソリューションと統合されます。
- Grafana – Prometheusメトリックのビジュアライゼーション。組み込み型のNSMダッシュボードにより、容易に使い始めることができます。
- Kubernetes Ingress Controller – メッシュのIngressとEgressトラフィックを管理します。
- SPIRE – サービスメッシュの証明書の管理、割り当て、更新を行う認証局
- NATS – 経路更新などのメッセージをコントロールプレーンからサイドカーに渡すための、拡張可能なメッセージングプレーン
- Open Tracing – 分散トレーシング(ZipkinとJaegerの両方をサポート)
- Prometheus – NGINX Plusサイドカーからのリクエスト数、コネクション数、SSLハンドシェイク数といったメトリックを収集し、保存します。
機能とコンポーネント
NGINX Plusは、データプレーンとしてサイドカープロキシ(East-Westトラフィック)とIngress Controller(North-Southトラフィック)をカバーする一方で、サービス間のコンテナトラフィックの傍受と管理を行います。機能には以下のものが含まれます。
- Mutual TLS(mTLS)認証
- ロードバランシング
- 高可用性
- レート制限
- サーキットブレーカー
- ブルーグリーン&カナリアデプロイメント
- アクセス制御
NGINX Service Meshの使用を開始するには
NSMの使用を始めるには、まず以下の準備が必要となります。
- Kubernetes環境にアクセスする。NGINX Service Meshは、Amazon Elastic Container Service for Kubernetes(EKS)、Azure Kubernetes Service(AKS)、Google Kubernetes Engine(GKE)、VMware vSphere、スタンドアロン型のベアメタルクラスタなど、複数のKubernetesプラットフォームでサポートされています。
- NSMをインストールするマシンにkubectl
コマンドラインユーティリティがインストールされていること。
- NGINX Service Meshリリースパッケージにアクセスする。このパッケージにはNSMイメージが含まれ、Kubernetesクラスタからアクセス可能なプライベートコンテナレジストリにこちらをプッシュする必要があります。パッケージには、NSMの導入に使用する
nginx-meshctl
バイナリが含まれます。
NSMをデフォルト設定で導入するには、以下のコマンドを実行します。導入時には、メッシュコンポーネントが問題なく導入されているか、また最終的にそのNSMが専用のネームスペースで動作しているかどうかを、トレースにより確認できます。
$ DOCKER_REGISTRY=your-Docker-registry ; MESH_VER=0.6.0 ; \
./nginx-meshctl deploy \
--nginx-mesh-api-image "${DOCKER_REGISTRY}/nginx-mesh-api:${MESH_VER}" \
--nginx-mesh-sidecar-image "${DOCKER_REGISTRY}/nginx-mesh-sidecar:${MESH_VER}" \
--nginx-mesh-init-image "${DOCKER_REGISTRY}/nginx-mesh-init:${MESH_VER}" \
--nginx-mesh-metrics-image "${DOCKER_REGISTRY}/nginx-mesh-metrics:${MESH_VER}"
Created namespace "nginx-mesh".
Created SpiffeID CRD.
Waiting for Spire pods to be running...done.
Deployed Spire.
Deployed NATS server.
Created traffic policy CRDs.
Deployed Mesh API.
Deployed Metrics API Server.
Deployed Prometheus Server nginx-mesh/prometheus-server.
Deployed Grafana nginx-mesh/grafana.
Deployed tracing server nginx-mesh/zipkin.
All resources created. Testing the connection to the Service Mesh API Server...
Connected to the NGINX Service Mesh API successfully.
NGINX Service Mesh is running.
非デフォルト設定など、追加のコマンドオプションがある場合は、以下を実行します。
$ nginx-meshctl deploy –h
NSMコントロールプレーン がnginx-meshネームスペースで正しく動作していることを確認するには、以下を実行します。
$ kubectl get pods –n nginx-mesh
NAME READY STATUS RESTARTS AGE
grafana-6cc6958cd9-dccj6 1/1 Running 0 2d19h
mesh-api-6b95576c46-8npkb 1/1 Running 0 2d19h
nats-server-6d5c57f894-225qn 1/1 Running 0 2d19h
prometheus-server-65c95b788b-zkt95 1/1 Running 0 2d19h
smi-metrics-5986dfb8d5-q6gfj 1/1 Running 0 2d19h
spire-agent-5cf87 1/1 Running 0 2d19h
spire-agent-rr2tt 1/1 Running 0 2d19h
spire-agent-vwjbv 1/1 Running 0 2d19h
spire-server-0 2/2 Running 0 2d19h
zipkin-6f7cbf5467-ns6wc 1/1 Running 0 2d19h
手動もしくは自動のインジェクションのポリシーを設定する導入オプションによっては、NGINXサイドカープロキシが導入済みのアプリケーションにデフォルトで挿入することが可能です。自動インジェクションを無効にする方法については、こちらの資料をご参照ください。
たとえば、defaultネームスペースにsleepアプリケーションを導入した後にポッドを調べると、sleepアプリケーションと それに関連するNGINX Plus サイドカーの2つのコンテナが動作していることがわかります。
$ kubectl apply –f sleep.yaml
$ kubectl get pods –n default
NAME READY STATUS RESTARTS AGE
sleep-674f75ff4d-gxjf2 2/2 Running 0 5h23m
以下のコマンドを実行して、ローカルマシンでサイドカーが表示されるようにすることで、native NGINX Plus dashboardでsleepアプリケーションをモニタリングすることもできます。
$ kubectl port-forward sleep-674f75ff4d-gxjf2 8080:8886
続いて、ブラウザでhttp://localhost:8080/dashboard.htmlを開きます。Prometheusサーバに接続して、sleepアプリケーションをモニタリングすることも可能です。
Kubernetesでカスタムリソースを利用して、アクセス制御、レート制限、サーキットブレーカーなどのトラフィックポリシーを設定できます。詳しくは、こちらの資料をご参照ください。
まとめ
NGINX Service Meshは、F5 ポータルから無料でダウンロードしていただけます。御社の開発・テスト環境でNSMをお試しいただいた後に、是非GitHubにフィードバックを投稿してください。
NGINX Plus Ingress Controllerを試すには、30日間の無料トライアルを今すぐ開始していただけます。F5までお問い合わせいただければ、個別のユースケースのご相談にも対応します。