Kubernetes Ingressとは
クラウドネイティブNow
小峰 洋一
F5ネットワークスジャパン合同会社
ソリューションアーキテクト
はじめに
コンテナ環境が広がりを見せるなか、「ミッションクリティカル」な要件が必要なコンテナアプリケーションも増えてきています。本記事では、ミッションクリティカルなKubernetes上のコンテナアプリケーションを外部に公開する際に必要な、Kubernetes Ingress(以下、Ingress)についてご紹介します。これからKubernetesを始める皆様にもご参考にしていただけますと幸いです。
Ingressとは
Kubernetes上で、アプリケーションを構築・運用する際に重要な役割を果たすモジュールの1つである「Ingress」とは一体何者でしょうか。
Ingressとは
- クラスター外からクラスター内Serviceへの、HTTPとHTTPSのルートを公開します。トラフィックのルーティングは、Ingressリソース上で定義されるルールによって制御されます
- Serviceに対して外部疎通できるURL、負荷分散トラフィック、SSL/TLS終端の機能や名前ベースの仮想ホスティングを提供するように設定できます。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」に振り分けます。
-
出典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を選択してください。
-
出典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として動作します。
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ネットワークスジャパン合同会社が提供する製品の詳細は下記ページをご覧ください。
本コンテンツに関するお問い合わせ
お電話でのお問い合わせ
Webでのお問い合わせ
当社はセキュリティ保護の観点からSSL技術を使用しております。