公開日:2023年11月21日
寄稿者:Stephanie Susnjara、Ian Smalley
Kubernetesネットワーキングは、コンテナ化されたアプリケーションの通信、スケーラビリティ、セキュリティー、外部アクセスを実現するネットワーク・インフラストラクチャーを提供します。ネットワークは複雑で、Kubernetesクラスターの内部(ポッド、ノード、コンテナ、サービスなど)と外部(外部トラフィックなど)に存在するすべての主要コンポーネント間の通信が含まれます。
これらのコンポーネントは、次の4つの異なるネットワーク方式で通信を行っています。
1. コンテナ間のネットワーキング
2. ポッド間のネットワーキング
3. ポッドからサービスへのネットワーキング
4. 外部からサービスへのネットワーキング
アプリケーションのパフォーマンスを確保しながら、市場投入までの時間を短縮したいプラットフォームおよびDevOpsエンジニア向け
IBMニュースレターの購読
Kubernetesという名前は、操舵手またはパイロットを意味するギリシャ語に由来しています。Googleの内部コンテナ・オーケストレーション・プラットフォームであるBorgをベースとするKubernetesは、2014年にオープンソース・ツールとして一般に公開されました。同年、 Googleはオープンソースでベンダーに依存しないクラウドネイティブ・コンピューティングのハブであるクラウドネイティブ・コンピューティング財団(ibm.comの外部サイトに接続します)にKubernetesを寄付しました。それ以来、Kubernetesは、コンテナベースのワークロードの実行に世界で最も広く使用されるコンテナ・オーケストレーションツールになりました。
Kubernetes(「k8s」または「kube」とも呼ばれます)の設計における明確な目的は、コンテナ(コードとその依存関係をすべてパッケージ化したソフトウェアの標準単位)管理の自動化です。このオーケストレーション・ツールは、オンプレミス、プライベートクラウド、パブリッククラウド、ハイブリッドクラウドなど、どのようなインフラ環境でも迅速かつ確実に稼働する点で高く評価されています。
物理ハードウェアを 仮想化する仮想マシン(VM)とは異なり、コンテナはオペレーティング・システム(LinuxやWindowsなど)を仮想化します。各コンテナには、アプリケーションのライブラリと依存関係のみが保持されます。コンテナはホストと同じオペレーティング・システム・カーネルを使用するため、軽量で高速、かつポータブルであると考えられています。
Kubernetesとそのサービス、サポート、ツールのエコシステムは、最新のクラウドインフラとアプリケーションのモダナイゼーションの基盤となっています。Amazon Web Services(AWS)、Google、Microsoft、IBM、Red Hatなど、主要なクラウドプロバイダーはすべて、Platform-as-a-Service(PaaS)とInfrastructure-as-a-Service(IaaS)の機能を強化するために、自社のクラウドプラットフォームにKubernetesを統合しています。
Kubernetesアーキテクチャーは次の基本コンポーネントで構成されます。
Kubernetesクラスターは、連携によってコンテナ化されたアプリケーションを実行する、一連の物理マシンまたは仮想マシン(ノード)です。このクラスターが、Kubernetesアーキテクチャーの基礎を形成します。
マスター・ノードは、仮想マシンまたは物理マシンにおける単一のコンピューティング・ホストを表します。これらは Kubernetes制御プレーンのコンポーネントのホストとなり、アプリケーションのスケジューリングおよび拡張を担います。また、Kubernetesクラスター内のすべてのコンピューティング、ネットワーク、ストレージ・リソースを管理することで、マスター・ノードは、コンテナ化されたアプリケーションとサービスがクラスター内のワーカー・ノードに均等にデプロイされるようにします。
ワーカー・ノードは、コンテナを稼働させ、マスター・ノードによって割り当てられた作業を実行する責任を負います。また、ポッドとしてグループ化されたアプリケーション・コンテナもホストします。
ポッドは、同じコンピュートリソースとネットワークを使用する1つ以上のコンテナ(Linuxや Dockerなど )のグループです。これらがクラスターのデプロイメントの単位であり、拡張性の単位としても機能します。たとえば、ポッド内のあるコンテナで大量のトラフィックが発生した場合、Kubernetesはクラスター内の他のノードにそのポッドのレプリカを作成できます。トラフィック量が減少した場合は、ポッドをシャットダウンすることもできます。
さらに、Kubernetesコンポーネントには次のものが含まれます。
基本的なコンピューター・ネットワーキングは、ケーブル(有線)またはWiFiのいずれかで2つ以上のコンピューター・デバイスを接続し、データの共有やリソースの交換を行うことを主とします。
物理ネットワークでは、物理サーバーを物理ネットワーク機器(スイッチ、ルーター、イーサネット・ケーブル)に接続して、インターネットに接続します。
仮想ネットワーキング、ソフトウェア定義ネットワーク(SDN)では、仮想イーサネット・デバイスや仮想インターフェースなどのコンポーネントがベアメタル・サーバーや仮想マシンにインストールされ、インターネットに接続されます。Kubernetesのデプロイメントでは、SDNを使用してクラスター間のネットワーク通信を構成および管理します。
Kubernetesネットワーキングをさらに深く掘り下げる前に、基本的なネットワーク用語を確認しましょう。
Kubernetesは、マシンのクラスター全体に分散されたネットワーク・プレーンで分散システムを実行するために作成されました。Kubernetesクラスター・ネットワーキングは、コンポーネント間の相互接続性を提供するだけでなく、ソフトウェア定義型ネットワーキングにより、データを自由かつ効率的に移動できるシームレスな環境を構築します。
Kubernetesネットワーキングのもう1つの大きな特徴は、フラットなネットワーク構造です。すべてのコンポーネントが、他のハードウェアに依存せずに接続できることを指します。Kubernetesでは、クラスター内のすべてのポッドは、それがどのノードで動作しているかに関係なく、他のすべてのポッドと通信できます。フラット・ネットワークによって効率的にリソースを共有することができ、動的ポート割り当ての必要がなくなります。
総じて言うと、Kubernetesネットワーキングによって複雑なものが抽象化され、開発者とオペレーターは、複雑なネットワーク構成に対応するのではなく、アプリケーションの構築と保守に集中できるようになります。
Kubernetesは、分散環境全体にわたるコンテナ化されたアプリケーションのオーケストレーションにおける課題に対処するのに役立つネットワーキング・モデルを提供します。各ノードのコンテナ・ランタイムはネットワーク・モデルを実装しており、次のルールに従います。
Kubernetesネットワーキング・モデルは、次に述べる、Kubernetes通信における4つの基本タイプに適用されます。
コンテナは、Kubernetesネットワークの最小単位です。基本的なネットワーク構成では、コンテナはローカルホストを介して単一のポッド内で通信します。この通信ができるのは、同じポッド内のコンテナが同じネットワーク名前空間(ストレージ、IPアドレス、ポート空間などのネットワーキング・リソースを含む)を共有しているためです。
ポッド間の通信には、同じノード上のポッド間の通信だけでなく、異なるノード上のポッド間の通信も含まれます。Kubernetesクラスター内の各ポッドには独自の一意のIPアドレスがあり、ポッドがどのノードに存在していても、ポッド間の直接通信を行うことができます。さらに、各Kubernetesクラスターは、ポッドのIPアドレスに加えて、DNSサービス(ドメインネーム・システム・サービス)を自動的に提供します。DNSサービスでは、ポッド(およびサービス)に名前が割り当てられ、管理者にとって簡単で読みやすい名前が作成されます。これにより、サービス検出のための軽量のメカニズムがもたらされます。
Kubernetesのサービスとは、ポッドの論理セットを定義し、それらのポッドに対する外部トラフィックの公開、負荷分散、およびサービス検出を可能にする抽象化を行うことです。このサービスは、ポッドからサービスへの通信と外部からサービスへの通信の両方を促進します。
Kubernetesネットワーキング・モデルによると、ポッドのIPアドレスは一時的なものです。したがって、ポッドがクラッシュするか削除され、その場所に新しいポッドが作成された場合、新しいポッドには新しいIPアドレスが割り当てられる可能性が高くなります。
ポッドからサービスへの通信におけるClusterIPは、一連のポッドに安定した仮想IP アドレスを提供する、サービスの一種です。この内部IPはクラスター内のみ接続可能で、ポッドとサービス間の内部通信に使用できます。
kube-proxyはクラスター内のすべてのノードにインストールされており、ホスト上のネットワーク・ルールを維持し、サービスとポッドの変更を監視します。ポッドが作成または破棄されると、kube-proxyは IPtables(トラフィックのルーティング用のLinuxカーネル・ファイアウォールに関するルールの作成に使用されるユーティリティー・プログラム)を更新してその変更を反映し、サービスIPに送信されたトラフィックが正しくルーティングされるようにします。
外部からサービスへのネットワーキングとは、外部サービスやデータベースなどのサービスを公開し、Kubernetesクラスターの外部からアクセスすることを指します。
Kubernetesでは、クラスターへの外部トラフィックを促進する、数種類のサービスを利用できます。
Kubernetesネットワーク・ポリシーは、Kubernetesネットワーキングにおいて重要な役割を持つアプリケーション構造です。これらのポリシーを取り入れることで、管理者と開発者は、ポッド同士の通信方法や、ポッドと他のネットワーク・エンドポイントとの通信方法を指定するルールを定義できます。ネットワーク・ポリシーは、Kubernetes Network Policies API を使用して適用され、次の基本コンポーネントで構成されます。
Kubernetesネットワーク・ポリシーは、相互に通信できるポッドを制御するルールを定義することで、セキュリティー・ポリシーの定義と管理に貢献します。これにより、不正アクセスや悪意のある攻撃を防止できます。また、ネットワーク・ポリシーは、ポッドとサービス間の分離も保証し、それらのポッドまたはサービスのみが許可されたピアのセットと通信できるようにします。例えば、DevOpsや他のチームが同じKubernetesクラスターを共有しながら異なるプロジェクトに取り組んでいるようなマルチテナントの状況では、分離が重要です。
特定のコンプライアンス要件がある企業の場合、ネットワーク・ポリシーは、ネットワーク・アクセス制御の具体化と徹底に役立ちます。これにより、規制基準を満たし、クラスターを組織のポリシーに確実に準拠させることができます。
Container Network Interface (CNI) は、Kubernetesネットワーキングに関連するもう 1 つの重要な機能です。Cloud Native Computing Foundationによって作成・保守され、KubernetesやRedHat OpenShift®、Apache Mesosなどのコンテナ・ランタイムで使用されているCNIは、ネットワーク・プラグインによってどのようにコンテナ・ネットワーキングを実現すべきかを定義する、標準化された仕様および一連のAPIです。CNIプラグインは、IPアドレスの割り当て、ネットワーク名前空間の作成、ネットワーク・ルートの設定などを行い、それによって、同じノード内と異なるノード間の両方でポッド間の通信を実現します。
KubernetesにはデフォルトのCNIが備わっていますが、Calico、Flannel、Weave などの多数のサードパーティCNIプラグインは、コンテナベースのネットワーキング環境で構成とセキュリティーに対処するように設計されています。オーバーレイ・ネットワークやダイレクト・ルーティングなど、ネットワーキングの機能やアプローチはそれぞれ異なる可能性がありますが、いずれもKubernetesと互換性のあるCNI仕様を遵守しています。
Kubernetesのご利用、またはKubernetesおよびKubernetesエコシステム・ツールに関する既存のスキルの強化をご希望のお客様は、これらのチュートリアルのいずれかをお試しください。
IBM Cloud® Kubernetes Serviceにクラスターを導入し操作するための対話型ブラウザー・ベースのトレーニングです。ダウンロードまたは構成の必要はありません。
ネイティブKubernetesエクスペリエンスで、セキュアーで可用性の高いアプリをデプロイ
Red Hat OpenShift on IBM Cloudは、エンタープライズ・ワークロードをKubernetesクラスターにコンテナ化してデプロイするための高速かつ安全な方法を開発者に提供します。
フルマネージドのサーバーレス・プラットフォームであるIBM Cloud Code Engine を使用すると、フルマネージドのコンテナ・ランタイム上でコンテナ、アプリケーション・コード、またはバッチ・ジョブを実行できます。
IBM Cloud Professional Developer 認定資格に含まれるコースを通じて Kubernetesスキルを構築します。
学生たちがIBM Cloud上のRed Hat® OpenShift® on IBM Cloud®でアートを披露
コンテナは、どこからでもワークロードを構築および管理できるようにするハイブリッドクラウド戦略の一部です。
Kubernetesは、コンテナ化されたアプリケーションのデプロイ、管理、スケーリングをスケジュールおよび自動化するためのコンテナ・オーケストレーション・プラットフォームです。
コンテナは、ソフトウェアの実行可能な単位です。そのライブラリや依存関係とともに、コードをどこでも実行できるように一般的な方法で、アプリケーション・コードがパッケージ化されます。
コンテナ・オーケストレーションは、コンテナ化されたアプリケーションのプロビジョニング、デプロイメント、管理を自動化および簡素化します。