Kubernetes Ingressとは
クラウドネイティブNow

小峰 洋一

F5ネットワークスジャパン合同会社
ソリューションアーキテクト

はじめに

コンテナ環境が広がりを見せるなか、「ミッションクリティカル」な要件が必要なコンテナアプリケーションも増えてきています。本記事では、ミッションクリティカルなKubernetes上のコンテナアプリケーションを外部に公開する際に必要な、Kubernetes Ingress(以下、Ingress)についてご紹介します。これからKubernetesを始める皆様にもご参考にしていただけますと幸いです。

Ingressとは

Kubernetes上で、アプリケーションを構築・運用する際に重要な役割を果たすモジュールの1つである「Ingress」とは一体何者でしょうか。

Ingressとは

  • クラスター外からクラスター内Serviceへの、HTTPとHTTPSのルートを公開します。トラフィックのルーティングは、Ingressリソース上で定義されるルールによって制御されます
  • Serviceに対して外部疎通できるURL、負荷分散トラフィック、SSL/TLS終端の機能や名前ベースの仮想ホスティングを提供するように設定できます。Ingressコントローラーは通常はロードバランサーを使用してIngressの機能を実現しますが、エッジルーターや追加のフロントエンドを構成して、トラフィックの処理を支援することもできます

Ingressファンアウト

  • 出典
    Kubernetes, リクエストのシンプルなルーティング, https://kubernetes.io/ja/docs/concepts/services-networking/ingress/, (参照 2023-04-10)

上図の「Ingress管理下のロードバランサー」や「Ingress」がトラフィックを処理する部分であり、使用するモジュールによってどちらで処理するかが変わってきます。いくつかの例については後述します。
Ingressとは「Kubernetes上に複数あるServiceに対して、リクエストをパスやヘッダー、Cookie等の値をみて振り分けるKubernetesのL7ロードバランサーみたいなもの」。わかりやすく、誤解を恐れず表現すると「Ingress = Kubernetes上のL7ロードバランサー」です。

Ingressには主にIngressリソースとIngressコントローラーがあり、IngressリソースでL7ロードバランサーの設定を行い、その設定をIngressコントローラーが理解して処理をします。

Ingressリソース

Ingressの機能を実現するための動作、振る舞いを定義する設定ファイル、マニフェストファイルです。

下記がIngressリソースの例となります。
この場合「/foo」で始まるパスのリクエストを受信した場合「service1」に振り分け、「/bar」で始まるパスで受信した場合「service2」に振り分けます。

Ingressリソース例

  • 出典
    Kubernetes, リクエストのシンプルなルーティング, https://kubernetes.io/ja/docs/concepts/services-networking/ingress/, (参照 2023-04-10)

Ingressコントローラー

Ingressリソースを作成しても、それを処理する実態がなければ動きません。Ingressリソースの設定を実現するモジュール、それがIngressコントローラーとなります。Ingressコントローラーとして提供されているモジュールがいくつかありますので、次で紹介します。

Ingress機能を実現するモジュール

追加のコントローラー

  • 出典
    Kubernetes, 追加のコントローラー, https://kubernetes.io/ja/docs/concepts/services-networking/ingress-controllers/,(参照2023-04-10)

世の中たくさんのIngressコントローラーが提供されており、上記がすべてではありません。他にもいくつかありますが、それらの中から最適なモジュールを選ぶ必要があります。ただし、すべてが同じ仕組みで動作しているわけではありませんので、環境や実現したい機能を考慮し、慎重に検討する必要があります。
ここでは仕組みの違いについて1つ挙げてみます。

例えばNGINXのように、NGINX Ingress ControllerのPodがKubernetes上で稼働しており、NGINXがIngressリソースを解釈してトラフィックを処理する、というケースはわかりやすいと思います。それでは下記のような場合はいかがでしょうか?

  • Amazon Web Services(AWS)上でApplication Load Balancer(ALB)の後ろにAmazon Elastic Kubernetes Service (Amazon EKS) を構築している場合、IngressコントローラーはALB自体なのか
  • オンプレミス環境でBIG-IP(F5Networks社製ロードバランサー)の後ろにKubernetesを構築している場合、IngressコントローラーはBIG-IPなのか

IngressコントローラーはIngressリソースを処理するモジュールではありますが、必ずしも「トラフィックを処理するLoad Balancer」と「Ingressリソースを解釈するモジュール」が同一であるとは限りません。上記のケースは、Ingressリソースを解釈するAWS Load Balancer Controller(旧ALB Ingress Controller)というPodがAmazon EKS上で動作していたり、F5 Container Ingress ServiceというPodがKubernetes上で動作していたり、前段のLoad Balancerに対してIngressリソースの設定を自動的に投入し、前段のLoad Balancerがトラフィックを処理する、というケースになります。

どのIngressコントローラーを使うべきか、参考情報として人気ランキングを掲載しておきます。情報を参考に、最適なIngressを選択してください。

Ingressコントローラー人気ランキング

  • 出典
    CNCF SURVEY 2020, p.17, https://www.cncf.io/wp-content/uploads/2020/11/CNCF_Survey_Report_2020.pdf, (参照2023-04-10)

BIG-IPと富士通クラウドサービスとの連携

最後に、富士通のクラウドサービス「FUJITSU Hybrid IT Service FJcloud(FJcloud-O)」のKubernetes Ingressの1つの実現方法についてご紹介します。

FJcloud-OではサービスメニューからF5 BIG-IPをご利用いただくことができ、BIG-IPは上記にありますとおり世の中で5番目に多く使われているKubernetes Ingressモジュールとなります。FJcloud-O環境の手前にBIG-IPを配置し、コンテナアプリとのシームレスな連携を自動的に行う事ができます。連携を実現する1つのコンポーネントがF5 Container Ingress Service(以下、F5 CIS)であり、下記のようにFJcloud-O上のPodとして動作します。

BIG-IPと富士通クラウドサービスとの連携

F5 CISが実現する主な機能は下記になります。

  • KubernetesのマニフェストファイルでBIG-IPの設定が可能
  • Pod数の増減を検知し、BIG-IPのプールメンバーと自動的に同期

F5 CISによって、BIG-IPの管理もCICDツールから行えるため、ネットワーク機能を含めた理想的なCICD環境ができます。またBIG-IPが得意とするセキュリティ機能(ネットワークセキュリティやアプリケーションセキュリティ)も統合できますので、セキュリティも含めたCICD、Infrastructure as Code/Security as Codeも実現できます。

BIG-IPを触ってみたことがある方、ぜひ今までの知見を活かし、BIG-IP + FJcloud-Oの構成をご検討くださいますと幸いです。
またF5社では、BIG-IPだけではなく、世の中でKubernetes Ingressとして一番人気のNGINXもご提供しています。また、NGINX Ingress ControllerのメリットやBIG-IPとの役割分担等もご紹介していきます。

関連情報

当社が提供する関連サービスの詳細は下記ページをご覧ください

F5ネットワークスジャパン合同会社が提供する製品の詳細は下記ページをご覧ください。

本コンテンツに関するお問い合わせ

お電話でのお問い合わせ

富士通コンタクトライン(総合窓口)

0120-933-200

受付時間:9時~12時および13時~17時30分
(土曜日・日曜日・祝日・当社指定の休業日を除く)

Webでのお問い合わせ

当社はセキュリティ保護の観点からSSL技術を使用しております。

ページの先頭へ