Kubernetes Networking:ネットワークモデルを理解するための完全なガイド
公開: 2020-02-18コンテナ管理は、ネットワーキングの重要な側面です。 今日のトラフィック要件の変化に伴い、Kubernetesの重要性は10倍になりました。 また、ネットワーキングについて学習することに興味がある場合は、最初にKubernetesに精通する必要があります。 Kubernetesについて学ぶことは、コンテナ管理を効果的に処理するのに役立ちます。 Kubernetesは、2020年の市場でトップのDevOpsツールの1つでもあります。
ただし、この詳細なガイドでは同じことについて説明するので、心配しないでください。 Kubernetesはコンテナ管理ツールです。この記事では、Kubernetesが使用される理由、ネットワークのコンポーネント、およびトラフィックのルーティング方法について説明します。
世界のトップ大学からオンラインでソフトウェアエンジニアリングを学びましょう。 エグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを早急に進めましょう。
飛び込みましょう。
目次
Kubernetesとは何ですか?
Kubernetesでのネットワーキングについて説明する前に、このツールの基本的な概念を検討する必要があります。 このようにして、記事の後半で混乱に直面することはなく、ここで言及されているすべての基本的な理解が得られます。
Kubernetesは、オープンソースのコンテナオーケストレーションツールです。 これは、最近ネットワーキングの最も重要な側面になっているコンテナーの管理に役立ちます。 Kubernetesには、コンテナのスケーリング、コンテナのデプロイ、コンテナのスケール解除など、多くの機能があります。

Dockerは専門家によるコンテナーの作成を支援しますが、Kubernetesは専門家によるコンテナーの管理を支援します。 そのため、両方が非常に重要です。 Kubernetesは、クラスター上で分散システムを実行します。 その構造とネットワークを理解することで、ミスを回避し、エラーなしでコンテナーを管理できます。
なぜKubernetesが使用されるのですか?
企業のコンテナ要件は、過去数年間で大幅に増加しています。 小さすぎない限り、1つまたは2つのコンテナに依存することはできません。 負荷分散のために、大量のコンテナセットが必要になります。 高可用性を維持し、トラフィックのバランスを取るための要件は、数百に及ぶ可能性があります。
トラフィックが増えると、リクエストを処理するためにより多くのコンテナが必要になります。 同様に、トラフィックが少なくなると、コンテナを縮小する必要があります。 需要に応じてコンテナを管理することは、特に手動で行う場合は難しい場合があります。
コンテナを手動で調整するには、他の場所で簡単に費やされていたであろう多くの時間とリソースがかかる可能性があります。 このタスクを自動化すると、作業が非常に簡単になります。 そうすれば、コンテナのスケーリングとスケール解除について心配する必要はありません。 それがKubernetesが行うことです。 初心者向けのトップDevOpsプロジェクトの記事で、Kubernetesを使用して初心者向けのDevOpsプロジェクトを作成する方法をご覧ください。
コンテナのオーケストレーションと管理を自動化します。 その機能性から広く人気があります。 これはGoogleの製品であり、そのパフォーマンスは、組織がコンテナのスケーリングを自動化するのにかなり役立ちます。
Kubernetesのコンポーネント
Kubernetesとは何か、その機能は何かがわかったので、複数のコンポーネントについて説明します。 このツールのネットワークを理解するには、さまざまな部分に慣れておく必要があります。 ただし、心配することはあまりありません。 それは私たちが助けるためにここにいるからです。 以下は、そのさまざまなコンポーネントの簡単な説明です。 説明は簡潔ですが、一般的な考え方を説明するのに十分なはずです。
ポッド
化学の原子、物質の最小の独立したオブジェクトを覚えていますか? さて、ポッドはKubernetesのアトムです。 1つのポッドは、クラスター内のワークロードです。 ストレージ付きの1つまたは複数のコンテナーを含めることができます。 すべてのポッドには、Kubernetesの他のコンポーネントとやり取りするときにIDとして機能する一意のIPアドレスがあります。 ポッドのすべてのコンテナがスケジュールされ、同じマシン内に配置されます。
コントローラー
コントローラーはKubernetesをビルドします。 コントローラはAPIサーバーの状態を監視して、現在の状態が指定した状態と一致していることを確認します。 APIサーバーの状態が何らかの理由で変化した場合、APIサーバーはそれに応じて反応します。 コントローラーは、クラスターの状態をチェックし、それらを必要な状態と比較するためにループを使用します。 また、現在の状態を必要な状態に変更するタスクを実行することもできます。
ノード
ポッドがアトムの場合、ノードはKubernetesのギアです。 彼らはクラスターを実行します。 仮想マシンは、Kubernetesクラスター内のアクセス可能なノードです。 多くの人は、「ノード」ではなく「ホスト」という単語を使用する傾向があります。 この記事では、ノードという用語を一貫して使用しようとしました。
APIサーバー
APIサーバーは、Kubernetesのデータストアへのゲートウェイです。 これにより、クラスターに必要な状態を指定できます。 Kubernetesクラスタの状態を変更し、必要な状態を記述したい場合は、API呼び出しを行う必要があります。
Kubernetesネットワーキングのコンポーネントに精通しているので、そのネットワーキングモデルとその仕組みから始めることができます。
Kubernetesネットワーキングの説明
Kubernetesネットワーキングは、次の制約がある特定のモデルに従います。
- ポッドは、ネットワークアドレス変換なしで他のすべてのポッドと通信します
- うなずきは、ネットワークアドレス変換なしでポッドと通信できます
- 他のポッドが認識しているポッドのIPは、それ自体が認識しているIPと同じです。
これらの制約により、Kubernetesにはネットワークセクションがいくつかあります。 彼らです:
- コンテナからコンテナへの転送
- ポッドからポッドへの転送
- ポッドからサービスへの転送
- インターネットからサービスへの転送
コンテナからコンテナへ
ネットワークでは、仮想マシンがイーサネットデバイスと直接対話すると思うかもしれませんが、それだけではありません。
Linuxを使用している場合、ネットワーク名前空間は、ファイアウォールのネットワークデバイス、ルート、およびルールを含むネットワークスタックを提供します。 Linuxで実行されているすべてのプロセスは、このネットワーク名前空間と通信します。
ポッドは、ネットワーク名前空間内にコンテナのグループを所有します。 これらのコンテナには、ネットワーク名前空間を介して割り当てられた同じポートスペースとIPアドレスがあります。 これらのコンテナは同じ名前空間にあるため、ローカルホストを介して相互に検索します。 アプリケーションがポッド内にある場合は、共有ボリュームにもアクセスできます。

ポッドからポッドへ
ポッドは、IPアドレスを介して相互に通信します。 すべてのポッドには、Kubernetesに実際の個別のIPアドレスがあります。 ポッドが何であるかはすでに知っているので、その主題に触れる必要はありません。 KubernetesはIPを使用してポッド間の通信を容易にします。 それがどのように行われるかについて話し合いましょう。
ポッドはノードを介して通信します。 そのため、ポッド間の通信を理解し、ノード間の相互作用を理解する必要があります。
- ノード間通信
- ノード内通信
それぞれについて詳しく説明します。
ノード間通信
ノードが異なるポッドに配置されている場合、ノードはこの方法で通信します。 このコミュニケーション方法は、簡単な例で理解できます。 ポッド1、ポッド2、ポッド3などの4つのさまざまなポッドネットワークがあるとします。 ポッド1と2はノード1のルートネットワークにあり、ポッド3と4は2番目のネットワークにあります。
ポッド1からポッド4にパケットを転送する必要があります。
パケットは最初にポッド1ネットワークを離れ、veth0を介してルートネットワークに入る必要があります。 Linuxブリッジを通過するため、宛先を見つけるのに役立ちます。 ノードにはポッド内に目標がないため、インターフェースeth0に送り返されます。 これで、ルートテーブルの最初のノードが残ります。 ルートテーブルは、pod4にある必要なノードにパケットをルーティングします。 パケットは最初にノード2に到達し、次にブリッジに到達します。ブリッジはパケットを宛先に転送します。
ノード内通信
ノード内通信は、ノードが同じポッドにあるときに行われます。 ノード間通信について説明したのと同じ方法で、ノード内通信について説明することができます。 このような場合、パケットはeth0の最初のポッドから移動します。 veth0を介してルートネットワークに入ります。 次に、ブリッジを通過する必要があります。その後、指定されたIPに移動します。
これが、Kubernetesでポッドが相互に通信する方法です。 次のセクションに移りましょう。
ポッドからサービスへ
前のセクションで、ポッドのIPアドレス間でトラフィックがどのようにルーティングされるかをすでに見てきました。 ただし、IPアドレスに問題があります。 ポッドのIPは、コンテナのスケーリングに応じて消えたり、再表示されたりする可能性があります。 したがって、コンテナがスケーリングされると、ポッドIPの数が増加します。その逆も同様です。
サービスは、この状況の管理に役立ちます。 Kubernetesのサービスについて簡単に説明しますので、混乱することはありません。
Kubernetesのサービスとは何ですか?
Kubernetesのサービスは、ポッドのグループにリクエストを転送する必要があるプロキシを設定します。 これらのポッドはトラフィックを取得し、セレクターがこのタスクを処理します。 サービスの作成後、要求を処理するIPアドレスを受け取ります。 サービスには複数の種類があり、ポッドに移動して通信を行う前に、それらについて話し合う必要があります。
Kubernetesには合計4種類のサービスがあります。 彼らです:
- ClusterIP
- NodePort
- LoadBalancer
- ExternalName
ClusterIPはデフォルトのサービスタイプです。 このタイプでは、サービスはクラスター内でのみアクセス可能です。 NodePortでは、サービスはすべてのノードのIPに公開されます。 NodePortは、システムが事前に作成するときにClusterIPサービスにルーティングします。 ClusterIPとは異なり、クラスターの外部でこのサービスに接続できます。
LoadBalancerは、クラウドのロードバランサーを使用して、サービスを外部ネットワークに公開します。 NodePortとClusterIPはそのために自動的に作成され、ExternalNameサービスはCNAMEレコードを反映するためにそれを転送します。
サービスとは何か、サービスの種類はいくつあるかがわかったところで、ポッドからサービスへの通信がどのように行われるかについて説明しましょう。
使い方?
このシナリオでは、パケットはeth0を介してポッドを離れます。 イーサネットデバイスを介してブリッジに移動し、そこからデフォルトルートのeth0に転送されます。 ただし、eth0で受け入れられる前にiptablesを通過する必要があります。 iptablesは、指定されたルールを使用してパケットの宛先を決定し、必要なポッドにパケットを送信します。 それが完了すると、パケットはサービスの仮想IPではなくポッドの実際のIPに送られます。
サービスの外部
以前の3つのトラフィックルーティング方法は、Kubernetesのみに関係していました。 ただし、実際には、トラフィックをルーティングするために、Kubernetesネットワークをサードパーティのネットワークに接続する必要があります。 そして、このセクションはほぼ同じです。
外部ネットワークに接続すると、Kubernetesは次の2つの機能を実行できます。
- インターネットからそのネットワークにトラフィックをルーティングします
- そのネットワークからインターネットにトラフィックをルーティングします
前者には入力ネットワークが必要であり、後者には出力ネットワークが必要です。 それらを見てみましょう。
イングレス
パブリックネットワークからKubernetesシステムにトラフィックをルーティングするのは非常に注意が必要です。 パケットを処理するには、LoadBalancerとコントローラーが必要です。 これがどのように機能するかの例です。
まず、サービスをデプロイし、クラウドプロバイダーが新しいロードバランサーを作成します。 ロードバランサーは、サービスの指定されたポートを使用して、クラスター内の仮想マシン全体にトラフィックを分散します。 ここで、iptablesは、ロードバランサーから取得したトラフィックを必要なポッドに転送します。 ポッドはそのIPでクライアントに応答し、conntrackはIPを正しい方法で書き換えるのに役立ちます。
ネットワークに存在するレイヤー7ロードバランサーは、URLとパスに従って着信トラフィックをセグメント化することができます。 これは、Ingressネットワークで作業しているときに非常に役立ちます。
出口
Kubernetesネットワークのノードからインターネットにトラフィックをルーティングする場合、すべてがどのように機能するかは、ネットワーク構成に大きく依存します。 ここでは、トピックに触れるための一般的な例について説明します。
パケットはポッドの名前空間から始まり、vethを介してルート名前空間に送られます。 次に、アクセスする必要のあるIPがブリッジに接続されていないため、デフォルトのサービスに移動する場所からブリッジに移動します。 ルート名前空間に移動するときにiptablesを通過します。

読む: DevOpsの前提条件:それはあなたが思っているものではありません
現在、インターネットゲートウェイは、仮想マシンに接続されているIPアドレスのみを受け入れます。 また、ポケットのソースポッドはVMに接続されていません。 したがって、iptablesはソースNATを実行し、パケットのソースを変更します。 これで、インターネットゲートウェイに到達し、そこで別のNATを通過して、パブリックインターネット(宛先)に入ります。
そして、これはそれです。 これで、Kubernetesネットワーキングとそのさまざまなコンポーネントについてすべて理解できました。
結論
Kubernetesは、間違いなく、ネットワーキングに興味がある場合に学ぶ必要のある重要なツールの1つです。 この分野に精通していない人は、それがどれほど重要であるかを知りません。 これらのトラフィック要件に従ってコンテナを管理し、トラフィックをルーティングすると、非常に役立ちます。 私たちは、あなたがすべてを理解するのを助けるために、このガイドをできるだけ明確に保つように努めました。
Kubernetes、DevOpsなどを学び、習得したい場合は、ソフトウェア開発におけるIIIT-B&upGradのエグゼクティブPGプログラム-フルスタック開発の専門分野をご覧ください。