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 の対応

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

推薦する

Weiboが最低点に陥った!

2017年、Weiboは株価が44ドルから​​140ドルへと3倍に急騰するというハイライトを迎えた。...

SEOにおけるウェブエディターのユニークな位置についての簡単な説明

SEO を研究し実践する人が増えています。SEO がウェブサイトに良いトラフィックをもたらすことは間...

この記事では、「エッジコンピューティング」とモノのインターネットの密接な関係について説明します。

モノのインターネットの究極の目標は、あらゆるものを接続することです。しかし、現在のブロードバンドレベ...

謝文:インターネットは涙を信じません。伝統的なメディアは3〜5年以内に急速に変化するはずです。

3年前、私は伝統的なメディア界に新しいメディアを紹介するよう何度か依頼されました。彼は厳しい口調と期...

レンガ職人はどうですか?米国ニューヨークのデータセンターの簡単なレビュー

中国でアメリカのVPSとアメリカのサーバーを利用する場合、基本的にアメリカ西海岸に集まる人が多いです...

図解解説: Discuz フォーラム最適化基本設定 前半

ウェブマスターの友人は Discuz をよくご存知だと思います。私たちが訪問するフォーラムのほとんど...

ウェブサイトランキング最適化とステーショングループ戦略

サイト クラスターの主な目的は、検索エンジンを通じて大量のトラフィックを獲得したり、メイン サイトへ...

DirectSpace は新しいコンピューター ルームを建設する予定です。投票できます。

DS はついに新しいデータ センターをオープンします。今後 90 日以内に稼働する予定です。その時点...

hostingviet: ベトナム VPS - 50% オフ、年間 22 ドル、2G メモリ/1 コア/20g SSD/無制限トラフィック (150Mbps 帯域幅)

ベトナムの商人である hostingviet は、2009 年に設立され、納税番号は 0107249...

外部リンクの詳細な分析

ウェブサイトのランキングを決定する多くの要素の中で、外部リンクは非常に重要な要素です。さらに言えば、...

Rancher の Kubernetes が再生可能なリソースを「提供」する方法をご覧ください

[51CTO.comよりオリジナル記事] インターネットの発展により、エネルギー企業にも変革の波が到...

本末転倒は外部リンクの獲得を難しくする

外部リンクを構築する本質は、ウェブサイトの権威とキーワードランキングを向上させることだと考えているな...

OpenStack Pike: コアコード貢献度で中国企業3社がトップ10入り

9月1日、OpenStackの最新バージョンであるPikeが正式にリリースされました。新バージョンの...

Baiduランキング最適化投票アルゴリズム

Baidu アルゴリズムの継続的なアップグレードと改善により、さまざまなランキング アルゴリズムは現...