NGINXによるKubernetesのTCPおよびUDPトラフィックの負荷分散

NGINX | 2022年6月07日

[編集部—この記事は、包括的なeBook『Managing Kubernetes Traffic with F5 NGINX: A Practical Guide』からの抜粋です。今すぐ無料でダウンロード。]

NGINX Ingress Controllerは、HTTPトラフィックに加えてTCPおよびUDPトラフィックも負荷分散するため、以下をはじめとする、これらのプロトコルを使用する幅広いアプリケーションやユーティリティのトラフィック管理に利用できます。

  • MySQL、LDAP、MQTT – 多くの一般的なアプリケーションで使用されるTCPベースのアプリ
  • DNS、syslog、RADIUS – エッジデバイスや非トランザクション型アプリケーションで使用されるUDPベースのユーティリティ

次のような状況では、NGINX Ingress ControllerによるTCPおよびUDPの負荷分散も、Kubernetesアプリケーションにネットワークトラフィックを分散する効果的なソリューションです。

  • エンドツーエンド暗号化(EE2E)を使用し、NGINX Ingress Controllerではなくアプリケーションで暗号化と復号を処理している場合
  • TCPまたはUDPベースのアプリケーションに高性能な負荷分散が必要な場合
  • 既存のネットワーク(TCP/UDP)ロードバランサーをKubernetes環境に移行する際の変更を最小限に抑えたい

NGINX Ingress Controllerには、TCP/UDPロードバランシングをサポートする2つのNGINX Ingressリソースが用意されています。

  • GlobalConfigurationリソースは通常、クラスター管理者がDevOpsチーム向けに使用可能なTCP/UDPポート(listeners)を指定するために使用します。各NGINX Ingress Controllerデプロイメントに設定できるGlobalConfigurationリソースは1つだけです。
  • TransportServerリソースは通常、DevOpsチームがアプリケーションのTCP/UDP負荷分散を構成するために使用します。NGINX Ingress Controllerは、管理者がGlobalConfigurationリソースで設定したポートのみをリッスンします。これにより、ポート間の競合を防止できます。また、DevOpsチームが外部の公開サービスに公開できるポートを、管理者が安全であると事前に判断したものに限定することで、セキュリティをさらに強化できます。

次の図は、GlobalConfigurationリソースとTransportServerリソースの使用例を示しています。gc.yamlでは、クラスター管理者がGlobalConfigurationリソースにTCPリスナーとUDPリスナーを定義します。ts.yamlでは、DevOpsエンジニアが、MySQLデプロイメントにトラフィックをルーティングするTransportServerリソース内でTCPリスナーを参照します。

GlobalConfigurationリソースとTransportServerリソースのユースケースを示すトポロジ図

The GlobalConfiguration resource in gc.yaml のGlobalConfigurationリソースでは、2つのリスナーを定義しています。syslogサービスに接続するポート514のUDPリスナーと、MySQLサービスに接続するポート5353のTCPリスナーです。

コード例を読み込み中…

Lines 6–8 of the TransportServer resource in ts.yamlのTransportServerリソースの6~8行目では、gc.yamlで定義されたTCPリスナーを名前(mysql-tcp)で参照し、9~14行目では、TCPトラフィックをアップストリームのmysql-dbに送信するルーティングルールを定義しています。

コード例を読み込み中…

この例では、DevOpsエンジニアがMySQLクライアントを使用して、構成が機能していることを確認します。これは、MySQLデプロイメント内のrawdata_content_schemaデータベースにあるテーブルの一覧が出力されることで確認できます。

$ echo “SHOW TABLES” | mysql –h <external_IP_address> -P <port> -u <user> –p rawdata_content_schema Enter Password: <password>
Tables_in_rawdata_content_schema
authors
posts

UDPトラフィック用のTransportServerリソースも同様に設定します。完全な例については、GitHubのNGINX Ingress Controllerリポジトリにある「基本的なTCP/UDPロードバランシング」を参照してください。高度な知識を持つNGINXユーザーは、同リポジトリの「stream-snippets」ConfigMapキーを使用して、ネイティブのNGINX設定でTransportServerリソースを拡張できます。詳しくは、「TCP/UDPロードバランシングのサポート」の例を参照してください。

TransportServerリソースで設定できる機能の詳細については、NGINX Ingress Controllerのドキュメントを参照してください。

この記事は、包括的なeBook『NGINXによるKubernetesトラフィック管理:実践ガイド』からの抜粋です。今すぐ無料でダウンロードできます。

NGINX PlusベースのNGINX Ingress Controllerを、30日間の無料トライアルで今すぐお試しいただくか、ユースケースについてご相談ください。


共有

著者について

Amir Rawdat
Amir Rawdatソリューションエンジニア

Amir Rawdatのその他のブログ記事

関連するブログ記事

チュートリアル: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グループの負荷を直接分散できるため、クラウドでの負荷分散がさらに柔軟になります