Kubernetes コンテナーのネットワークの概念

完了 100 XP

Kubernetes は、コンテナー化されたワークロードのデプロイ、スケーリング、管理を自動化するための、移植可能で拡張可能なオープンソース プラットフォームです。 オーケストレーション プラットフォームとしての Kubernetes は、サービスとしてのプラットフォーム (PaaS) やサービスとしてのインフラストラクチャ (IaaS) のオファリングと同様に、使いやすさと柔軟性を提供します。

重要

Kubernetes のネットワークを構成するには、仮想ネットワーク、ロード バランサー、リバース プロキシなどの概念を理解する必要があります。

クラスターとノード

Kubernetes はクラスターに基づいています。 単一の仮想マシンの代わりに、1 つの仮想マシンとして連携する、ノードと呼ばれる複数の仮想マシンを使用します。 Kubernetes では、プライマリ ノードと 1 つ以上のワーカー ノードで構成されるクラスター アーキテクチャが使用されます。 プライマリ ノードは、API サーバー、スケジューラ、コントローラー マネージャーなどのコントロール プレーン コンポーネントを実行します。 ワーカー ノードは、kubeletkube-proxy、コンテナー ランタイムなどのデータ プレーン コンポーネントを実行します。

Diagram showing how Kubernetes uses a cluster architecture that consists of a primary node and one or more worker nodes.

kube-proxy コンポーネントはローカル クラスター ネットワークを担当し、各ノードで実行されます。 これにより、各ノードが一意の IP アドレスを確実に持つようになります。 また、IP テーブルと IP 仮想サーバーを使用して、トラフィックのルーティングと負荷分散を処理する規則も実装します。 このプロキシ自体は DNS サービスを提供しません。 CoreDNS に基づく DNS クラスター アドオンが推奨され、既定でインストールされます。

ポッド

Kubernetes "ポッド" によって、コンテナーとアプリケーションが論理構造にグループ化されます。 これらのポッドにはインテリジェンスがなく、1 つ以上のアプリケーション コンテナーで構成されます。 各ポッドには IP アドレス、ネットワーク ルール、公開されたポートがあります。

Diagram showing how a Kubernetes pod groups containers and applications into a logical structure.

Kubernetes デプロイは、ポッドの進化です。 デプロイでは、ポッドをインテリジェントなオブジェクトにラップし、それにより、ポッドを "スケール アウト" することができます。アプリケーションを簡単に複製したり、スケーリングしたりして、より多くの負荷をサポートすることができます。複雑なネットワーク ルールを構成する必要はありません。

抽象化レイヤーのリソース

アプリケーションへのアクセスまたはアプリケーション コンポーネント間のアクセスを可能にするため、Kubernetes には、仮想ネットワークに対する抽象化レイヤーが用意されています。 Kubernetes ノードは仮想ネットワークに接続され、ポッドの受信接続と送信接続を実現します。 これらのネットワーク機能を提供するために、各ノードで kube-proxy コンポーネントが実行されます。

Kubernetes では、以下のことを行えます。

  • Service によってポッドを論理的にグループ化し、IP アドレスまたは DNS 名を使用して特定のポートへの直接アクセスを実現します。
  • ServiceType を使用すると、必要な Service の種類を指定できます。
  • ロード バランサーを使用してトラフィックを分散できます。
  • "イングレス コントローラー" を使用して、アプリケーションのトラフィックの第 7 層のルーティングも実現できます。
  • クラスター ノードの送信 (エグレス) トラフィックを制御できます。
  • ポッドへのネットワーク トラフィックのセキュリティ保護とフィルター処理は、"ネットワーク ポリシー" を使うことで可能です。

Kubernetes におけるネットワーク

Kubernetes には、クラスターのネットワークを実装する方法に関して固有の要件があります。 選択した構成は、クラスター ネットワークでアプリを公開する方法とデータを格納する方法の選択肢に影響を与えます。 通信を簡単にするため、Kubernetes ではネットワークを次のような方法で構成することが想定されています。

  • ノード間でネットワーク アドレス変換 (NAT) を使用せずにポッドが相互に通信できる。
  • ノードとポッドが、NAT なしで相互に通信できます。
  • ノード上のエージェントからすべてのノードおよびポッドと通信できる。

コンテナーの構成とその中のデータは、実行の間、永続的ではありません。 コンテナーを削除すると、ボリュームを使用するように構成されていない限り、すべての情報が失われます。 これは、コンテナーのネットワーク構成とそれに割り当てられているすべての IP アドレスにも当てはまります。

デプロイはポッドを論理的にグループ化したものです。 物理的なワークロードとは見なされず、IP アドレスは割り当てられません。 各ポッドには自動的に IP アドレスが割り当てられ、ポッドが破棄されると失われます。 この動作のため、手動によるネットワーク構成の戦略は複雑になります。

Windows コンテナーの Kubernetes ネットワーク オプション

Windows コンテナーを使用して Kubernetes をデプロイする場合、2 つのネットワーク オプションがあります。サービスイングレス コントローラーです。 これらのオプションを使用するために、Windows は Container Network Interface (CNI) プラグインに依存します。

アプリケーション ワークロードに対するネットワークの構成を簡略化するため、Kubernetes では、サービスを使用してポッドのセットが論理的にグループ化され、ネットワーク接続が提供されます。 サービスはポッドのグループのエントリ ポイントとして機能し、静的 IP アドレスを提供します。 トラフィックはグループのサービスに到着し、ラウンドロビン パターンで各ポッドに分散されます。 時間の経過と共にポッドの IP アドレスが変化すると、サービスはその変化を追跡して、ポッドへのネットワーク トラフィックの正しいフローを確保します。

Kubernetes で実行されるコンテナー化されたアプリケーションは、インターネット経由でデータを送受信する必要があります。 Kubernetes は、イングレス コンポーネントとエグレス コンポーネントを使用してこの通信をサポートします。 イングレス コントローラーによって、サービスに接続できるトラフィックとソースを指定します。 エグレス コントローラーによって、インターネット ゲートウェイを介してアプリを外部エンティティに接続できます。

CNI プラグインにより、Kubernetes がコンテナー ネットワークに異なるネットワーク インターフェイスを使用できます。 プラグインによってポッドをネットワークに接続し、ポッドの IP アドレスを割り当てます。 これらは Windows ホスト ネットワーク サービス (HNS) およびホスト コンピューティング サービス (HCS) と対話して、Windows コンテナー用のネットワーク リソースを作成および管理します。 プラグインの例としては、Calico、Flannel、Azure CNI などがあります。

Kubernetes ServiceTypes

目的のサービスを構成するために、次のいずれかの Kubernetes ServiceTypes を指定できます。

  • ClusterIP では、クラスター内で使用する内部 IP アドレスを作成します。 このサービスは、クラスター内で他のワークロードをサポートする内部専用アプリケーションに適しています。 これは、サービスのタイプを明示的に指定しない場合に使用される既定値です。

Diagram showing how ClusterIP creates an internal IP address for use within the cluster.

  • NodePort では、基になるノードに対してポート マッピングを作成し、ノードの IP アドレスとポートを使ってアプリケーションに直接アクセスできるようにします。

Diagram showing how NodePort creates a port mapping on the underlying node that allows the application to be accessed directly with the node IP address and port.

  • LoadBalancer では、ロード バランサー リソースを作成し、外部 IP アドレスを構成して、要求されたポッドをロード バランサーのバックエンド プールに接続します。 顧客のトラフィックによるアプリケーションへのアクセスを許可するために、目的のポート上に負荷分散規則が作成されます。

Diagram showing how LoadBalancer creates a load balancer resource, configures an external IP address, and connects the requested pods to the load balancer backend pool.

受信トラフィックの HTTP/S 負荷分散について、もう 1 つのオプションはイングレス コントローラーを使用することです。

  • ExternalName では、アプリケーションに簡単にアクセスできるように特定の DNS エントリを作成します。

Kubernetes イングレス

Kubernetes イングレス コンポーネントは、クラスターの外部からクラスター内のサービスへの HTTP および HTTPS トラフィックのルートを公開します。 イングレス ルートを定義するには、"イングレス規則" を使用します。 これらのルートが定義されていない受信トラフィックはすべて、Kubernetes クラスターによって拒否されます。

Diagram showing how the Kubernetes ingress component exposes routes for HTTP and HTTPS traffic from outside a cluster to services inside the cluster.

イングレス コントローラー

イングレス コントローラーは、Kubernetes サービスに対して構成可能なトラフィック ルーティングを提供するソフトウェアです。 個別の Kubernetes サービスのイングレス ルールとルートを構成するには、Kubernetes イングレス リソースが使われます。 イングレス コントローラーとイングレス ルールを使用することにより、1 つの IP アドレスを使用して、Kubernetes クラスター内の複数のサービスにトラフィックをルーティングできます。 環境にコントローラーをデプロイした後、イングレス マニフェストを作成してデプロイできます。 Kubernetes は、イングレス コントローラーを使ってクラスター内のイングレスの構成を管理し、いくつかの機能を提供します。

イングレス規則

イングレス規則により、トラフィックの送信元と、クラスター内でのその送信先が定義されます。 イングレス配置マニフェスト ファイルにイングレス規則を定義します。 これらの規則は、マニフェスト ファイルの rules キーで定義します。 各規則は、その規則を説明する値のセットです。

イングレス注釈

注釈を使用すると、イングレス構成など、ワークロードの非依存のメタデータをアタッチすることができます。 注釈は、リソースの特定の構成を定義する内部ラベルと考えることができます。 たとえば、名前の書き換えやペイロードの制限をサポートする特定のイングレス コントローラーを使用することができます。

ネットワーク ポリシー

Kubernetes には、ポッド間のトラフィック フローを制御するためのネットワーク ポリシー機能があります。 割り当てたラベル、名前空間、トラフィック ポートの設定に基づいて、トラフィックを許可または拒否できます。 ネットワーク ポリシーは、Kubernetes ポッド間のトラフィックを制御するのに最適なクラウドネイティブのアプローチを提供します。


次のユニット: Azure Kubernetes Service を使う Windows コンテナー ネットワーク

前へ 次へ