Kubernetesネットワーキングの基本

Kubernetesネットワーキングの基本

  • ITOps・DevOps
6分で読めます 更新日 May 27, 2021

ポイント: Kubernetesネットワーキングは、クラスター内での通信に不可欠で、コンテナ間の相互作用を管理します。さまざまなネットワーキングタイプと、トラフィックをルーティングするサービスの役割を含みます。

  • ネットワーキングタイプは、NATなしでシームレスな通信を確保します。
  • サービスはトラフィックをポッドにルーティングし、柔軟性を向上させます。
  • CiliumやFlannelなどのツールはKubernetesネットワーキングを最適化します。

Kubernetesネットワーキングは、Kubernetesクラスター内での通信を管理し、容易にする重要な要素です。内部のコンテナ間の通信を処理するなど、幅広い操作を管理します:

  • 内部コンテナ通信の処理
  • コンテナをインターネットに公開

この記事では、主要なKubernetesネットワーキングの概念を紹介します。

Kubernetesにおけるネットワーキング

まず、Kubernetesクラスター内の基本的なネットワーキングタイプを見てみましょう:

  • コンテナ間ネットワーキング
  • ポッド間ネットワーキング
  • ポッドとサービス間のネットワーキング
  • インターネットとサービス間のネットワーキング

次に、それぞれのタイプがクラスター内での接続性を提供する方法を見てみましょう。

Kubernetesクラスター

コンテナ間ネットワーキング

最も基本的な構成では、単一ポッド内のコンテナ間の通信はlocalhostとポート番号を介して行われます。これは、ポッド内のコンテナが同じネットワークネームスペースにあるためです。ネットワークネームスペースは、ルート、ファイアウォールルール、およびネットワークデバイスを含む論理的なネットワーキングスタックであり、ネームスペース内のプロセスに完全なネットワークスタックを提供します。同じ仮想マシン内に複数のネームスペースが存在する可能性があります。Kubernetesでは、すべてのポッドで実行されるpauseコンテナという隠れたコンテナがあります。このコンテナは、ポッド内の他のコンテナが機能しなくてもネームスペースを開いたままにします。新しいネットワークネームスペースは作成される各ポッドに割り当てられます。ポッド内のコンテナはこのネットワークネームスペースをlocalhostを介して使用できます。ただし、ユーザーはポートの競合に注意する必要があります: コンテナが同じポートを使用すると、ネットワーキングの問題が発生します。

ポッド間ネットワーキング

Kubernetesノード内の各ポッドには、専用のIPアドレスと専用のネームスペースが割り当てられます。自動割り当てにより、ユーザーはポッド間のリンクを明示的に作成する必要がありません。これにより、ポッドのネットワーキング操作(ポート割り当て、負荷分散、名前付けなど)を仮想マシンや物理ホストに似た形で処理できます。Kubernetesは任意のネットワークに対して3つの基本的な要件を課します。

  1. ノード上のポッドは、NATなしですべてのノードのすべてのポッドと通信できます。
  2. ノード上のエージェント(システムデーモン、kubelet)は、その特定のノード上のすべてのポッドと通信できます。
  3. ノードのホストネットワーク内のポッドは、NATなしですべてのノードのすべてのポッドと通信できます(ホストネットワークでポッドが実行されることをサポートするLinuxなどのプラットフォームのみ)。

同じノード内のポッド間通信

Kubernetesは、各ポッドに仮想イーサネットアダプターを作成し、ノードのネットワークアダプターに接続します。ネットワークリクエストが行われると、ポッドはポッドに関連付けられた仮想イーサネットデバイスを介して接続し、トラフィックをノードのイーサネットデバイスにトンネルします。Kubernetesノード内には、ノード内のポッド間の通信を促進するcbr0というネットワークブリッジがあります。すべてのポッドはこのネットワークブリッジの一部です。ネットワークリクエストが行われると、ブリッジは正しい宛先(ポッド)をチェックし、トラフィックを指示します。

異なるノード間のポッド間通信

要求されたIPアドレスがポッド内で見つからない場合、ネットワークブリッジはトラフィックをデフォルトゲートウェイに指示します。これにより、クラスター全体でIPを検索します。Kubernetesは各ノードに関連付けられたすべてのIP範囲の記録を保持します。次に、ノード内のポッドには、ノードに割り当てられた範囲からIPアドレスが割り当てられます。クラスター内のIPアドレスにリクエストが行われると、それは:

  1. 要求されたIPのIP範囲を探します。
  2. それを特定のノードに指示し、正しいポッドに指示します。

ポッドとサービス間のネットワーキング

サービスは、トラフィックを一連のポッドにルーティングする抽象化です。言い換えれば、サービスは単一のIPアドレスを一連のポッドにマッピングします。ネットワークリクエストが行われると、サービスは必要なポッドにリクエストをプロキシします。このプロキシサービスは、各ノード内で実行されるKube-proxyというプロセスを介して行われます。サービスは、最初にサービスIPに到達したリクエストに応じて、クラスター内でIPを取得します。その後、ポッドの実際のIPに転送されます。これはKubernetesにおいて重要な機能であり、各ポッドへのネットワーキングの依存性を切り離します。ポッドは、ネットワーク接続を心配することなく作成されたり削除されたりできます。これは、サービスがポッドが変更されると、自動的にポッドのIPでエンドポイントを更新するためです。サービスは、ターゲットとするポッドをラベルセレクターを使用して知っています。ラベルセレクターはKubernetesにおけるコアのグループ化原則です。ラベルセレクターを介して、クライアントやユーザーはオブジェクトのセットを特定できます。

  • ラベルセレクターは、各ポッド内の指定されたラベルを探し、それに応じてサービスと一致させます。
  • セレクターがないと、適切に構成されたサービスはポッドを追跡できず、クラスター内で通信の問題を引き起こします。

Kubernetesクラスター内の内部ルーティングのためのDNS

各クラスターにはDNS解決のための組み込みサービスがあります。

  • 各サービスにはクラスター内にドメイン名が割り当てられています。
  • ポッドにはDNS名が割り当てられています。

(これらは、ホスト名とサブドメインフィールドを使用してYAMLファイルを介して手動で構成できます。) ドメイン名を介してリクエストが行われると、Kubernetes DNSサービスはリクエストを解決し、必要な内部サービスにポイントします。Kube-proxyプロセスは、それをエンドポイントポッドに指示します。

インターネットとサービス間のネットワーキング

上記のセクションでは、Kubernetesクラスターの内部ネットワーキングの基本をカバーしました。次のステップは、コンテナ化されたアプリケーションをインターネットに公開することです。前述のネットワーキングタイプとは異なり、Kubernetesクラスターをインターネットに公開するには、両方が必要です:

  • 基盤となるクラスターインフラストラクチャ
  • ネットワーク構成

トラフィックを処理するために最も一般的に使用される方法は、ロードバランサーを使用することです。Kubernetesでは、ロードバランサーを構成できます。サービスが作成されると、ユーザーは:

  • ロードバランサーのIPアドレスを公開するロードバランサーを指定できます。
  • ロードバランサーにトラフィックを直接送信し、サービスと通信します。

Kubernetesネットワーキングのためのツール

Kubernetes内でネットワーキングを構成するために使用できるツールは多数あり、クラスターが課すすべてのガイドラインと要件を遵守しています。

  • Ciliumは、アプリケーションコンテナ間のネットワーク接続を提供し、保護するためのオープンソースソフトウェアです。CiliumはL7/HTTP対応であり、アイデンティティベースのセキュリティモデルを使用してL3-L7からネットワークポリシーを強制できます。
  • Flannelは、Kubernetesの要件を満たすシンプルなネットワークオーバーレイです。
  • Kube-routerは、Kubernetesネットワーキングのためのターンキーソリューションです。Kube-routerは、デフォルトのKubernetesネットワークコンポーネントの代わりとして、単一のDaemonSet/バイナリからのスリムで強力な代替手段を提供します。
  • Antreaは、Open vSwitchをネットワーキングデータプレーンとして活用するKubernetesネイティブのオープンソースネットワーキングソリューションです。

そして、ここにクラウドベンダー固有のコンテナネットワークインターフェースがあります:

公式のKubernetesドキュメントを参照して、利用可能なネットワークツールの完全なリストを確認してください。

K8sネットワーキングはパフォーマンスを最適化

Kubernetesクラスターのネットワーキングは、ユーザーの要件に合わせて構成でき、コンテナ化されたアプリケーションとクラスターのパフォーマンスを最適化します。

関連資料

これらの投稿は私自身の意見であり、BMCの立場、戦略、または意見を必ずしも反映しているわけではありません。

ITOps・DevOpsの関連記事

The Briefを購読する

このオファーに登録することで、あなたはBMCのプライバシーポリシーを読み、同意したことを確認します。

ありがとう

あなたはThe Briefに登録されました
The Briefはメインフレームとエンタープライズオーケストレーション—BMC AMIとControl-M—および、両者に関するアナリストの研究、顧客の展開、イベントをカバーしています。