IBMニュースレター
The DX Leaders
AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。登録の際はIBMプライバシー・ステートメントをご覧ください。
ニュースレターは日本語で配信されます。すべてのニュースレターに登録解除リンクがあります。サブスクリプションの管理や解除はこちらから。詳しくはIBMプライバシー・ステートメントをご覧ください。
Kubernetes Ingressは、Kubernetesクラスター内のサービスへの外部ユーザー・アクセスを管理するためのルーティング・ルールを提供するAPIオブジェクトです。
この記事では、アプリケーションをKubernetesクラスターの外部に公開する必要がある場合の方法と理由、利用できるさまざまなオプション、Kubernetes Ingressが最も役立つ状況について説明します。このブログでは、Kubernetesの基本を理解していることを前提としていますが、より多くの背景情報が必要な場合は、以下の参考情報をご覧ください。
アプリケーションをKubernetesクラスターの外部に公開する方法はいくつかあり、特定のユースケースに基づいて適切なものを選択する必要があります。
この投稿で比較する4つの主なオプションは、ClusterIP、NodePort、LoadBalancer、Ingressです。それぞれがサービスを公開する方法を提供し、さまざまな状況で役立ちます。サービスは基本的に、利用可能なポッドにトラフィックを均等に分散して自動的に再ルーティングする、アプリケーションのフロントエンドです。サービスは、一連のポッド上で実行されるアプリケーションをネットワーク・サービスとして公開する、抽象的な方法です。ポッドは変更不可能なため、故障しても復元されません。ポッドが故障すると、Kubernetesクラスターは同じノード内または新しいノードに、新しいポッドを作成します。
ポッドやデプロイメントと同様、サービスはKubernetesのリソースです。サービスは、Kubernetesクラスターの外部からの単一アクセス・ポイントを提供し、レプリカ・ポッドのグループに動的にアクセスできるようにします。
Kubernetesクラスター内の内部アプリケーションにアクセスする場合、ClusterIPが推奨される方法です。これはKubernetesのデフォルト設定であり、内部のIPアドレスを使用してサービスにアクセスします。
サービスを外部ネットワーク要求に公開するには、NodePort、LoadBalancer、Ingressが利用可能です。まずIngressを見て、記事の後半でサービスを比較します。
IBMニュースレター
AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。登録の際はIBMプライバシー・ステートメントをご覧ください。
ニュースレターは日本語で配信されます。すべてのニュースレターに登録解除リンクがあります。サブスクリプションの管理や解除はこちらから。詳しくはIBMプライバシー・ステートメントをご覧ください。
Kubernetes Ingressは、Kubernetesクラスター内サービスへの外部ユーザーのアクセス(通常はHTTPS/HTTP経由)を管理するための、ルーティング・ルールを提供するAPIオブジェクトです。Ingressを使用すると、多数のロード・バランサーを作成したり、ノード上で各サービスを公開したりすることなく、トラフィックのルーティング・ルールを簡単に設定できます。そのため、本番環境で使用するのに最適なオプションです。
本番環境では通常、コンテンツベースのルーティング、複数のプロトコルのサポート、認証が必要です。Ingressを使用すると、クラスター内でこれらの機能を構成および管理できます。
Ingressは、Ingress APIオブジェクトとIngress Controllerで構成されています。前述したように、Kubernetes Ingressは、サービスをKubernetesクラスターの外部に公開するための望ましい状態を記述するAPIオブジェクトです。IngressコントローラーはIngress APIの実際の実装であるため、必須です。Ingressコントローラーは、Ingress参考情報を読み取り、処理し、通常はKubernetesクラスター内のポッドとして実行されます。
Ingressは、以下を提供します。
Kubernetes Ingressの簡単な概要を視覚的に確認するには、次の動画をご覧ください。
Kubernetes Ingressがサービスへの外部アクセスを管理するためのルーティング・ルールを提供するAPIオブジェクトである場合、IngressコントローラーはIngress APIの実際の実装です。Ingressコントローラーは通常、外部トラフィックをKubernetesクラスターにルーティングするためのロード・バランサーであり、L4~L7ネットワーク・サービスを担当します。
レイヤー4(L4)とは、OSIネットワーク・スタックの接続レベル、つまりポッド間でラウンドロビン方式でロード・バランシングされた外部接続のことを指します。レイヤー7(L7)は、OSIスタックのアプリケーション・レベルを指し、要求に基づいてポッド間でロード・バランシングされた外部接続を指します。レイヤー7が好まれる傾向にありますが、ご自身のロード・バランシングとルーティング要件を満たすIngressコントローラーを選択する必要があります。
Ingressコントローラーは、Ingressリソースの情報を読み取り、それに応じてそのデータを処理する役割を担います。以下は、Ingressリソースの例です。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
spec:
backend:
serviceName:ServiceName
servicePort:<Port Number>
例えとして、Kubernetes Ingressがコンピューターである場合、Ingressコントローラーはコンピューターを使用してアクションを実行するプログラマーになります。さらに、Ingressルールは、プログラマーにコンピューターを使用して作業を実行するよう指示するマネージャーとして機能します。Ingressルールは、受信HTTPトラフィックを処理するための一連のルールです。ルールのないIngressは、すべてのトラフィックを単一のデフォルト・バックエンド・サービスに送信します。
もう少し言及すると、Ingressコントローラーは、Kubernetesクラスターで実行され、Ingressリソースに従ってHTTPロード・バランサーを構成するアプリケーションです。ロード・バランサーは、クラスター内で実行されるソフトウェアのロード・バランサー、または外部で実行されるハードウェアまたはクラウドのロード・バランサーのいずれかになります。異なるロード・バランサーは、異なるIngressコントローラーを実装する必要があります。
市場ではさまざまなIngressコントローラーが入手可能であり、Kubernetesクラスターに流入するトラフィックと負荷を管理するには適切なものを選択することが重要です。
Ingress、ClusterIP、NodePort、LoadBalancerはすべて、外部トラフィックをクラスターに取り込む方法であり、それぞれその実行方法が異なります。それぞれがどのように機能するのか、また、どこで使用するのかを見てみましょう。
ClusterIPは内部サービス・アクセスに推奨されるオプションであり、内部IPアドレスを使用してサービスにアクセスします。ClusterIPが最適なオプションには、開発中やテスト中のサービス・デバッグ、内部トラフィック、ダッシュボードなどがあります。
NodePortは、静的ポート番号でサービスを公開するために使用される仮想マシン(VM)です。これは主に非本番環境でサービスを公開するために使用されます(実際、本番環境での使用は推奨されていません)。例として、NodePortは単一のサービス(複数のサービスのロード・バランス要件なし)を公開するために使用されます。
この方法では、外部のLoadBalancerを使用して、サービスをインターネットに公開します。本番環境でLoadBalancerを使用することもできますが、多くの場合、Ingressの使用が推奨されます。
Ingressを使用すると、トラフィック・ルーティング・ルールを単一のリソースに統合し、Kubernetesクラスターの一部として実行できます。Kubernetes Ingressが本番環境でサービスを公開する場合に推奨されるオプションとして選ばれる理由には、次のようなものがあります。
本番環境では、通常、Ingressを使用してアプリケーションをインターネットに公開します。アプリケーションは、ポート80(HTTP)またはポート443(HTTPS)経由でインターネットからアクセスされます。Ingressは、Kubernetesクラスターの外部からKubernetesサービスへのアクセスを可能にするオブジェクトです。
Kubernetes Ingress APIを使用すると、Kubernetesクラスターにデプロイされたアプリケーションを、ルーティング・ルールを単一のソースにまとめてインターネットに公開できます。Ingressを実装するには、クラスター内にIngressコントローラーを構成する必要があります。Ingressコントローラーは、Ingressリソースの情報を処理し、Ingressルールに基づいてトラフィックを許可する役割を担います。上記のガイドラインに基づいてアプリケーションをインターネットに公開するには、適切な構成の適切なサービスを選択することが重要です。
Red Hat OpenShift on IBM Cloudは、フルマネージド型のOpenShift Container Platform(OCP)です。
コンテナ・ソリューションは、セキュリティー、オープンソースのイノベーション、迅速なデプロイメントを活用して、コンテナ化されたワークロードを実行およびスケールアップします。
IBMのクラウド・コンサルティング・サービスで新しい機能にアクセスし、ビジネスの俊敏性を高めましょう。ハイブリッドクラウド戦略や専門家とのパートナーシップを通じて、ソリューションを共創し、デジタル・トランスフォーメーションを加速させ、パフォーマンスを最適化する方法をご覧ください。