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

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

推薦する

Byteshack - $3/Xen/2IP/384m メモリ/7g SSD/500g トラフィック/G ポート

drServer.net の 2 つの XEN ブランドの VPS はそれぞれプロモーション用の大型...

ユーザーを獲得すれば、検索エンジンよりも優位に立てる

ほとんどのウェブマスターにとって、2012 年は本当に特別な年でした。特にここ数か月は、アルゴリズム...

SEOデータ分析で注意しなければならないいくつかの主要な要素

すべてのウェブマスターにとって、SEO は必要な知識または概念です。ランキングがある限り、SEO は...

#黑5# zji: 香港サーバー(物理マシン)、10M帯域幅、Ali cn2+bgp+40G高防御、最低750元

ブラックフライデーセール期間中、Zjiは香港アリババクラウドネットワークの専用サーバーの直接注文に3...

Inspur サーバーが貴州省の「ラジオ・テレビクラウド」に彩りを添える

「中国中を旅して、最も美しく色彩豊かな貴州を訪ねよう」というおなじみのスローガンは、この古代の地、貴...

ステーショングループ操作は不正行為ですか?

【はじめに】Pi Zirui の SEO に関する詳細な分析を読んで、いくつか考えました。SEO の...

SEOの真の意味を10の側面から簡単に解説

最近、正確に言うと、過去 4 か月間、Baidu のアップデートはかなり混乱しています。純粋に手作業...

エンタープライズ クラウドはどのように進化するのでしょうか?

Amazon Web Services (AWS) や Microsoft Azure などのパブリ...

Gラインデスクトップクラウドサービスプラットフォームの実践に関する簡単な説明

01 デスクトップクラウドテクノロジー入門従来のオフィス端末の欠点デジタル経済の発展に伴い、データセ...

Googleの新しい検索アルゴリズム「ペンギン」が「過度にSEO的な」サイトの排除を開始

グーグルは昨年2月、低品質の情報で溢れたさまざまな「コンテンツファーム」ウェブサイトを取り締まること...

テンセントにはTo B遺伝子があるか?

1月13日夜、アリババは香港上場目論見書を発表した。アリババとテンセントは、香港証券取引所での会合が...

JikeとBaiduの中国語単語分割技術の異なる戦略

現在、インターネット上の情報は急速に増加しており、検索エンジンは人々が情報を見つけるための好ましいツ...

naranjatech: オランダの VPS、年間 20 ユーロ、2G メモリ/1 コア (EPYC7542)/30g NVMe/5T トラフィック

Naranjatech (公式には 2003 年からこのビジネスに携わっていると主張している) は現...

レンジフードを使用して7段階の風を作り出し、JiguoとRobam Electric Appliancesが最も革新的なゴールデンアイ賞を受賞

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています5月26日...

bgpto: 月額 185 ドル、日本ソフトバンク回線、e3v3/16g メモリ/2t ハードディスク/無制限トラフィック/5IP

bgpto、この会社の日本サーバーはプロモーションを行っています。日本東京のソフトバンク回線の独立サ...