Kubernetes ネットワーク
Kubernetes ネットワークとは
Kubernetes(K8s とも呼ばれます)は、マシンのクラスタ全体にわたるアプリケーション コンテナの展開、スケジューリング、監視、維持、運用を管理および自動化するために使用されるオープンソースのプラットフォームです。
Google が開発した Kubernetes によるネットワークを活用すると、管理者はプライベート、パブリック、およびハイブリッドクラウドの各インフラストラクチャにわたってワークロードを移動することができます。開発者は Kubernetes を使用することで、必要なインフラストラクチャとともにアプリケーションをパッケージ化して、新しいバージョンを迅速に展開できます。
Kubernetes コンポーネント間の相互通信や、ほかのアプリケーションとの通信は、Kubernetes ネットワークを利用して行われます。Kubernetes プラットフォームは、フラットなネットワーク構造に基づいているため、ほかのネットワーク プラットフォームとは異なり、ホスト ポートとコンテナ ポートをマッピングする必要がありません。Kubernetes プラットフォームでは、分散システムを実行する方法が提供され、ポートを動的に割り当てることなくアプリケーション間でマシンを共有することができます。
関連トピック
Kubernetes ポッド ネットワークとは
Kubernetes ポッド ネットワークは相互に関連する複数のコンポーネントを結び付けます。
- ポッド:Kubernetes ポッドは、エンドウ豆の鞘やクジラの群れのような自然界に見られるポッドからヒントを得た命名です。ポッドは、同じノードのネットワークやストレージ リソースを共有するコンテナのグループです。ポッドは、API サーバによって作成されコントローラによって配置されます。各ポッドには IP アドレスが割り当てられ、ポッド内のすべてのコンテナは同じストレージ、IP アドレス、ポート スペース(ネットワーク ネームスペース)を共有します。
- コンテナ:Kubernetes コンテナは、オペレーティング システム(OS)を複数のアプリケーションの間で共有する仮想マシンに似ています。それぞれ独自のファイルシステム、CPU、メモリ、プロセス スペースを持っています。コンテナは常にポッド内で作成され、1 つのポッド内に複数のコンテナを作成することができます。ポッド内のコンテナはすべて協調して移動し、スケジュールされ、削除されます。ポッドはクラウド間で移動できます。コンテナはコンテナ ネットワークを通してほかのコンテナ、ホスト、外部ネットワークに接続できます。
- ノード:ポッドは常にワーカー ノード内で実行されます。ノードはコンテナ化されたアプリケーションを実行するマシンです。Kubernetes はクラスタ内のこれらのノードをグループ化します。
- プライマリ ノード:ノード内の各クラスタは、ワーカー ノードを管理するプライマリ ノードを 1 つ以上持っています。プライマリ ノードはクラスタ内の各ノードと通信することも、個々のポッドと直接通信することも可能です。
Kubernetes でのネットワークの動作
Kubernetes プラットフォーム内のコンポーネント(ポッド、コンテナ、ノード、アプリケーション)はそれぞれ異なるネットワークの通信方法を使用して通信を行います。通信には、コンテナ間通信、ポッド間通信、ポッドとサービス間の通信、外部とサービスの間の通信があります。
ポッド間通信は Kubernetes の基盤です。ポッドは、ネットワーク プラグインによって設定されたネットワーク ポリシーに従って相互に通信し、ポッド間にリンクを明示的に作成したり、コンテナ ポートとホスト ポートをマッピングしたりすることなく、ほかのポッドと通信します。ポッドは同じネットワーク ネームスペースを共有しており、固有の IP アドレスを持つため、ネットワーク アドレス変換(NAT)を使用することなく、localhost を使用してすべてのノード上のほかのすべてのポッドを見つけて通信することができます。
Kubernetes ネットワークの課題のひとつは、内部(East-West)トラフィックと外部(North-South)トラフィックの通信をどのようにするかということです。なぜなら内部ネットワークは外部ネットワークから分離されているからです。ただし、ノード間を行き来するトラフィックは、ノードから外部の物理マシンまたは仮想マシンとも行き来します。外部トラフィックを Kubernetes クラスタに取り込む方法はいくつかあります。
- LoadBalancer:LoadBalancer は、特定のサービスをインターネットに外部接続する標準的な方法です。このシナリオでは、ネットワークのロードバランサーはすべての外部トラフィックをサービスに転送します。各サービスはそれぞれ独自の IP アドレスを取得します。
- ClusterIP:ClusterIP は、内部通信を行うためのデフォルトの Kubernetes Service です。ただし、外部トラフィックは、プロキシを経由することで、デフォルトの Kubernetes ClusterIP サービスにアクセスできます。これは、サービスをデバッグする場合または内部ダッシュボードを表示する場合に便利です。
- NodePort:NodePort は、ノードまたは仮想マシン上のポートを開き、これによりトラフィックがポートからサービスに転送されます。これはデモ アプリケーションのような常時使用可能でなくてもよいサービスに使用されることが多い方法です。
- Ingress:Ingress は、ロードバランサー経由でサービスにトラフィックをルーティングするルータまたはコントローラとして機能します。同じ IP アドレスを使用して複数のサービスを公開する場合に便利です。
Kubernetes ネットワークのもうひとつの重要な側面は、コンテナ ネットワーク インターフェイス(CNI)です。CNI はノード間でポッドを接続して、ネットワーク ネームスペースとネットワーク プラグイン間、またはネットワーク プロバイダーと Kubernetes ネットワーク間のインターフェイスとして機能します。CNI プロバイダーとプラグインはさまざまな選択肢が用意されており、それぞれが異なる特徴と機能性を備えています。CNI プラグインには、ポッドがプロビジョニングされたり破棄されたりする場合にネットワークとリソースを動的に構成する機能が備えられています。CNI プラグインは、コンテナが作成されたり削除されたりする場合に IP アドレスをプロビジョニングおよび管理します。Kubernetes は Kubernetes 用のデフォルトのネットワーク プロバイダーですが、Flannel、Calico、Canal、Weave Net などの CNI プラグインは追加の機能を提供します。
Kubernetes ネットワークの実装方法
ネットワーク管理者は、Kubernetes ネットワーク モデルを多岐にわたるさまざまな方法で実装できます。Gartner は、2019 年のデータセンター ネットワーキング分野のマジック クアドラントの「ビジョナリ」として次の Kubernetes ネットワークの具体化例を評価しました。
- Big Switch Networks の Big Cloud Fabric:プライベートクラウド環境で Kubernetes を実行するクラウドネイティブ ネットワーク アーキテクチャ。
- Cumulus NetQ:コンテナ展開に可視性を提供するテレメトリを使用したファブリック検証システム。
- Dell EMC:Kubernetes とコンテナの統合サポートを備えた、従来型アプリケーションとクラウドネイティブ環境の両方をサポートするクラウド プラットフォーム。
- VMware NSX-T:ネイティブ コンテナ ネットワークを含む、マルチクラウドまたはマルチハイパーバイザー環境向けにネットワークを仮想化するネットワークの仮想化とセキュリティ プラットフォーム。
Kubernetes ネットワークに関連する VMware の製品、ソリューション、リソース
VMware NSX:業界をリードする、エンタープライズ向けネットワークおよびセキュリティ仮想化プラットフォーム
VMware NSX Data Center は、ネットワークとセキュリティに関する L2 ~ L7 の包括的な仮想化プラットフォームを提供します。これにより、ネットワーク全体を単一の管理画面から一括して管理できます。
VMware Enterprise PKS
VMware Enterprise PKS は、優れた生産性と効率性を備え、本番環境向けの Kubernetes の展開、実行、管理ができるソリューションです。
VMware NSX によるコンテナ ネットワーク
コンテナ化されたアプリケーションとマイクロサービスに、フルスタックの統合されたネットワークとセキュリティを提供します。
VMware Tanzu
アプリケーションの迅速な構築、オープンソース Kubernetes の実行における一貫性の確保、環境全体の管理における信頼性の向上をサポートします。