k8s についてある程度の知識を持つ技術者は、k8s にサービス登録と検出機能があることだけを知っていればよいはずです。今日は、この原則を分析し、それがどのように実装されるかを見ていきます。 サービス登録と検出とは何ですか?サービス登録と検出は、クラスター内のさまざまなサービスを動的に検出して接続するためのメカニズムです。たとえば、マイクロサービスを開発するときには、Eureka や Nacos がよく使用されます。 サービス B はサービス レジストリに自身を登録します。これをサービス登録と呼びます。 サービス A は、サービス レジストリからサービス B のノード情報を検出します。これをサービス検出と呼びます。 K8s でサービス検出が必要なのはなぜですか?動的K8s クラスターでは、ポッドとサービスの数と場所が動的に変化します。ポッドはスケーリング、再デプロイ、または移行される可能性があります。このような環境では、ハードコードされたサービス アドレスは実現不可能であるため、サービス登録と検出により、システムはそのような変更を自動的に認識できるようになります。 透明性サービス登録と検出により、システムは特定の IP アドレスやポート番号を気にすることなく、サービス名を使用して他のサービスにアクセスできるようになります。 負荷分散負荷分散は、サービス登録と検出を通じて実現され、リクエストを複数のバックエンド サービス インスタンスに均等に分散します。 フォールトトレランスサービス インスタンスに障害が発生したり、利用できなくなったりすると、サービス登録と検出によって、利用できないインスタンスが自動的に検出され、サービス検出メカニズムから削除されます。この方法では、リクエストは利用可能なインスタンスに自動的にルーティングされ、アプリケーションのフォールト トレランスと可用性が向上します。 k8s サービスの登録と検出の原則上記の紹介に基づいて、K8s の Pod のライフサイクルは短く、IP アドレスは常に変更されることがわかります。サービス コンシューマーがこれらの Pod IP を管理して負荷分散のために Pod を呼び出す場合、非常に複雑になります。外部にサービスを提供する統一された入り口を提供するために、k8s は Service を作成します。内部か外部かを問わず、サービスは一律に呼び出され、その後サービスによってバックエンドのポッドに転送されます。 エンドポイントPod のアドレス管理はエンドポイントによって管理されます。エンドポイント情報は、サービス名に従って照会できます。 API を通じてサービス オブジェクトが作成/変更されると、エンドポイント コントローラーはサービス オブジェクトをリッスンし、サービスによって構成されたセレクターに基づいてエンドポイント オブジェクトを作成します。このオブジェクトは、etcd にポッドの IP とコンテナ ポート情報を保存します。 それらの関係は次のとおりです。 同時に、エンドポイント コントローラーは、オンライン イベントやオフライン イベントなど、ポッドに関連するイベントを監視します。エンドポイント コントローラーはこれらのイベントを受信すると、それに応じてエンドポイント リソースを更新し、使用できないポッドをエンドポイント リストから削除します。 ドメイン名解決サービス IP は変更される可能性があるため、コード内にサービス IP がハードコードされている場合は、後でメンテナンスするのが面倒になります。したがって、サービスを作成するときに、CoreDNS はサービスのドメイン名解決レコードを追加し、サービス名を対応するクラスター IP アドレスに解決します。これにより、他のポッドまたはサービスはサービス名を使用してサービスにアクセスできるようになります。 kubeプロキシkube-proxy は、クラスター内の各ノードで実行されるネットワーク プロキシです。クラスター内のサービスを他のポッドまたは外部ネットワークに公開する役割を担います。 Node ノード上でネットワーク ルールと転送ルールを設定することで、サービス リクエストを正しいターゲット Pod に転送します。 同時に、kube-proxy は負荷分散アルゴリズムを実装して、受信したサービス要求をバックエンドの Pod インスタンスに均等に分散します。これにより、サービスは複数のレプリカを使用してバランスよくリクエストを処理できるようになり、可用性とパフォーマンスが向上します。 kube-proxy は、監視を通じてサービスとエンドポイント オブジェクトの作成を学習し、サービスの CLUSTER-IP とポート情報を取得し、転送用の iptables NAT ルールを作成するか、ipvs モジュールを通じて VS サーバーを作成して、CLUSTER-IP を通過するすべてのトラフィックがバックエンド ポッドに転送されるようにします。 サービスのターゲット Pod が同じノード上にある場合、kube-proxy はリクエストをノード間で転送せずに、そのノード上の Pod に直接転送します。この場合、リクエストは他のノードに送信されません。 ただし、サービスのターゲット Pod が複数のノードに分散されている場合、kube-proxy は負荷分散アルゴリズムを通じて他のノード上の Pod にリクエストを転送できます。 サンプルデモ次に、2 つの構成ファイルに基づいて上記の結論を検証します。
serve_hostname は、k8s によって公式に提供されるデバッグ イメージです。ホスト名の Web サーバーを返します。ポッドにアクセスすると、ホスト名が返されます。
サービスのセレクター属性に app: nginx が指定されていることがわかります。これは、デプロイメントで定義されている nginx ポッドと一致します。 上記の2つのファイルを順番に実行すると、最終的に次の情報が得られます。 サービスアドレスビュー
ポッド情報を表示
エンドポイント情報ビュー サービス名によるクエリ
CoreDNS情報検証 任意の Pod にログインし、ping コマンドを実行します。サービス クラスター IP がサービス名に従って解決されていることがわかります。 負荷分散の検証 任意のポッドにログインし、curl nginx-service を実行し、サービスのポート 80 を要求すると、対象のポッド名が返されます。 上記では、サービス ディスカバリとは何か、そして k8s サービス ディスカバリがどのように実装されるかについて説明しました。お役に立てれば幸いです。 |
<<: Akamai IoT エッジ プラットフォームをベースにしたサーバーレス位置情報共有アプリケーションの構築方法
>>: クラウドに乗って未来へ | ByteDanceのマルチクラウドの進化とコスト削減の実践
moonvm 再入荷: (1) 香港 HGC 回線の VPS 再入荷、10% 割引、静的固定 IP、...
タオバオの中小規模の販売業者にとって、タオバオの列車やダイヤモンドブースを購入するには多額の費用がか...
WootHosting、プロモーション期間中のロサンゼルスデータセンターの格安VPS、サーバーはクア...
【元記事は51CTO.comより】 先ほど終了した「両会」は極めて重要な意味を持つ。2021年は中国...
Java アプリケーションの場合、Java ヒープは仮想マシンによって管理されるメモリの最大の部分で...
ご存知のとおり、ウェブサイトの運用と保守の作業員の仕事は、特に中小企業では比較的複雑です。総合的な資...
現在、Baidu はアルゴリズムを更新しており、多くのウェブマスターが危機感を抱いています。彼らは、...
クラウド セキュリティは、中国企業によって生み出された概念であり、国際的なクラウド コンピューティン...
1. 思考を刺激する質問少し前に、同僚と小さな要件について話し合っていたとき、「アクション」と「ステ...
vpsfun は、安徽省馬鞍山市でモバイル VPS サービスを提供する最初の企業であると主張しており...
SEO がどれだけ優れていても、すべての前提は、Web サイトが Baidu に含まれる必要があると...
まず、外部リンクを構築する目的を理解する必要があります。各外部リンク ストアは投票ポイントに相当する...
ファッションEコマースサイトLittleBlackBagが275万ドルを調達網易科技ニュース、2月2...
みなさんこんにちは、私は朱偉坤です。まずは、私の近況を心配してくださる多くの友人に感謝したいと思いま...
Faconhost は最近、ロサンゼルスのデータセンターに新しい VPS シリーズを追加しました。A...