Kubernetes Ingressとは

公開日 2020年04月30日
大きなピンクのモニターの横に明るいピンクの画面があり、黒い背景の照明が付いた暗い表面にマウスを置いたノートPC。
By Ravi Saraswathi

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を見て、記事の後半でサービスを比較します。

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 DevOps

DevOpsとは

Andrea Crawfordが、DevOpsとは何か、DevOpsの価値、そしてDevOpsのプラクティスとツールがアイデア考案から本番環境までのソフトウェア・デリバリー・パイプライン全体でアプリケーションを動かすのにどのように役立つかについて説明します。IBMのエキスパートが指導するこのカリキュラムは、ビジネス・リーダーが成長を促進するAI投資の優先順位付けに必要な知識を得られるように設計されています。

Ingress、ClusterIP、NodePort、LoadBalancerの比較

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

ClusterIP

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

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

NodePort

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

NodePortは、静的ポート番号でサービスを公開するために使用される仮想マシン(VM)です。主に非本番環境でサービスを公開するために使用されます。

ロードバランサー

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

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

Ingress

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

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

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

概要

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

著者

Ravi Saraswathi

IBM Chief Architect

IBM Blog

関連ソリューション
IBM Instana Observability

AIとオートメーションの力を活用することで、問題がアプリケーションスタック全体でプロアクティブに解決します。

IBM Instana Observabilityはこちら
DevOpsソリューション

DevOpsソフトウェアとツールを使用して、複数のデバイスや環境でクラウドネイティブ・アプリを構築、デプロイ、管理します。

DevOpsソリューションはこちら
クラウド・コンサルティング・サービス

ビジネスの俊敏性と成長を加速—IBMのクラウド・コンサルティング・サービスを利用して、あらゆるプラットフォーム上のアプリケーションを継続的にモダナイズしまします。

クラウド・コンサルティング・サービスはこちら
次のステップ

IBM Instana®によるプロアクティブな問題検知から、スタック全体にわたるリアルタイムの洞察まで、クラウドネイティブ・アプリケーションの安定した稼働を維持できます。

  1. IBM Instanaの詳細を見る
  2. DevOpsソリューションはこちら