NGINX Plusをデータプレーンとして利用してKubernetes環境のコンテナトラフィックを管理する、完全統合型の軽量サービスメッシュ「NGINX Service Mesh(NSM)」の開発版を発表します。NSMは現在無料でダウンロードできますので、開発・テスト環境で、ぜひNSMをお試しください。皆様からのGitHubへのフィードバック投稿をお待ちしています。
マイクロサービス手法を採用する場合、導入の規模の拡大と複雑化に伴い、いくつかの課題が生じることになります。サービス間の通信は複雑で、問題のデバッグが困難になる恐れがあり、またサービス が増えればその分、管理対象のリソースが増加することになります。
NSMは、以下の機能の一元的なプロビジョニングを可能にすることで、これらの課題に対処します。
NSMは、暗号化と認証をコンテナトラフィックにシームレスに適用することで、ゼロトラスト環境のアプリケーションを保護します。これによってトランザクションの可観測性と洞察がもたらされ、すばやく的確な導入と問題解決が促進されます。さらには、トラフィックの細かな管理が実現することで、DevOpsチームによるアプリケーションコンポーネントの導入と最適化が可能になるだけでなく、Devチームが分散アプリケーションを構築し、それらに容易に接続できるようになります。
NSMは、マイクロサービスアプリケーション間トラフィック用の統合データプレーンと、ネイティブに統合された外部トラフィック用のNGINX Plus Ingress Controllerからなり、これらが1つのコントロールプレーンで管理されます。
コントロールプレーンは、NGINX Plus データプレーン向けに設計・最適化されており、NGINX Plusサイドカーに分散されるトラフィック管理ルールを定義します。
NSMでは、すべてのサービスやアプリケーションに並んでサイドカープロキシがメッシュに導入されます。これらのプロキシは、以下のオープンソースソリューションと統合されます。
NGINX Plusは、データプレーンとしてサイドカープロキシ(East-Westトラフィック)とIngress Controller(North-Southトラフィック)をカバーする一方で、サービス間のコンテナトラフィックの傍受と管理を行います。機能には以下のものが含まれます。
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-meshNAME READY STATUS RESTARTS AGEgrafana-6cc6958cd9-dccj6 1/1 Running 0 2d19hmesh-api-6b95576c46-8npkb 1/1 Running 0 2d19hnats-server-6d5c57f894-225qn 1/1 Running 0 2d19hprometheus-server-65c95b788b-zkt95 1/1 Running 0 2d19hsmi-metrics-5986dfb8d5-q6gfj 1/1 Running 0 2d19hspire-agent-5cf87 1/1 Running 0 2d19hspire-agent-rr2tt 1/1 Running 0 2d19hspire-agent-vwjbv 1/1 Running 0 2d19hspire-server-0 2/2 Running 0 2d19hzipkin-6f7cbf5467-ns6wc 1/1 Running 0 2d19h
手動もしくは自動のインジェクションのポリシーを設定する導入オプションによっては、NGINXサイドカープロキシが導入済みのアプリケーションにデフォルトで挿入することが可能です。自動インジェクションを無効にする方法については、こちらの資料をご参照ください。
たとえば、defaultネームスペースにsleepアプリケーションを導入した後にポッドを調べると、sleepアプリケーションと それに関連するNGINX Plus サイドカーの2つのコンテナが動作していることがわかります。
$ kubectl apply –f sleep.yaml$ kubectl get pods –n defaultNAME READY STATUS RESTARTS AGEsleep-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までお問い合わせいただければ、個別のユースケースのご相談にも対応します。
"This blog post may reference products that are no longer available and/or no longer supported. For the most current information about available F5 NGINX products and solutions, explore our NGINX product family. NGINX is now part of F5. All previous NGINX.com links will redirect to similar NGINX content on F5.com."