Kubernetes Ingressとは

著者

Ravi Saraswathi

IBM Chief Architect

IBM Blog

Kubernetes Ingress の定義

Kubernetes Ingressは、Kubernetesクラスター内のサービスへの外部ユーザー・アクセスを管理するためのルーティング・ルールを提供するAPIオブジェクトです。

この記事では、アプリケーションをKubernetesクラスターの外部に公開する必要がある場合の方法と理由、利用できるさまざまなオプション、Kubernetes Ingressが最も役立つ状況について説明します。このブログでは、Kubernetesの基本を理解していることを前提としていますが、より多くの背景情報が必要な場合は、以下の参考情報をご覧ください。

Kubernetesにデプロイされたアプリケーションを公開するためのオプション

アプリケーションをKubernetesクラスターの外部に公開する方法はいくつかあり、特定のユースケースに基づいて適切なものを選択する必要があります。

この投稿で比較する4つの主なオプションは、ClusterIP、NodePort、LoadBalancerIngressです。それぞれがサービスを公開する方法を提供し、さまざまな状況で役立ちます。サービスは基本的に、利用可能なポッドにトラフィックを均等に分散して自動的に再ルーティングする、アプリケーションのフロントエンドです。サービスは、一連のポッド上で実行されるアプリケーションをネットワーク・サービスとして公開する、抽象的な方法です。ポッドは変更不可能なため、故障しても復元されません。ポッドが故障すると、Kubernetesクラスターは同じノード内または新しいノードに、新しいポッドを作成します。

ポッドやデプロイメントと同様、サービスはKubernetesのリソースです。サービスは、Kubernetesクラスターの外部からの単一アクセス・ポイントを提供し、レプリカ・ポッドのグループに動的にアクセスできるようにします。

Kubernetesクラスター内の内部アプリケーションにアクセスする場合、ClusterIPが推奨される方法です。これはKubernetesのデフォルト設定であり、内部のIPアドレスを使用してサービスにアクセスします。

サービスを外部ネットワーク要求に公開するには、NodePort、LoadBalancer、Ingressが利用可能です。まずIngressを見て、記事の後半でサービスを比較します。

The DX Leaders

AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。登録の際はIBMプライバシー・ステートメントをご覧ください。

ご登録いただきありがとうございます。

ニュースレターは日本語で配信されます。すべてのニュースレターに登録解除リンクがあります。サブスクリプションの管理や解除はこちらから。詳しくはIBMプライバシー・ステートメントをご覧ください。

Kubernetes Ingressの定義と便利な理由

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クラスターにデプロイされたアプリケーションの外部的にアクセス可能なURL
  • 名前ベースの仮想ホストとURIベースのルーティングのサポート
  • ロード・バランシング・ルールとトラフィック、SSL終了

Kubernetes Ingressの簡単な概要を視覚的に確認するには、次の動画をご覧ください。

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クラスターに流入するトラフィックと負荷を管理するには適切なものを選択することが重要です。

IBM Cloud

Red Hat OpenShift AI on IBM Cloud:AIワークロードの導入

Red Hat OpenShift on IBM CloudでAI機能を活用できます。このビデオでは、スケーラブルな機械学習運用プラットフォームを使用して、AIワークロードを効率的に構築、導入、管理する方法について説明します。

Ingress、ClusterIP、NodePort、LoadBalancerの比較

Ingress、ClusterIP、NodePort、LoadBalancerはすべて、外部トラフィックをクラスターに取り込む方法であり、それぞれその実行方法が異なります。それぞれがどのように機能するのか、また、どこで使用するのかを見てみましょう。

ClusterIP

ClusterIPは内部サービス・アクセスに推奨されるオプションであり、内部IPアドレスを使用してサービスにアクセスします。ClusterIPが最適なオプションには、開発中やテスト中のサービス・デバッグ、内部トラフィック、ダッシュボードなどがあります。

NodePort

NodePortは、静的ポート番号でサービスを公開するために使用される仮想マシン(VM)です。これは主に非本番環境でサービスを公開するために使用されます(実際、本番環境での使用は推奨されていません)。例として、NodePortは単一のサービス(複数のサービスのロード・バランス要件なし)を公開するために使用されます。

ロードバランサー

この方法では、外部のLoadBalancerを使用して、サービスをインターネットに公開します。本番環境でLoadBalancerを使用することもできますが、多くの場合、Ingressの使用が推奨されます。

Ingress

Ingressを使用すると、トラフィック・ルーティング・ルールを単一のリソースに統合し、Kubernetesクラスターの一部として実行できます。Kubernetes Ingressが本番環境でサービスを公開する場合に推奨されるオプションとして選ばれる理由には、次のようなものがあります。

  • トラフィック・ルーティングは、Ingressリソースに定義されたルールによって制御されます。
  • IngressはKubernetesクラスターの一部であり、ポッドとして実行されます。
  • 外部のロード・バランサーは高価なため、Kubernetesクラスターの外部で管理する必要があります。Kubernetes Ingressはクラスターの内部から管理されます。

本番環境では、通常、Ingressを使用してアプリケーションをインターネットに公開します。アプリケーションは、ポート80(HTTP)またはポート443(HTTPS)経由でインターネットからアクセスされます。Ingressは、Kubernetesクラスターの外部からKubernetesサービスへのアクセスを可能にするオブジェクトです。

概要

Kubernetes Ingress APIを使用すると、Kubernetesクラスターにデプロイされたアプリケーションを、ルーティング・ルールを単一のソースにまとめてインターネットに公開できます。Ingressを実装するには、クラスター内にIngressコントローラーを構成する必要があります。Ingressコントローラーは、Ingressリソースの情報を処理し、Ingressルールに基づいてトラフィックを許可する役割を担います。上記のガイドラインに基づいてアプリケーションをインターネットに公開するには、適切な構成の適切なサービスを選択することが重要です。

関連ソリューション
IBM Red Hat OpenShift

Red Hat OpenShift on IBM Cloudは、フルマネージド型のOpenShift Container Platform(OCP)です。

Red Hat OpenShiftの詳細はこちら
コンテナ・ソリューション

コンテナ・ソリューションは、セキュリティー、オープンソースのイノベーション、迅速なデプロイメントを活用して、コンテナ化されたワークロードを実行およびスケールアップします。

コンテナの詳細はこちら
クラウド・コンサルティング・サービス 

IBMのクラウド・コンサルティング・サービスで新しい機能にアクセスし、ビジネスの俊敏性を高めましょう。ハイブリッドクラウド戦略や専門家とのパートナーシップを通じて、ソリューションを共創し、デジタル・トランスフォーメーションを加速させ、パフォーマンスを最適化する方法をご覧ください。

クラウド・サービス
次のステップ

フルマネージドのRed Hat OpenShiftプラットフォームをぜひお試しいただくか、または、IBM Cloud Kubernetesエコシステムの柔軟性をご覧ください。ニーズに合わせたスケーラブルで安全なソリューションにより、開発とデプロイメントのプロセスを加速できます。

Red Hat OpenShiftの詳細はこちら Kubernetesはこちら