Kubernetes ネットワークのビジュアル ガイド

Kubernetes ネットワークのビジュアル ガイド

Kubernetes 内のネットワークは、物理的な世界のネットワークとそれほど変わりません。ネットワークの基本的な知識があれば、コンテナ ポッドとサービス間の通信を簡単に実現できます。

スイッチ、ルーター、イーサネット ケーブルを使用する物理ネットワークから、ソフトウェア定義ネットワーク (SDN) と仮想インターフェイスを使用する仮想ネットワークに移行するには、多少の学習が必要です。もちろん、原則は同じですが、規範やベストプラクティスは異なります。 Kubernetes には独自のルールセットがあり、コンテナやクラウドを扱う場合は、Kubernetes ネットワークの仕組みを理解しておくと役立ちます。

Kubernetes ネットワーク モデルには、覚えておくべき一般的なルールがいくつかあります。

  • 各ポッドには独自の IP アドレスがあります。ポッド間にリンクを作成する必要はなく、コンテナ ポートをホスト ポートにマップする必要もありません。
  • NAT は不要: ノード上の Pod は、NAT なしですべてのノード上のすべての Pod と通信できる必要があります。
  • エージェントはすべてのアクセス権を取得します。ノード上のエージェント (システム デーモン、Kubelet) は、そのノード内のすべての Pod と通信できます。
  • 共有名前空間: Pod 内のコンテナはネットワーク名前空間 (IP アドレスと MAC アドレス) を共有するため、ループバック アドレスを使用して相互に通信できます。

Kubernetes ネットワークはどのような問題を解決しますか?

Kubernetes ネットワークは、Kubernetes 内のさまざまなエンティティ タイプが通信できるように設計されています。 Kubernetes インフラストラクチャのレイアウトは、設計上、多くの分離が行われています。名前空間、コンテナ、およびポッドは、コンポーネントを互いに区別できるように設計されているため、高度に構造化された通信計画が重要です。

コンテナ間ネットワーク

コンテナ間のネットワークは、Pod ネットワーク名前空間を通じて行われます。ネットワーク名前空間を使用すると、システムの他の部分から分離され、独立して実行される独立したネットワーク インターフェイスとルーティング テーブルを持つことができます。各ポッドには独自のネットワーク名前空間があり、コンテナは同じ IP アドレスとポートを共有します。これらのコンテナはすべて同じ名前空間の一部であるため、コンテナ間の通信はすべて localhost を介して行われます。 (図では緑の線で示されています。)

ポッド間ネットワーク

Kubernetes では、各ノードにポッド用の指定された CIDR IP 範囲があります。これにより、各ポッドがクラスター内の他のポッドから認識できる一意の IP アドレスを受け取ることが保証されます。新しいポッドが作成されても、IP アドレスが重複することはありません。コンテナ間ネットワークとは異なり、Pod を同じノードにデプロイするか、クラスター内の異なるノードにデプロイするかに関係なく、Pod 間の通信は実際の IP を使用して行われます。

上の図は、ポッドが相互に通信するためには、ポッド ネットワーク名前空間とルート ネットワーク名前空間の間でトラフィックが流れる必要があることを示しています。これは、仮想イーサネット デバイスまたは veth ペア (図では veth0 を Pod 名前空間 1 に、veth1 を Pod 名前空間 2 に接続) を介して Pod 名前空間とルート名前空間を接続することによって実現されます。仮想ブリッジはこれらの仮想インターフェイスを接続し、アドレス解決プロトコル (ARP) を使用してそれらの間で通信が流れるようにします。

データが Pod 1 から Pod 2 に送信される場合、イベント フローは次のようになります。

  • Pod 1 のトラフィックは、eth0 を経由して、ルート ネットワーク名前空間の仮想インターフェイス veth0 に流れます。
  • 次に、トラフィックは veth0 を経由して veth1 に接続された仮想ブリッジに送られます。
  • トラフィックは仮想ブリッジを経由して veth1 に送られます。
  • 最後に、トラフィックは veth1 を介して Pod 2 の eth0 インターフェースに到達します。

ポッドからサービスへのネットワーク

ポッドは動的です。需要に応じて規模を拡大または縮小する必要があるかもしれません。アプリケーションがクラッシュしたりノードに障害が発生した場合でも、再度作成できます。これらのイベントにより、Pod の IP アドレスが変更され、ネットワークの問題が発生する可能性があります。

Kubernetes は、次のことを実行するサービス機能を使用してこの問題を解決します。

  • サービスに関連付けられているバックエンド ポッドに接続するには、フロントエンドに静的仮想 IP アドレスを割り当てます。
  • この仮想 IP 宛てのすべてのトラフィックは、バックエンド ポッドのセットに負荷分散されます。
  • Pod の IP アドレスを追跡しておくと、Pod の IP アドレスが変更されても、クライアントはサービス自体の静的仮想 IP アドレスに直接接続するだけなので、問題は発生しません。

クラスター内で負荷を分散する方法は 2 つあります。

  • IPTABLES: このモードでは、kube-proxy は API サーバーの変更を監視します。新しいサービスごとに、サービスの clusterIP とポートへのトラフィックをキャプチャする iptables ルールをインストールし、トラフィックをサービスのバックエンド ポッドにリダイレクトします。ポッドはランダムに選択されます。このモードは信頼性が高く、オーバーヘッドが低くなります。これは、Linux Netfilter がトラフィックを処理するときにユーザー空間とカーネル空間を切り替える必要がないためです。
  • IPV: IPV は Netfilter 上に構築され、トランスポート層の負荷分散を実装します。 IPVS は Netfilter フック関数を使用し、基礎となるデータ構造としてハッシュ テーブルを使用し、カーネル空間で動作します。つまり、IPVS モードの kube-proxy は、iptables モードの kube-proxy よりもレイテンシが低く、スループットが高く、トラフィックのリダイレクトのパフォーマンスが優れています。

上の図は、Pod 1 から Pod 3 へのパケット フローを示しています。このフローは、サービスを経由してさまざまなノード (赤でマーク) に渡されます。仮想ブリッジ宛てのパケットは、ブリッジ上で実行されている ARP がそのサービスを理解しないため、デフォルト ルート (eth0) を使用する必要があります。その後、パケットは iptables を介してフィルタリングされる必要があります。iptables は、kube-proxy によってノードに定義されたルールを使用します。したがって、図は現在のパスを示しています。

インターネットからサービスネットワークへ

これまで、クラスター内でトラフィックをルーティングする方法について説明しました。ただし、Kubernetes ネットワークには、アプリケーションを外部ネットワークに公開するという別の側面もあります。

アプリケーションを外部ネットワークに公開するには、2 つの方法があります。

  • 出力: Kubernetes サービスからインターネットにトラフィックをルーティングする場合は、このオプションを使用します。この場合、iptables はソース NAT を実行するため、トラフィックは Pod ではなくノードから送信されたように見えます。
  • イングレス: これは外部からサービスへの着信トラフィックです。 Ingress は、接続ルールを使用して、サービスとの特定の通信を許可およびブロックします。通常、ネットワーク スタックの異なる領域で実行される Ingress ソリューションには、サービス ロード バランサと Ingress コントローラの 2 つがあります。

ディスカバリーサービス

Kubernetes は次の 2 つの方法でサービスを検出します。

  • 環境変数: Pod が実行されるノードで実行されている kubelet サービスは、{SVCNAME}_service_HOST および {SVCNAME}_service_PORT の形式で各アクティブ サービスの環境変数を設定する役割を担います。クライアント ポッドが表示される前にサービスを作成する必要があります。そうしないと、これらのクライアント Pod に環境変数が設定されません。
  • DNS: DNS サービスは Kubernetes サービスとして実装され、1 つ以上の DNS サーバー ポッドにマッピングされ、他のポッドと同様にスケジュールされます。クラスター内のポッドは DNS サービスを使用するように構成されており、DNS 検索リストにはポッド独自の名前空間とクラスターのデフォルト ドメインが含まれています。 CoreDNS などのクラスター対応 DNS サーバーは、Kubernetes API で新しいサービスを監視し、各サービスの DNS レコードのセットを作成します。クラスター全体で DNS が有効になっている場合、すべてのポッドは DNS 名に基づいてサービスを自動的に解決できます。 Kubernetes DNS サーバーは、ExternalName サービスにアクセスする唯一の方法です。

公開されたサービスの ServiceTypes

Kubernetes サービスは、通常ラベル セレクターを使用して定義される一連の Pod にアクセスする方法を提供します。これは、クラスター内の他のアプリケーションにアクセスしようとするアプリケーションである場合もあれば、クラスター内で実行されているアプリケーションを外部に公開できるようにする場合もあります。クベネフィット
ServiceTypes を使用すると、必要なサービスのタイプを指定できます。

さまざまな ServiceTypes には次のものが含まれます。

  • ClusterIP: これはデフォルトの ServiceType です。これにより、サービスがクラスター内からのみアクセス可能になり、クラスター内のアプリケーションが相互に通信できるようになります。外部アクセス不可。
  • LoadBalancer: このサービス タイプは、クラウド プロバイダーのロード バランサーを使用してサービスを公開します。外部ロードバランサからのトラフィックはバックエンド Pod に送信されます。クラウド プロバイダーが負荷分散を実装する方法を決定します。
  • NodePort: これにより、すべてのノードで特定のポートを開いて、外部通信がサービスにアクセスできるようになります。このポートに送信されたトラフィックはすべてサービスに転送されます。
  • ExternalName: このタイプのサービスは、ExternalName フィールドの内容を使用して、CNAME レコードとその値を返すことで、サービスを DNS 名にマッピングします。いかなる種類のプロキシも設定されていません。

ネットワークソフトウェア

使用されているテクノロジーを理解していれば、Kubernetes 内のネットワークは物理的な世界のネットワークとそれほど変わりません。一生懸命勉強してネットワークの基礎を覚えておけば、コンテナ、ポッド、サービス間の通信を簡単に実現できます。

<<:  Azure で発見された 6 つの「悪夢」のクラウド セキュリティ脆弱性に対する Microsoft の対応

>>:  ビジネスニーズを中心としたクラウドネイティブアーキテクチャシステムの構築

推薦する

従来のアーキテクチャは大きな変化を遂げ、分散型クラウドストレージが次世代のインフラストラクチャとなる

フォン・ノイマン・アーキテクチャの 5 つの要素のうち、コンピューティング、ストレージ、およびネット...

チケットを盗むソフトウェアに遭遇、12306 ウェブサイトは「ログインが遅い」状態が続く

モーニングポスト記者の沈良、張少潔、張静燕鉄道の春節旅行シーズンは昨日も引き続きチケット販売のピーク...

JD.comはIPO価格から10%上昇し、20.9ドルで取引を終えた。

[要約] 終値に基づくと、JD.comの時価総額は286億米ドルに達し、上場している中国のインターネ...

Bilibili、大晦日パーティーのための新たな戦いを開始!

この記事では、トラフィック競争における大晦日ガラの価値と意義を分析し、ビリビリが大晦日ガラでユーザー...

経済ショックの中、クラウド プラットフォームは企業にとって新たな安全地帯となり得るでしょうか?

近年、経済情勢が変動し続ける中、企業はクラウドを新たな安全地帯として捉え始めています。特にCOVID...

オンラインストアWeiboマーケティングはまだ初期段階です。3つの大きな間違いを防ぐことが重要です

オンラインストアの運営はますます難しくなっています。購入チャネルのコストが増加しただけでなく、さまざ...

evoxtはどうですか?英国ロンドンのデータセンターにおける VPS レビュー

evoxt が運営する VPS の主な特徴は、低価格、強力なパフォーマンス、十分な帯域幅です。これら...

キーワード選択におけるトップ 10 の間違い

検索エンジンは、ウェブサイトがオンライン マーケティングを行うための重要なプラットフォームです。一方...

#11.11# losangelesvps: 月額 4 ドル、KVM 仮想 VPS/2G メモリ/1Gbps 帯域幅/無制限トラフィック、月 1 回の無料 IP 変更

losangelesvpsの11.11中国イベントが始まりました。INAPのロサンゼルスデータセンタ...

SEO関連の仕事の面接で注意すべきこと

SEO は徐々に企業の注目を集めています。SEO 業界がますます強力かつ大規模になるにつれ、SEO ...

セキュリティの「エッジとクラウド」はどのように共存するのでしょうか?エッジコンピューティングに関する3つの大きな誤解を解明

[[275190]]新しいテクノロジーと新しいトレンドとして、エッジ コンピューティングはテクノロジ...

外部リンク構築の新たな場所: 軽量ブログが利点を発揮

ライトブログは、ブログとマイクロブログの中間のネットワークサービスです。ブログは表現力に富む傾向があ...

エッジコンピューティングの必要性を再検討する

エッジ コンピューティングには、限られたスペースに収まり、過酷な条件に耐え、複雑な分析ルーチンを実行...

専用ソリューション: 香港 WTT および HKT データセンター (物理) サーバー、1Gbps 帯域幅 (無制限)、月額 2,000 元から

Dedicatedsolutionは香港独自の独立サーバーの立ち上げを開始し、現在、プライベートカス...