リングから熟練したRIPにKubernetes:3点、1つのクラスタとサービス実装

著者|アリクラウド東音アフター技術専門家

出典:ドッカー、元を表示します


Kubernetesクラスタサービスの概念を理解するという点で私の経験では、それはより困難なものです。サービス関連の問題をトラブルシューティングするために、私たちの理解に基づいて、もっともらしい場合は特に、それは非常に滑らかになります。

これは、理解することは非常に困難サービスの問題、に基づいて、どこにもそう、初心者のためには、pingのIPアドレスを中に反映されている。それでも非常に経験豊富なエンジニアのために、関連サービスのiptablesの設定を理解し、また、かなりの挑戦であります。

ここで今日の記事では、私はより良い理解を容易に、深さの原則と実装Kubernetesクラスタサービスを説明します。

クラスタサービスの本質とは何ですかKubernetesです

概念的には、サービスKubernetesクラスタ、実際に、負荷分散、またはリバースプロキシインチ これはアリ雲の負荷分散製品であり、同様の多くの場所があります。そして、負荷分散、サービスには独自のIPアドレスとフロントエンド・ポートを持っているとして、複数の容器は、これらの「バックエンドサーバーが」独自のIPとリスニングポートを持っている「バックエンド・サーバ」のように、サービスポッドグループの後ろにマウントされます。

ファイル

このような負荷分散とバックエンドアーキテクチャ、Kubernetesクラスタと組み合わせると、それはロードバランシング(似たLVS)役割を行うように設計されたクラスタノードの一つであり、他のノードが使用されている、我々は考えることができる最も直感的な方法を達成するためにコンテナの後端負荷グループ。

ファイル

そのような実装方法では、巨大な欠陥は、単一点のものです。Kubernetesクラスタは運用・保守慣行結晶自動化された年間のグーグルで、このような実装は明らかに知的な運用・保守の位相ずれの理念です。

特派員はカムズ


サイドカーモード(サイドカー)は、マイクロ・サービス部門の中核概念です。メッセンジャーが付属して少し人気のことわざを変更サイドカーモード、。サービスグリッドは、この非常に馴染みの学生と確かに精通しています。しかし、それはあまり注目されることがあり、実際には、Kubernetes元のクラスタサービス、またベースのサイドカーモードを実現します。

ファイル

確かに、すべてのクラスタノードのKubernetesクラスタ、サービス、および、では、リバースプロキシサイドカーを展開。クラスタサービスへのすべてのアクセスにアクセスするには、バックエンドは、プロキシサービスがノード上のコンテナのグループに逆翻訳されます。基本的に、これらのノードとサイドカーの関係は以下の通り。

ファイル

現実にサービス


2つのフロント、我々は、サービス、負荷分散のKubernetesクラスタを見て、本質であるリバースプロキシ、我々は、実際の実装では、このリバースプロキシがクラスタのノードに配備されていないことを知っている、とサイドカークラスタノードが各ノードにデプロイします。

ここでリバースプロキシサービスは、現実に輝く、クラスタコントローラKubernetes、すなわちKUBEプロキシです。原則Kubernetesクラスタコントローラで、私の他のいずれかを参照してくださいコントローラ上の記事簡単に言えば、KUBE-プロキシのクラスタノードに配備コントローラとしては、彼らがクラスタAPIサーバを介してクラスタの状態が変化を監視します。新しいサービスを作成した場合は、KUBE-プロキシは、リバースプロキシ設定に翻訳クラスタサービス、財産の状態になります。

ファイル

問題の残りの部分についてどのようなことは、リバースプロキシ、上の図を達成するためのプロキシです。

実装


Kubernetesクラスタノードがリバースプロキシサービス方法を実現するために、三種類、即ちユーザスペース、iptablesのとIPVSが主に存在します。今日、私たちは道基盤となるネットワークフランネルアリクラウドクラスターベースのネットワークの分析深さのiptablesの。

フィルター枠

それでは、シナリオを想像してみましょう。私たちは家を持っています。家は水入口パイプと出口パイプを持っています。入口管から水へため不純物、飲用ではありません。そして、私たちは水の中から出口管から期待飲んでも大丈夫です。これを達成するために、我々は、不純物の途中でパイプに加え、フィルターをカット。

ファイル
数日後、私たちのニーズが変化している、我々はまた、水が熱い願って、飲みに家から外に水の流れを必要としないだけ。だから我々は、その後、ヒーターを追加し、水にカットを追加するしかありません。

ファイル
明らかに、このカットの水道管は、新機能を追加することは非常に醜い方法です。需要はいつでもなりそうなので、私たちも困難な水でもこの場所をカットすることができます見つけることができ、1年ほど後に、次のことを確認します。

だから我々は再設計する必要があります。我々は、固定カットする必要があるので、まず、私たちは水道管、水道管をカットすることはできません。シーンのエッジの上に、例えば、私たちは、水が唯一の切開部位を持つことができることを確認してください。物理的および化学的変化:水への二つのアプローチ第二に、私たちは抽象的。

ファイル
以上のベースデザインは、私たちは、不純物を濾過するために必要がある場合に化学的変化にこの機能モジュールを不純物をフィルタリングするためのルールを増やすことができます。私たちは温度を上昇させる必要がある場合、それは機能モジュールにおける物理的変化の中で加熱ルールを増やすことができます。

フィルター枠の上に、それは良いの多くに、水よりも明確な方法です。この設計フレームワークは、私たちは主に2つのことを行う、1は固定パイプ切開し、水処理の他の2種類が抽象的です。

あなたはこれらの二つのことを理解すれば、私たちは、netfilterの作品を言うためにiptablesのを見て、あるいはより正確にすることができます。netfilterのは、実際には、フィルタフレームです。ネットワークルーティングパイプに送信netfilterのパケットは、5つのポート、すなわちPREROUTING、FORWARD、POSTROUTING入力と出力の合計を切断、netfilterの同時パケットネットワークを含む治療NAT、フィルタを含むの数を定義します。

ファイル
それは注意すべきで、ルーティングおよび転送を大幅に上記のnetfilterの複雑さを増大させ、そして私たちは、ルーティングおよび転送を考慮していない場合は、その後のような単純なnetfilterの私達の水フィルター枠になります。

ネットワーク・ノードを拡大します

今、私たちは全体像Kubernetesネットワーククラスタノードを見てください。側面図、ノードのネットワーク環境に、ネットワークは、異なる名前空間に分割され、ネットワークは、ホストネットワークの名前空間と名前空間ポッドを含み、長手方向の図で、各ネットワークの名前空間は完全なネットワークスタックを含む、アプリケーションからプロトコルスタックへ、ネットワークデバイスへ。

ネットワーク機器のこの層では、我々は、cni0仮想ブリッジを通過し、システム内の仮想ローカルエリアネットワークを設定します。veth右内の仮想ローカルエリアネットワークを介してネットワークへのポッド接続。ホストおよびルーティングをcni0仮想ローカルエリアネットワークインターフェースeth0外部通信。

この層のネットワークプロトコルスタックでは、リバースプロキシのクラスタ・ノードを達成するためのnetfilterフレームワークをフィルタリングするようにプログラムすることができます。

ファイル

リバースプロキシを達成するため、結局、それはクラスタサービスIPとコンテナの特定のグループに変更されたIPおよびポートに送信されたパケットのポートに送信され、DNATを行うことです。

図netfilterのフィルタフレームを参照すると、我々はネットフィルタでは、NAT PREROUTING、OUTPUTルールとPOSTROUGING三つの位置を添加することにより、パケットのソースアドレスまたは宛先アドレスを変更することができる、ということを知っています。

宛先アドレスを変更する、すなわち、DNATを行う必要があるので、そのような修飾は、(ルーティング)ルーティングされなければならないデータパケットが正しくルーティングすることができる保証するのに先立って発生し、リバースプロキシルールの実装では、PREROUTINGとOUTPUTを適用する必要があります2箇所。

これは、ポッドからサービスにアクセスするトラフィックを処理するためのルールをPREOURTING。ネットワークからのデータパケットがcni0するポッドをVETHした後、ホストプロトコルスタックを入力し、我々は最初のサービスへのパケットは、この位置にDNATを行いますので、契約は、netfilterののPREROUTINGを通過行います。DNAT処理の後、ホストルーティングを介しては、eth0に転送、正しいクラスタ・ノードに送信される別のポッドのアドレスへのパケットの送信先アドレス。

この位置DNATルールで加算出力は、ホスト・ネットワーク・サービスから送信されたデータパケットを処理するために使用される原理は、宛先アドレスを変更ルーティングおよび転送を容易にするために、すなわち、ルーティングの前を通って、同様です。

フィルター枠をアップグレード

フィルタの枠組みの中で、私たちは、ネットフィルタは、フィルタ枠でご覧ください。いくつかの作業を行うには、それぞれ、5つのポート、データパケット処理を5つのポートをカットnetfilterのデータ「にパイプ」。切開部と固定ネットワークパケット分類アプローチが大幅にフィルター枠を最適化されていますが、重要な問題があるが、我々はまだ新しい機能を満たすためにパイプラインの変更を加える必要があるということです。換言すれば、フレームワークおよびパイプを完全に両方のフィルタリングを切り離しません。

この概念でパイプやフィルタリング、netfilterのテーブルの両方を切り離すために。Netfilterの表は、フィルタの中心であり、その中核機能は、分類法(テーブル)、及び各フィルタ、組織(鎖)のフィルタルールをフィルタリングすることです。

ファイル

フィルタリング及びデカップリングパイプ後、データ・パケットのすべての処理は、コンフィギュレーションテーブルとなっています。パイプ上の切欠き5、フローにのみ出入口は、転送処理が導管に沿って継続した後、続けてフィルタ中心とフローにトラフィックを送信する責任があります。

表に、上記のように、組織の規則はnetfilterの鎖となります。表は、各パイプのデフォルトのチェーンを切り欠き、だけでなく、私たち自身のカスタム・チェーンが追加されました。デフォルトのデータエントリはチェーンで、チェーンはにジャンプして、いくつかの複雑な機能を達成するために、デフォルトのチェーンをカスタマイズすることができます。ここでの利点は、カスタム・チェーンを追加することができます明らかです。リバースプロキシKubernetesクラスタノードを達成するなど、複雑なフィルタリングを完了するために、我々は我々のルールにカスタムモジュラーチェーンを使用することができます。

リバースプロキシサービスの実装定義チェーン付き

Cluster Serverのリバースプロキシは、実際には、カスタム・チェーンの使用であり、モジュラーはDNATは、パケットを変換達成しました。KUBE-SERVICEすべての入口およびサービスの合計に相当する鎖、全体リバースプロキシエントリ、鎖中KUBE-SVC-XXXXチェーンエントリーある特定のサービスであり、IPリンクに基づいKUBE-SERVICEサービスは、特定のサービスへのジャンプKUBE-SVC-XXXX鎖;及びKUBE-SEP-XXXXは、エンドポイントにジャンプし、特にサービス鎖KUBE-SVC-XXXXアルゴリズムは定数(典型的にはランダム)であろう特定のアドレスおよびポートポッドの鎖、すなわちエンドポイントを表しますチェーン。

ファイル

DNATを行う必要があるためと、以前、すなわち宛先アドレスを変更するには、言及し、このような修正は、データパケットが正しく処理ルーティングすることができることを確認するためにルーティングする前に行わなければなりません。だから、KUBE-SERVICEは、PREROUTINGとOUTPUT 2つのデフォルト・チェーンと呼ばれます。

概要


この記事を通じて、我々は、クラスタのコンセプトとサービスの実現をKubernetesより深く理解している必要があります。基本的に、我々は3ポイントを把握する必要があります。

  • サービスは、基本的に負荷分散です。
  • サービス負荷分散サービスは、同様のサイドカーグリッドパターンを使用して実装されますが、LVSタイプのではない排他モード。
  • KUBE-プロキシ自然のクラスタコントローラです。また、当社は、フィルター枠のデザインを考えると、これに基づいて、負荷分散サービスのiptablesの実装を使用する原理を理解しています。

オリジナルリンク:https://yq.aliyun.com/articles/710873

「アリババクラウドネイティブマイクロチャネルパブリック番号(ID:Alicloudnative)フォーカスマイクロサービスで、サーバレス、コンテナ、サービスメッシュ及び他の技術分野、クラウドネイティブで人気の技術動向を中心に、クラウドネイティブの大規模な着陸の練習は、ほとんどがクラウドネイティブ開発を理解してください技術公衆番号。」

おすすめ

転載: www.cnblogs.com/alisystemsoftware/p/11571548.html