新しいオープンソースのモダンアプリ向けリファレンスアーキテクチャ

NGINX | 2021年8月24日

NGINXでは、ここ数年にわたり、アプリケーションを真にモダンで適応性の高いもの、つまりポータブル、クラウドネイティブ、レジリエント、スケーラブルで、更新しやすいものにする必要性を訴えてきました。最近では、モダンアプリの開発とデリバリーを促進する2つの概念が注目されています。1つ目はPlatform Opsです。企業レベルのプラットフォームチームが、開発チームやDevOpsチームの業務に必要なすべてのツールを選定、保守、連携し、セキュリティを確保します。2つ目はシフトレフトです。これは、開発ライフサイクルの早い段階で、本番環境レベルのセキュリティ、ネットワーキング、モニタリングをアプリケーションに組み込むことを意味します。その結果、開発者は従来ITOpsが担っていた機能について、より大きな責任を負う一方、それらの機能をどのように実装するかについて、より多くの選択肢と裁量を得られます。

これは理想的に聞こえますが、実際にはPlatform Opsを導入し、インフラストラクチャと運用のツールを「シフトレフト」するのは容易ではありません。その理由の1つは、コンテナ化された環境で、増え続けるKubernetesオーケストレーションエンジンのいずれかを使用し、高度に分散した形でデプロイされるアプリが増えていることです。また企業は、クラウド間やクラウドとオンプレミス環境間の違いに煩わされることなく、複数の環境にアプリをデプロイしたいと考えています。

モダンアプリ向けの「ゴールデンイメージ」

当然のことながら、お客さまやコミュニティからは、直面する課題への支援を求める声が引き続き寄せられています。あらゆるメリットを享受したいと考えていても、セキュリティ、ネットワーキング、可観測性とパフォーマンス監視、スケーリングといった要素をすべて組み合わせるには、相応の作業が必要です。さらに、構築したプラットフォームを本番環境で使用できるほど堅牢にするには、より多くの作業が求められます。そこで、次のような疑問が生じます。「単一のリポジトリから起動できる、モダンアプリ向けの『ゴールデンイメージ』がないのはなぜでしょうか?」

これはもっともな疑問です。そこで私たちは、納得のいく答えを出すことを自らの課題として受け止めました。まず、この疑問をより具体的に捉え直しました。お客さまやコミュニティが求めているのは、次のようなことだと考えています。「異なるソフトウェア製品を統合して、より一体性のある環境を構築し、スタックを調整して適切な構成や設定を確立することで、作業や手間を省けないでしょうか。また、基盤となるサービスや機能の違いに応じて大幅に構成を変更しなくても、さまざまなクラウドでアプリケーションを簡単に実行できるようにできないでしょうか」

こうした問いに真に応えるソリューションは、数百社の企業や主要なクラウドベンダー各社のパートナーだけでなく、コミュニティ全体にメリットをもたらす、まさに非ゼロサムの成果になると考えています。理想は、そのソリューションが単なる「おもちゃ」ではなく、堅牢でテスト済みのコードであり、Kubernetes環境で稼働する本番アプリケーションにすぐにデプロイできることです。そして率直に言えば、誰もがGitHubから私たちの成果を自由に持ち出して使えるようにしたいと考えています。

早速本題に入りましょう。本日、NGINX Sprint 2.0において、F5のソリューションであるModern Apps Reference Architecture(MARA)の最初のイテレーションを発表します。MARAは、モダンアプリ向けのオープンソースのアーキテクチャおよびデプロイモデルです。ぜひ気に入って活用し、自由に取り入れてください。さらに、改善やカスタマイズのために変更したり、フォークしたりしていただければ幸いです。この記事では、F5が構築したものと、その仕組みについて説明します。

NGINX Modern Apps Reference Architecture

最新のアダプティブアプリケーションの定義

まず、理想的なモダンアダプティブアプリケーションを定義します。マイクロサービスで構成され、コンテナ化されており、クラウドネイティブの設計原則(疎結合、容易なスケーリング、インフラストラクチャに依存しないこと)に準拠している場合もありますが、必須ではありません。モダンアプリケーションの理念の一つは、インフラストラクチャの抽象化を活用できるように特化して設計することです。この定義は単純ですが、すべてのリファレンスアーキテクチャの基本テンプレートとなるため重要です。

モダンアプリケーションアーキテクチャの主要な柱には、ポータビリティ、スケーラビリティ、レジリエンス、アジリティがあります。

  • ポータビリティ – 複数の種類のデバイスやインフラストラクチャ、パブリッククラウド、オンプレミスにアプリケーションを容易にデプロイできます。
  • スケーラビリティ – 世界中のどこでも、需要の急増や減少に応じて、アプリを迅速かつシームレスにスケールアップまたはスケールダウンできます。
  • レジリエンス – アプリは、異なる可用性リージョン、クラウド、またはデータセンターで新たに立ち上げられたクラスターや仮想環境へ、円滑にフェイルオーバーできます。
  • 俊敏性 – 自動化されたCI/CDパイプラインを通じてアプリを迅速に更新できます。モダンアプリの世界では、コード開発の高速化とコードのプッシュ頻度の向上も意味します。

リファレンスアーキテクチャの設計

私たちは、モダンアプリの定義とデプロイパターンの基本要件を満たすプラットフォームを構築したいと考えました。技術的な目標に加え、モダンなアプリ設計の原則を示し、コミュニティによるKubernetesへのデプロイを促進することも目指しました。さらに、開発者、DevOpsチーム、Platform Opsチームが自由に試し、変更し、改善できる「流用可能な」コードを提供したいと考えました。つまり、私たちが提供したかったのは次のものです。

  • 簡単にデプロイできる、実用レベルの本番環境対応Kubernetesアーキテクチャ
  • パートナー製品がKubernetes上でどのように動作するかを明確に示すプラットフォーム
  • Kubernetes Ingressコントローラーを簡単にビルドしてデプロイできるプッシュボタン
  • 将来の製品統合およびアライアンス連携に向けたテスト環境
  • プラグイン可能なデプロイメントフレームワーク
  • 検出と導入を容易にするオープンソースコードの単一リポジトリ

以下は、プラットフォームの初期バージョンで採用した設計とパートナーシップに関する方針です(次期バージョンの計画については「バージョン2で統合をさらに拡充し、柔軟性を向上」をご覧ください)。F5は、リファレンスアプリをパートナーが参加しやすいものにすることが、パートナーとコミュニティ双方のエンゲージメントを促進する鍵になると確信しています。

コードのデプロイ方法

サンプルアプリケーションをインストールしてデプロイするには、起動スクリプトを呼び出すコマンドを1つ実行します。これにより、以下のPulumiプロジェクトが記載された順序で実行されます。各プロジェクト名は、リポジトリのルートディレクトリを基準とするディレクトリ名に対応しています。詳細については、READMEを参照してください。

vpc - Defines and installs VPC and subnets to use with EKS  └─eks - Deploys EKS
    └─ecr - Configures ECR for use in EKS cluster
      └─kic-image-build - Builds new NGINX Ingress Controller image
        └─kic-image-push - Pushes image built in previous step to ECR
          └─kic-helm-chart - Deploys NGINX Ingress Controller to EKS 
                             cluster
            └─logstore - Deploys Elastic log store to EKS cluster
              └─logagent - Deploys Elastic (filebeat) logging agent to 
                           EKS cluster
               └─certmgr - Deploys cert-manager.io Helm chart to EKS 
                           cluster
                 └─anthos - Deploys Bank of Anthos application to EKS 
                            cluster

バージョン2で統合機能と柔軟性がさらに向上

初期段階の取り組みでは、Kubernetes環境に必要なすべてのインテグレーションを提供できない可能性があると認識しています。Platform Opsが目指すのは、無制限ではなく、適切な選択肢を提供することです。Platform Ops、DevOps、開発者の各チームが新しいリファレンスプラットフォームをより簡単に試し、導入を検討できるよう、近日中に以下を含む多くの改善を予定しています。

  • Digital Ocean、OpenShift、Rancher、vSphereなどのKubernetes環境を構築
  • NGINX Controller>と統合し、NGINX Plus Ingress Controllerを管理および監視します[編集者 – NGINX Controllerは現在、F5 NGINX Management Suiteです。]
  • すぐに使える設定を提供:NGINX App Protect
  • 次のようなF5の製品やサービスと統合:BIG‑IP、Cloud Services、Volterra
  • 連携対象:NGINX Service MeshおよびIstioベースのAspen Mesh
  • ネイティブに連携:Terraformおよびその他の自動化ツール
  • その他のCI/CDオプションをサポート
  • インフラストラクチャサービスとアプリケーションサービス向けに、個別または複数のクラスターをデプロイ

私たちの取り組みが、ほかのリファレンスプラットフォームのフレームワークとなり、差別化されたあらゆる種類のモダンアプリケーションを構築する際に「自由に取り入れられる」出発点となることを願っています。Kubernetesは、モダンアプリケーションの構築に加え、プラットフォーム運用とシフトレフト文化の推進にも非常に強力な仕組みです。そのため、私たちのリファレンスアーキテクチャは、拡張性とプラグイン性が高いほど有用です。コミュニティの皆さまがこの取り組みをどのように評価し、そして何より、これを活用して何を構築するのかを楽しみにしています。

リファレンスアーキテクチャを使い始める

リファレンスプラットフォームをダウンロードして、ぜひお試しください。ご意見や、今後開発してほしい機能をお聞かせください。プルリクエストも大歓迎です。コミュニティとすべての開発者に成果を還元する、モダンで適応性に優れ、自由に再利用できる次世代アプリケーションを、皆さまとともに構築できることを楽しみにしています。

関連記事

この記事はシリーズの一部です。MARAに順次機能を追加するのに合わせて、詳細をブログで公開しています。


共有

関連するブログ記事

チュートリアル:NGINXを使用してアプリケーション向けにOpenTelemetryを構成する
NGINX | 2024/01/18

チュートリアル:NGINXを使用してアプリケーション向けにOpenTelemetryを構成する

OpenTelemetryを使用してNGINXサーバーの状態と健全性をより明確に把握することで、問題のトラブルシューティングを行い、Webアプリケーションのパフォーマンスを向上できます。

AkitaのNGINX Plus認定モジュールでAPIエンドポイントの問題を特定・修正
NGINX | 2023/05/31

AkitaのNGINX Plus認定モジュールでAPIエンドポイントの問題を特定・修正

Akita SoftwareのAPIオブザーバビリティ向け新しいNGINX Plus Certified Moduleを活用して、APIエンドポイントの問題をより迅速に特定し、修正できます。

JavaプロジェクトをスキャフォールディングしてKubernetesネイティブアプリを構築する方法
NGINX | 2023/02/09

JavaプロジェクトをスキャフォールディングしてKubernetesネイティブアプリを構築する方法

Red HatのシニアプリンシパルデベロッパーアドボケイトであるDaniel Oh氏が、Javaプロジェクトをゼロから構築するためのひな形を作成し、Kubernetesネイティブアプリケーションとしてビルドする方法を解説します。

F5 NGINXaaS for Azureのご紹介:Microsoft Azureでネイティブに利用できるSaaS型ロードバランシング
NGINX | 2022/05/24

F5 NGINXaaS for Azureのご紹介:Microsoft Azureでネイティブに利用できるSaaS型ロードバランシング

NGINXaaS for Azureは、NGINX PlusをAzureネイティブのSaaSとして利用できるサービスです。NGINXの設定を容易にリフト&シフトできるため、クラウド導入とモダンアプリの展開を加速できます。

SELinuxでNGINXおよびNGINX Plusを使用する
NGINX | 2018/08/17

SELinuxでNGINXおよびNGINX Plusを使用する

Red Hat Enterprise Linux(RHEL)および関連ディストリビューションでSecurity-Enhanced Linux(SELinux)を有効にすると、デフォルト設定によりNGINXとNGINX Plusの一部の操作が制限されます。この記事では、すべての機能を利用できるようにSELinuxの設定を変更する方法について説明します。

NGINX PlusによるAWS Auto Scalingグループの負荷分散
NGINX | 2017/03/06

NGINX PlusによるAWS Auto Scalingグループの負荷分散

新しいnginx-asg-sync統合ソフトウェアにより、NGINX PlusはAWS Auto Scalingグループの負荷を直接分散できるため、クラウドでの負荷分散がさらに柔軟になります