サービス発見Kubernetesのための条
HTTPS:// www.kubernetes.org.cn/7014.html
Kubernetesサービスの発見は、多くの場合、私のテーマの一つの混乱です。本論文では2つの部分に分かれています。
背景知識ネットワーク
Kubernetesサービスの発見を理解する
サービスディスカバリを理解するためには、まず、その背後にある知識のネットワークを理解する必要があります。この部分に精通している読者は、直接読み取りサービス発見セクションをスキップすることができた場合、この部分は、比較的単純かつ明白です。
開始する前にこのプロセスの詳細な説明は順序で少し長め、紙を行うことを思い出すことする必要があります。
Kubernetesのネットワークインフラストラクチャ
発見のサービスの開始前に、以下のことを理解する必要があります。
Kubernetesの ポッド内にあるコンテナで実行中のアプリケーション。
各ポッドは、ネットワークは、ポッド(典型的には、VXLANオーバーレイネットワーク)と呼ばれ、大型フラットIPネットワークで同じに取り付けられています。
各ポッドは、独自のユニークなIPアドレスを持っている、IPアドレスは、ポッドのネットワークでルーティング可能です。
3つの要因がネットワークNAT処理等を経ることなく、各アプリケーションは、(アプリケーションコンポーネントとサービス)、直接通信することができるように、組み合わせることができます。
動的なネットワーク
アプリケーションの水平展開は、ポッドポッドで新しいネットワークに参加する、新しいポッドが自然に新しいIPアドレスを伴う;アプリケーションは体積が減少した場合、古いポッドとIPが削除されます。これは混乱に見えるかもしれません。
スクロールの更新やアプリケーションの撤退が同じ状況である - 新しいポッドの新しいバージョンを含むが、あるいは古いポッドの古いバージョンを削除します。新しいポッドポッドは古いポッドの終わりには、既存のIPを削除し、新しいIPネットワークに追加されます。
他の要因が存在しない場合は、各アプリケーションサービスは、ネットワークを監視し、健康ポッドのリストを管理するために必要とされています。このプロセスは、各アプリケーションでは、このロジックを記述するだけでなく、非常に痛みを伴うことができ、非常に非効率的です。幸い、Kubernetes このプロセス--serviceの完了目標を持ちます。
サービスと呼ばれるこのオブジェクトは、我々はアプリケーションまたはコンポーネントのプロセスを記述するために、この言葉を使用していた、悪い考えです。
ノートへのもう一つ:Kubernetesを 使用し、利用可能なIPアドレス追跡のポッドネットワーク、IPアドレス管理(IPAM)機能を実行します。
持参の安定性へのサービス
Kubernetesサービスオブジェクトは、それらのポッドのためのサービスを提供するために、ポッドのグループ、および負荷分散の前に安定したネットワークのエンドポイントを作成します。
これは、サービスポッド同じ作業の前に置かれたオブジェクトのセット内に完了しています。例えば、認証サービスポッドの前に別のものを提供し、あなたの前ポッド内のフロントエンドWebサービスを提供することができます。前異なる責任の行使にポッドは、単一のサービスを使用しないでください。
クライアントサービスとの通信、サービスがポッドへのトラフィックの負荷分散のために責任があります。
なぜならストレッチのポッドの下部に、上記の図では、状況の更新、変更に失敗し、これらの変更は、サービスを追跡されます。同時に、サービス名では、IPとポートは変更されません。
Kubernetesサービスは解決します
Kubernetesサービスは、2つの部分の前面およびバックエンドとして理解することができます。
フロント:名前、IPと同じ一部のポート。
リア:その満たす特定のタグの選択基準のポッドセット。
フロントエンドは、安定性と信頼性で、その名前、IPおよびポートは、ライフサイクルサービスを通じて変化しません。安定性手段クライアントのDNSキャッシュのタイムアウトの問題を気にせず、フロントエンドいます。
後端タグが選択基準ポッド出会うのセットを含み、非常に動的であり、それは負荷分散方法を介してアクセス可能であろう。
ロードバランシングは、単純な4層のポーリングです。これは、接続レベルで動作するので、同じ接続で開始されたすべての要求がポッドに入ります。4層の仕事なので、それほどのものHTTPクッキーの最初の7層のためかのようには、知覚することはできません。
要約
において、コンテナで実行中のアプリケーション Kubernetesは ポッドの形で具現化。同一平面ポッドネットワーク内にあるクラスタのすべてのポッドKubernetesは、独自のIPアドレスを持っています。この手段は、すべての中でポッドを直接接続することができます。ポッドが不安定であるしかし、それは様々な要因により作成および破棄することができます。Kubernetesは、安定したネットワークエンドポイントを提供し、サービス、同様のポッドの群の前方の物体と呼ばれる、安定した名前、IPとポートを提供します。クライアントは、ポッドに均衡トラフィック負荷にサービス、サービスに接続されています。
次は、チャットサービス発見。
Kubernetesサービス発見の深い理解
サービスの発見は、実際には2つの機能で構成されています。
1、サービスが登録された
サービスの発見、2を
サービス登録
サービス登録プロセスは、サービスレジストリサービスの登録になるように、他のサービス探索を指します。
Kubernetesは、サービス・レジストリーとしてDNSを使用します。
このニーズを満たすために、各 Kubernetesの クラスタがポッド実行DNSサービスとKUBE-システムの名前空間の形態であろう、一般的にクラスタDNSと呼ばれます。
各Kubernetesサービスは、自動的にDNSクラスタに登録されます。
次のように登録プロセスは以下のとおりです。
サービスPOST APIサーバーを定義するための新しい方法を提出する。
要求は、認証、認可、およびその他の入学政策の検査工程を必要とした後、これがリリースされます。
サービスはCLUSTERIP(仮想IPアドレス)を取得し、データウェアハウスのクラスタに保存します;
;普及クラスタ内のサービス構成
に必要なDNSレコードを作成するために準じたサービスを作成するクラスタ・DNSサービス。
上記の手順は、第五のステップが鍵です。CoreDNSを使用してDNSクラスタ Kubernetesの ネイティブアプリケーションの形で実行されます。CoreDNS用具コントローラは、新しいサービスオブジェクトを有することが判明した場合、あなたはサービスの記録CLUSTERIPに、ドメイン名からのマッピングを作成し、APIサーバーをリッスンします。このようなサービスは、DNSに自身を登録する必要はありません、CoreDNSコントローラは、サービス新しく作成されたオブジェクトに焦点を当て、およびそれに続くDNSプロセスを達成するために。
DNS名はmetadata.nameに登録され、CLUSTERIP裁量Kubernetesによってれます。
他のポッドサービスオブジェクトがDNSにクラスタに登録された後、それが発見されたクラスタ内で実行することができます。
エンドポイントオブジェクト
フロントエンドサービスが正常に作成され、サービスレジストリ(DNS)に登録した後、残りの部分は、バックエンドの作品です。ポッドは、バックエンドのリストが含まれ、サービスオブジェクトフローは、これらのポッドに配布されます。
ポッドには、このリストのニーズが最新であることは間違いありません。
サービスオブジェクトは、ポッドは、負荷分散サービスのサービス範囲に組み込まれる条件のリストに沿って、ラベルのリストをあるラベルSelectorフィールドを、持っています。次の図を参照してください。
Kubernetesは、自動的に各サービスのエンドポイントオブジェクトを作成します。責任エンドポイントオブジェクトは、サービスからのトラフィックを受信しますこれらのポッドのサービスタグセレクタポッド標準リストの行を保存することです。
次の図は、サービスは2ポッドを選択し、また、対象のエンドポイントサービスは、オブジェクトはIPのサービスポッドに合わせて2つの選択基準が含まれて表示されます。
その後、私たちはどのようにCLUSTERIPネットワークポッドIPプロセスに転送されたトラフィック、だけでなく、エンドポイントのオブジェクトへの参照に説明します。
サービス検出
我々は仮定 Kubernetesは、 2つのフロントエンドアプリケーションを持って、私のアプリとあなたのアプリは、ポッドの私のアプリは、クラスタと呼ばれるサービスオブジェクトの私のアプリ-SVCである;あなたのアプリポッドサービスがyour-なる前にアプリ-SVC。
2つのサービスオブジェクトに対応するDNSレコードは次のとおりです。
私のアプリ-SVC:10.0.0.10
あなたのアプリ-SVC:10.0.0.20
サービスディスカバリ機能を使用するには、各ポッドはそれを使用するためには、クラスタのDNSの場所を知っている必要があります。従って、各容器内の各ポッドの/etc/resolv.confファイルは、クラスタ分析DNSを使用するように構成されています。
ポッドの私のアプリはポッドであなたのアプリに接続したい場合は、DNSサーバにドメイン名のためのあなたのアプリ-SVCをクエリを開始する必要があります。彼らはあなたがクラスタDNSサーバに提出問い合わせをする必要があり、ローカルDNSキャッシュがこのレコードを解決しないことを前提としています。あなたはCLUSTERIP(VIP)のあなたのアプリ-SVCを取得します。
私のアプリの必要性は、ターゲット・サービスの名前を知っているという前提があります。
この時点では、ポッドの私のアプリは、宛先IPアドレスとなっているが、これは、ターゲットポッドを移動する前に、いくつかのネットワークがやるべき仕事、ちょうど仮想IPです。
ネットワーク
ポッドはCLUSTERIPサービスされた後、我々はIPにトラフィックを送信してみてください。それまでのルート - しかし、あるネットワークCLUSTERIPはサービスネットワーク、このネットワークビットの特別な呼ばれています。
デフォルトゲートウェイのアドレスに送信されたすべてのコンテナのトラフィックを見つけるために何のルートが存在しないので(ブリッジCBR0と呼ばれます)。トラフィックは、ノードポッド上のカードに転送されます。ネットワークスタックノードは、それが唯一のデフォルトゲートウェイに送信することができ、また、サービスネットワークに到達へのルートではありません。デフォルトゲートウェイルーティングノードデータパケットにノードコアを通過する - ここで変更されています。
以前のコンテンツのレビュー。まずConfiguration Serviceのオブジェクトが有効なクラスタの全範囲で、他の意志がエンドポイントは、再びオブジェクトきます。私たちは、審査の過程でそれぞれの責任を見つけたいです。
各 Kubernetesの ノードと呼ばれるKUBE-プロキシシステムサービスが実行されます。これはKubernetesポッドに基づいてネイティブアプリケーション、それがサービスAPIサーバーを実装して変化し、それに応じて作成またはIPVSノードに通知するルールをiptablesの、標的捕捉パケットサービスネットワーク、およびコントローラのモニタを実行しますポッドIPに転送。
興味深いことに、KUBE-プロキシエージェントは、一般的な意味ではありません。それは動作しますが、iptablesの/ IPVSルールを作成して管理することです。それは過去unserspaceモデル機関で使用されるため、命名します。
(健康ポッドのリストが含まれています)そのCLUSTERIPとエンドポイントのオブジェクトを含むそれぞれの新しいサービス構成オブジェクトは、各ノードでKUBE-プロキシプロセスに送信されます。KUBE-プロキシが作成されるか、IPVSルールをiptablesの、サービスCLUSTERIPトラフィックのノードのキャプチャターゲットに通知し、オブジェクトの内容に基づいて、対応するポッドエンドポイントに転送します。
ノードがターゲットネットワークパケットにサービスコア処理されるたびに言うことである、パケットは、IPサービスのエンドポイントはIPの健康ポッドオブジェクト宛先変更、書き換えられたヘッダになります。
最初に使用iptablesのは、IPVS(安定にKubernetes 1.11)によって置換されています。長い話を短く、パケットフィルタのiptablesは、ロードバランスのために設計されていません。IPVSロードバランサ4は、パフォーマンスと実装が良好iptablesの使用シナリオより適し、層です。
概要
私たちは、コンテンツの多くは、簡単な審査を消化する必要があります。
新しいサービスオブジェクトを作成するとき、あなたは、CLUSTERIPと呼ばれる仮想IPを取得します。サービス名とそのCLUSTERIPは、自動的にDNSクラスタに登録され、かつポッドラベルは、サービスがトラフィックの転送ポッドのリストにオブジェクト健康状態のリストに沿ってホールドエンドポイントに使用される関連オブジェクトを作成します。
同時に、クラスタ内のすべてのノードは、フローCLUSTERIPと実際のポッドIPに転送するために目標を監視し、iptablesの/ IPVSルールを設定します。このプロセスを以下に示します。
ポッドポッド他のサービスと接続する必要があります。最初のクラスタDNSクエリに送信され、CLUSTERIPへのサービス名解決さは、その後、サービスのWeb CLUSTERIPに位置にトラフィックを送信します。ポッドがデフォルトゲートウェイにトラフィックを送信するように、しかし、サービスネットワークに、ルーティングではありません。この動作は、トラフィックがNICのポッド、デフォルトのゲートウェイノードノードに転送されてしまいます。この操作では、ノードはターゲットのカーネルIPパケットのヘッダーで、ステアリング健康ポッドを変更します。
ポッドは、最終的にはすべて同じフラットなルーティング可能なオーバーレイネットワーク、非常にシンプルな残りの内容にあります。
著者:ナイジェルPoultonの
ソース&翻訳:擬似建築家