Kubernetesのネットワヌキングの図解ガむド。 パヌト1および2

ご泚意 perev。 蚘事の著者であるAmanpreet Singhは自分自身を「ただネットワヌクの䞖界の初心者」ず呌んでいたすが、これが圌がKubernetesの基本的なデバむス本番で䜿甚を理解し、非垞にアクセスしやすい玠材をコミュニティずビゞュアルで共有するきっかけずなりたしたむラスト。 原文では2぀の 郚分に分かれおいたすが、この翻蚳ではそれらを1぀の蚘事にたずめたした。







したがっお、Kubernetesクラスタヌで倚くのサヌビスを開始し、その恩恵を享受しおいたす...たたは少なくずもそれを行う぀もりです。 ただし、クラスタヌを構成および管理するためのナヌティリティは倚数ありたすが、すべおが「内郚」でどのように機胜するかに関心がありたす。 䜕かが壊れおいる堎合はどこを探したすか 私はこれが重芁であるこずを自分で知っおいたす。



Kubernetesを䜿甚するず、簡単に開始できたす。 しかし、内郚を芋るず、耇雑なシステムが存圚したす。 倚数の「動く」コンポヌネントがあり、障害の可胜性に備えたい堎合は、その機胜ず盞互䜜甚を理解する必芁がありたす。 Kubernetesの最も耇雑で、おそらく最も重芁なコンポヌネントの1぀はネットワヌクです。



だから私はそれがどのように機胜するかを正確に理解するこずに決めたした私はドキュメントを読み、レポヌトを聞き、さらにコヌドベヌスを芋たした-そしおこれが私が芋぀けたものです...



ネットワヌクモデルKubernetes



Kubernetesネットワヌクデバむスの䞭心には、重芁なアヌキテクチャ䞊の原則がありたす。「 各炉には独自のIPがありたす 。」



IP囲炉裏はすべおのコンテナに分割され、他のすべおの囲炉裏からアクセス可胜ルヌティング可胜です。 ノヌドで䞀時停止コンテナが機胜しおいるこずに気付いたこずがありたすか それらは「 サンドボックスコンテナ」ずも呌ばれたす。これは、すべおのポッドコンテナで䜿甚されるネットワヌクネヌムスペヌスnetnsを予玄および管理するこずがその仕事であるためです。 このため、ポッドのIPは、コンテナが死んでその堎所に新しいコンテナが䜜成された堎合でも倉曎されたせん。 このモデル-各炉床のIPポッドごずのIP -の倧きな利点は、基盀ずなるホスト䞊のIP /ポヌトの衝突がないこずです。 たた、どのポヌトがアプリケヌションを䜿甚するかを心配する必芁はありたせん。



したがっお、Kubernetesの唯䞀の芁件は、ハヌスのこれらのすべおのIPアドレスが、どのホストにあるかに関係なく、他のハヌスからアクセス可胜/ルヌティング可胜でなければならないこずです。



ノヌド内の盞互䜜甚ノヌド内



最初のステップは、1぀のノヌドのポッドが盞互に通信できるこずを確認するこずです。 次に、このアむデアは、ノヌド間、むンタヌネットなどずの盞互䜜甚に拡匵されたす。



各Kubernetesノヌドこの堎合はLinuxマシンには、ルヌトネットワヌク名前空間-root netnsがありたす。 メむンネットワヌクむンタヌフェむス-eth0-は、このルヌトネットにありたす。







同様に、各囲炉裏には、ルヌトむヌサネットに接続する仮想むヌサネットむンタヌフェむスを備えた独自のネットがありたす。 実際、これは䞀方がルヌトネットに、もう䞀方がネットにある仮想リンクです。







囲炉裏の端はeth0



ずいう名前ですeth0



は基瀎ずなるホストを知らず、独自のルヌトネットワヌク構成があるず考えおいるためです。 もう䞀方の端には、 vethxxx



ような名前が付けられたす。 ifconfig



たたはip a



コマンドを䜿甚しお、Kubernetesホストでこれらのむンタヌフェむスをすべお衚瀺できたす。



これは、アセンブリ䞊のすべおの囲炉裏の配眮です。 ポッドが盞互に通信するために、Linuxむヌサネットブリッゞcbr0



がcbr0



たす。 Dockerはdocker0



ず呌ばれる同様のブリッゞを䜿甚したす。







brctl show



コマンドを䜿甚しお、ブリッゞをリストできたす。



パケットがpod1



からpod1



に送信されたpod1



しpod2







  1. eth0



    からeth0



    を介しおpod1



    を通過し、vethxxxを介しおルヌトネットに到達しvethxxx



    。
  2. cbr0



    、ARP芁求を䜿甚しお「このようなIPアドレスを持っおいるのは誰ですか」
  3. vethyyy



    は、正しいIPを持っおいるず応答したす。そのため、ブリッゞはパケットの転送先を認識したす。
  4. パケットはvethyyy



    到達し、仮想リンクを通過しお、pod2が所有するpod2



    たす。






したがっお、1぀のノヌドのコンテナは互いに通信したす。 明らかに、他の察話方法もありたすが、これがおそらく最も簡単です。 Dockerも䜿甚したす。



ノヌド間通信



前述のように、囲炉裏にはすべおのノヌドからアクセスできる必芁がありたす。 たた、Kubernetesにずっお、これがどのように実装されるかはたったく問題ではありたせん。 したがっお、L2ノヌド間のARP、L3ノヌド間のIPルヌティング-クラりドプロバむダヌのルヌティングテヌブルに類䌌、オヌバヌレむネットワヌク、さらにはハトを䜿甚できたす。 各ノヌドには、ポッドによっお発行されたIPアドレスの䞀意のCIDRブロックIP範囲が割り圓おられおいるため、各ポッドには独自の䞀意のIPがあり、他のノヌドのポッドず競合したせん。



ほずんどの堎合、特にクラりド環境では、クラりドプロバむダヌはルヌティングテヌブルを䜿甚しお、パケットが正しい受信者に確実に届くようにしたす。 同じこずは、各ノヌドのルヌトを䜿甚しお構成できたす。 問題を解決する他の倚くのネットワヌクプラグむンもありたす。



䞊蚘のような2぀のノヌドの䟋を考えおみたしょう。 各ノヌドには、異なるネットワヌク名前空間、ネットワヌクむンタヌフェむス、およびブリッゞがありたす。







パッケヌゞがpod1



からpod4



別のノヌド䞊に続くず仮定したす。



  1. eth0



    からeth0



    を介しおpod1



    を通過し、vethxxxを介しおルヌトネットに到達しvethxxx



    。
  2. これcbr0



    、宛先を怜玢しおARP芁求を䜜成したす。
  3. このノヌドのpod4



    察応するIPアドレスを持たないため、 cbr0



    からメむンネットワヌクむンタヌフェむスeth0



    にpod4



    たす。
  4. node1



    マシンを残し、倀src=pod1



    およびdst=pod4



    ネットワヌクワむダに残りたす。
  5. ルヌティングテヌブルでは、各ノヌドのCIDRブロックに察しおルヌティングが蚭定されたす。それに応じお、パケットは、CIDRブロックにIPアドレスpod4



    が含たれるノヌドに送信されたす。
  6. パケットは、 node2



    メむンネットワヌクむンタヌフェむスeth0



    到着しnode2



    。 珟圚、 pod4



    eth0



    IPアドレスでpod4



    たせんが、ノヌドでIP転送が有効になっおいるため、パケットはcbr0



    リダむレクトされたす。 ホストルヌティングテヌブルは、 pod4



    IPアドレスに䞀臎するルヌトに぀いおスキャンされたす。 このノヌドのCIDRブロックの宛先ずしおcbr0



    を芋぀けたす。 route -n



    コマンドを䜿甚しおホストルヌティングテヌブルを衚瀺できたす。 cbr0



    ようにcbr0



    のルヌトが衚瀺されたす。



  7. ブリッゞはパケットをvethyyy



    、ARP芁求をvethyyy



    し、IPがvethyyy



    属しおいるこずをvethyyy



    たす。
  8. パケットは仮想リンクを通過しおpod4



    入りpod4



    。


オヌバヌレむネットワヌク



オヌバヌレむネットワヌクはデフォルトでは必芁ありたせんが、状況によっおは䟿利です。 たずえば、十分なIPアドレス空間がない堎合、たたはネットワヌクが远加のルヌトを管理できない堎合。 たたは、オヌバヌレむによっお提䟛される远加の管理機胜を取埗したい堎合。 よくあるケヌスは、クラりドプロバむダヌのルヌティングテヌブルでサポヌトされるルヌトの数に制限があるこずです。 たずえば、AWSのルヌティングテヌブルの堎合、ネットワヌクパフォヌマンスに圱響を䞎えるこずなく、最倧50のルヌトのサポヌトが宣蚀されたす。 50を超えるKubernetesノヌドが必芁な堎合、AWSルヌティングテヌブルでは䞍十分になりたす。 このような堎合、オヌバヌレむネットワヌクが圹立ちたす。



オヌバヌレむネットワヌクは、ノヌド間のネットワヌクを通過するパケットをカプセル化したす。 すべおのパケットをカプセル化およびカプセル化解陀するず、遅延ず耇雑さが少し増えるため、䜿甚しない方がよい堎合がありたす。 倚くの堎合、これは必芁ありたせん。䜿甚を決定する際に怜蚎する䟡倀がありたす。



オヌバヌレむネットワヌクでトラフィックがどのように実行されるかを理解するために、CoreOSのオヌプン゜ヌスプロゞェクトであるフランネルの䟋を考えおみたしょう。







ここでは、前の蚭定ず同様の蚭定が衚瀺されおいたすが、 flannel0



ず呌ばれる新しい仮想むヌサネットデバむスが衚瀺されflannel0



これはルヌトネヌムスペヌスルヌトネットにありたす。 これは、仮想拡匵LANVXLANの実装であり、Linuxの単なる別のネットワヌクむンタヌフェむスです。



パッケヌゞをpod1



からpod4



別のノヌド䞊にあるに枡すず、次のようになりたす。



  1. eth0



    を通過するパケットは、pod1に属するpod1



    を残しお、vethxxxのルヌトネットにvethxxx



    たす。
  2. cbr0



    、宛先を芋぀けるためにARP芁求を䜜成したす。
    • このノヌドにはpod4



      に察応するIPアドレスがないため、ブリッゞはpod4



      にパケットを送信したす。ノヌドのルヌティングテヌブルは、炉床のネットワヌク範囲のタヌゲットずしおflannel0



      を䜿甚するように構成されたす。
    • flanneldデヌモンは、Kubernetes apiserverたたは基盀ずなるetcdず察話し、そこから炉床のすべおのIPアドレスず、それらに配眮されおいるノヌドに関する情報を受信したす。 したがっお、flannelは、囲炉裏のIPアドレスずノヌドのIPアドレスの適切なマッピングナヌザヌ空間内を䜜成したす。 flannel0



      はパケットをflannel0



      、送信元および宛先IPアドレスを察応するノヌドに倉曎する远加ヘッダヌ付きのUDPパケットでラップし、特別なvxlanポヌト通垞8472に送信したす。







      マッピングはナヌザヌ空間にありたすが、実際のデヌタのカプセル化ず通過はカヌネル空間で行われるため、十分に高速です。
    • カプセル化されたパケットは、ホストトラフィックのルヌティングを担圓するため、 eth0



      を介しお送信されたす。
  3. パケットは、ノヌドのIPアドレスを送信元および宛先ずしおノヌドを離れたす。
  4. クラりドプロバむダヌのルヌティングテヌブルは、ノヌド間でトラフィックをルヌティングする方法をすでに知っおいるため、パケットは受信ノヌドnode2



    送信されnode2



    。
    • パケットはnode2



      eth0



      に到着しnode2



      。 特別なvxlanがポヌトずしお䜿甚されるため、カヌネルはパケットをflannel0



      送信しflannel0



      。
    • flannel0



      はパッケヌゞのカプセル化をflannel0



      、ルヌトネットに転送したす。 パケットは、ノヌドのIPアドレスを送信元および宛先ずしおノヌドを離れたす。 远加のパスは、通垞の非認蚌ネットワヌクの堎合ず䞀臎したす。
    • IP転送が有効になっおいるため、カヌネルはルヌティングテヌブルに埓っおパケットをcbr0



      に送信したす。
  5. ブリッゞはパケットをvethyyy



    、ARP芁求を䜜成し、目的のIPアドレスがvethyyy



    属しおいるこずをvethyyy



    たす。
  6. パケットは仮想リンクを通過しおpod4



    入りpod4



    。


実装ごずにわずかな違いがあるかもしれたせんが、党䜓ずしお、これがKubernetesのオヌバヌレむネットワヌクの仕組みです。 Kubernetesでの䜿甚が必芁であるずいう䞀般的な誀解がありたすが、真実はすべおが特定のケヌスに䟝存するずいうこずです。 そのため、たず絶察に必芁な堎合にのみ䜿甚するようにしおください。



翻蚳者からのPS



ブログもご芧ください。






All Articles