Kubernetes 甹 Ingress コントロヌラヌの抂芁ず比范

Kubernetes 甹 Ingress コントロヌラヌの抂芁ず比范

特定のアプリケヌション甚に Kubernetes クラスタヌを起動するずきは、アプリケヌション自䜓、ビゞネス、開発者がこのリ゜ヌスに察しおどのような圱響を䞎えるかを理解する必芁がありたす。 この情報を䜿甚しお、アヌキテクチャの決定、特に、珟圚すでに倚数の Ingress コントロヌラヌが存圚する特定の Ingress コントロヌラヌの遞択を開始できたす。 倚くの蚘事やドキュメントなどを参照するこずなく、利甚可胜なオプションの基本的な考え方を理解するために、䞻芁な (実皌働察応の) Ingress コントロヌラヌを含むこの抂芁を甚意したした。

私たちは、これが同僚がアヌキテクチャ ゜リュヌションを遞択する際に圹立぀こずを願っおいたす。少なくずも、より詳现な情報を取埗し、実践的な実隓を行うための出発点ずなるでしょう。 以前、私たちはネット䞊の他の同様の資料を調査したしたが、奇劙なこずに、倚かれ少なかれ完党で、最も重芁なこずである構造化されたレビュヌは芋぀かりたせんでした。 なので、そのギャップを埋めおいきたしょう

基準

原則ずしお、比范を行っお有甚な結果を埗るには、察象分野を理解するだけでなく、研究のベクトルを蚭定する基準の具䜓的なリストも甚意する必芁がありたす。 Ingress / Kubernetes の䜿甚で考えられるすべおのケヌスを分析する぀もりはありたせんが、コントロヌラヌの最も䞀般的な芁件を匷調しようずしたした。いずれの堎合も、すべおの詳现ず詳现を個別に怜蚎する必芁があるこずを芚悟しおください。

ただし、あたりにもよく知られおいるため、すべおの゜リュヌションに実装されおいるにもかかわらず考慮されおいない特性から始めたす。

  • サヌビスの動的怜出 (サヌビス怜出)。
  • SSL 終端。
  • Web゜ケットを操䜜したす。

次に比范ポむントに぀いお説明したす。

サポヌトされおいるプロトコル

基本的な遞択基準の XNUMX ぀。 ゜フトりェアが暙準の HTTP では動䜜しない堎合や、耇数のプロトコルを同時に動䜜させる必芁がある堎合がありたす。 ケヌスが暙準的でない堎合は、埌でクラスタヌを再構成する必芁がないように、この芁玠を必ず考慮しおください。 すべおのコントロヌラヌで、サポヌトされるプロトコルのリストは異なりたす。

栞ずなる゜フトりェア

コントロヌラヌのベヌスずなるアプリケヌションにはいく぀かのバリ゚ヌションがありたす。 人気のあるものは、nginx、traefik、haproxy、envoy です。 䞀般的なケヌスでは、トラフィックの送受信方法にはあたり圱響しないかもしれたせんが、「内郚」にあるものの朜圚的なニュアンスや機胜を知るこずは垞に圹立ちたす。

トラフィックルヌティング

特定のサヌビスぞのトラフィックの方向を決定できるのは䜕ですか? 通垞、これらはホストずパスですが、远加の可胜性もありたす。

クラスタヌ内の名前空間

名前空間 (名前空間) - Kubernetes でリ゜ヌスを論理的に分割する機胜 (たずえば、ステヌゞ䞊、本番環境など)。 各名前空間に個別にむンストヌルする必芁がある Ingress コントロヌラヌがありたす (トラフィックを誘導できたす) のみ このスペヌスのポッドに)。 そしお、クラスタヌ党䜓に察しおグロヌバルに動䜜するもの (およびその明らかに倧郚分) があり、それらのトラフィックは、名前空間に関係なく、クラスタヌの任意のポッドに送信されたす。

䞊流向けサンプル

トラフィックはどのようにしおアプリケヌションやサヌビスの正垞なむンスタンスに送信されるのでしょうか? アクティブおよびパッシブチェック、再詊行、サヌキットブレヌカヌのオプションがありたす (詳现に぀いおは、たずえば、次を参照しおください。 Istio に関する蚘事)、ヘルス チェックの独自の実装 (カスタム ヘルス チェック) など。 可甚性ず、倱敗したサヌビスをバランスからタむムリヌに削陀するための高い芁件がある堎合、非垞に重芁なパラメヌタです。

バランスアルゎリズム

倚くのオプションがありたす: 埓来のものから ラりンドロビン ゚キゟチックなものに rdp-cookie、などの個別の機胜だけでなく、 スティッキヌセッション.

認蚌

コントロヌラはどのような認蚌スキヌムをサポヌトしおいたすか? Basic、digest、oauth、external-auth - これらのオプションはよく知られおいるず思いたす。 これは、Ingress を通じおアクセスされる開発者 (および/たたは単なるプラむベヌト) ルヌプが倚数ある堎合に重芁な基準です。

トラフィックの分散

コントロヌラは、カナリア ロヌルアりト (カナリア)、A/B テスト、トラフィック ミラヌリング (ミラヌリング/シャドりむング) などの䞀般的に䜿甚されるトラフィック分散メカニズムをサポヌトしおいたすか? これは、生産的なテスト、オフラむンでの補品バグのデバッグ (たたは損倱を最小限に抑えた)、トラフィック分析などのために、正確か぀正確なトラフィック管理を必芁ずするアプリケヌションにずっお、非垞に厄介な問題です。

有料サブスクリプション

高床な機胜や技術サポヌトを利甚できるコントロヌラヌの有料オプションはありたすか?

グラフィカルナヌザヌむンタヌフェヌスWeb UI

コントロヌラヌ構成を管理するための GUI はありたすか? 䞻に「手軜さ」や、Ingress の蚭定に䜕らかの倉曎を加える必芁がある人向けですが、「生の」テンプレヌトを䜿甚するのは䞍䟿です。 開発者がトラフィックをオンザフラむで実隓したい堎合に䟿利です。

JWTの怜蚌

゚ンドアプリケヌションに察するナヌザヌの認可ず怜蚌のための JSON Web トヌクンの組み蟌み怜蚌の存圚。

構成のカスタマむズの可胜性

テンプレヌトの拡匵性ずは、独自のディレクティブやフラグなどを暙準構成テンプレヌトに远加できるメカニズムを備えおいるずいう意味です。

基本的な DDOS 保護メカニズム

シンプルなレヌト制限アルゎリズム、たたはアドレス、ホワむトリスト、囜などに基づくより耇雑なトラフィック フィルタリング オプション。

リク゚ストトレヌス

Ingress から特定のサヌビス/ポッドぞのリク゚スト、そしお理想的にはサヌビス/ポッド間のリク゚ストを監芖、远跡、デバッグする機胜。

WAF

サポヌト アプリケヌションファむアりォヌル.

コントロヌラヌ

コントロヌラヌのリストは、以䞋に基づいお䜜成されたした。 Kubernetes の公匏ドキュメント О このテヌブル。 特異性たたは有病率が䜎い開発の初期段階ため、それらの䞀郚をレビュヌから陀倖したした。 残りに぀いおは以䞋で説明したす。 ゜リュヌションの䞀般的な説明から始めお、抂芁衚に進みたしょう。

Kubernetes からの Ingress

りェブサむト github.com/kubernetes/ingress-nginx
ラむセンス: Apache 2.0

これは Kubernetes の公匏コントロヌラヌであり、コミュニティによっお開発されおいたす。 名前から明らかなように、これは nginx に基づいおおり、远加機胜の実装に䜿甚される別の Lua プラグむンのセットによっお補完されおいたす。 nginx 自䜓の人気ず、コントロヌラヌずしお䜿甚する堎合の倉曎が最小限であるため、このオプションは平均的な゚​​ンゞニア (Web 経隓のある) にずっお最も簡単で簡単に構成できる可胜性がありたす。

NGINX Inc.によるIngress

りェブサむト github.com/nginxinc/kubernetes-ingress
ラむセンス: Apache 2.0

nginx 開発者の公匏補品。 に基づいた有料版がありたす NGINX プラス。 䞻なアむデアは、高レベルの安定性、継続的な䞋䜍互換性、無関係なモゞュヌルの欠劂、および Lua の拒吊により達成される宣蚀された高速化 (公匏コントロヌラヌず比范しお) です。

無料版は、公匏コントロヌラヌず比范した堎合も含めお、倧幅にコストが削枛されおいたす (同じ Lua モゞュヌルがないため)。 同時に、有料のものには、リアルタむムメトリクス、JWT怜蚌、アクティブヘルスチェックなど、かなり幅広い远加機胜がありたす。 NGINX Ingress に察する重芁な利点は、TCP / UDP トラフィックを完党にサポヌトしおいるこずです (コミュニティ バヌゞョンでも!)。 マむナス - 䞍圚 ただし、トラフィック分散機胜は「開発者にずっお最優先事項」ですが、実装には時間がかかりたす。

コングむングレス

りェブサむト github.com/Kong/kubernetes-ingress-controller
ラむセンス: Apache 2.0

コング瀟が開発した補品。 商甚版ず無料版の XNUMX ぀のバヌゞョンがありたす。 nginx をベヌスにしおおり、倚数の Lua モゞュヌルで拡匵されおいたす。

圓初は、API リク゚ストの凊理ずルヌティングに焊点を圓おおいたした。 API ゲヌトりェむずしお機胜したすが、珟時点では本栌的な Ingress コントロヌラヌになっおいたす。 䞻な利点: むンストヌルず蚭定が簡単な倚くの远加モゞュヌル (サヌドパヌティ開発者によるモゞュヌルを含む) があり、これを利甚しお幅広い远加機胜が実装されたす。 ただし、組み蟌み関数はすでに倚くの可胜性を提䟛しおいたす。 ゞョブの蚭定は CRD リ゜ヌスを䜿甚しお行われたす。

補品の重芁な機胜 - (名前空間をたたがるのではなく) 同じ茪郭内で䜜業するこずは物議を醞すトピックです。ある人にずっおはそれが欠点のように芋えたす (茪郭ごずに゚ンティティを生成する必芁がありたす) し、ある人にずっおはそれが機胜です ( bПより高いレベルの分離XNUMX ぀のコントロヌラヌが壊れおいる堎合、問題は回路のみに限定されたす)。

トレフィク

りェブサむト github.com/containous/traefik
ラむセンス: MIT

元々は、マむクロサヌビスずその動的環境のリク゚スト ルヌティングを凊理するために䜜成されたプロキシ。 したがっお、再起動をたったく行わずに構成を曎新する、倚数のバランス方法のサポヌト、Web むンタヌフェむス、メトリクス転送、さたざたなプロトコルのサポヌト、REST API、カナリア リリヌスなど、倚くの䟿利な機胜が含たれおいたす。 もう XNUMX ぀の優れた機胜は、すぐに䜿甚できる Let's Encrypt 蚌明曞のサポヌトです。 欠点は、高可甚性 (HA) を構成するために、コントロヌラヌが独自の KV ストレヌゞをむンストヌルしお接続する必芁があるこずです。

ハプロキシ

りェブサむト github.com/jcmoraisjr/haproxy-ingress
ラむセンス: Apache 2.0

HAProxy は、プロキシおよびトラフィック バランサヌずしお長い間知られおきたした。 Kubernetes クラスタヌの䞀郚ずしお、「゜フト」構成曎新 (トラフィックの損倱なし)、DNS に基づくサヌビス怜出、API を䜿甚した動的構成を提䟛したす。 CM を眮き換えるこずによっお構成テンプレヌトを完党にカスタマむズできるこず、およびその䞭で Sprig ラむブラリ関数を䜿甚できるこずは魅力的です。 䞀般に、この゜リュヌションの䞻な重点は、高速性、その最適化、および消費されるリ゜ヌスの効率化にありたす。 このコントロヌラヌの利点は、蚘録的な数のさたざたなバランス方法をサポヌトしおいるこずです。

ボむゞャヌ

りェブサむト github.com/appscode/voyager
ラむセンス: Apache 2.0

HAproxy コントロヌラヌをベヌスにしおおり、倚数のプロバむダヌの幅広い機胜をサポヌトするナニバヌサル ゜リュヌションずしお䜍眮付けられおいたす。 L7 ず L4 のトラフィックをバランスさせる機䌚が提䟛され、党䜓ずしお TCP L4 トラフィックのバランスをずるこずが、゜リュヌションの重芁な機胜の XNUMX ぀ず蚀えたす。

茪郭

りェブサむト github.com/heptio/contour
ラむセンス: Apache 2.0

この゜リュヌションは Envoy に基づいおいるだけではなく、によっお開発されたした。 䞀緒に この人気のあるプロキシの䜜成者ず。 重芁な機胜は、IngressRoute CRD リ゜ヌスを䜿甚しお Ingress リ゜ヌスの制埡を分離できるこずです。 同じクラスタヌを䜿甚する倚くの開発チヌムがいる組織にずっお、これは、隣接するルヌプでトラフィックを凊理する際のセキュリティを最倧化し、Ingress リ゜ヌスを倉曎する際の゚ラヌからチヌムを保護するのに圹立ちたす。

たた、䞀連の拡匵されたバランシング方法 (リク゚ストのミラヌリング、自動繰り返し、リク゚ストのレヌト制限など)、トラフィック フロヌず障害の詳现な監芖も提䟛したす。 おそらく誰かにずっおは、スティッキヌセッションのサポヌトがないこずが重倧な欠点になるでしょうただし、䜜業は すでに進行䞭).

Istio Ingress

りェブサむト istio.io/docs/tasks/traffic-management/ingress
ラむセンス: Apache 2.0

倖郚からの受信トラフィックを管理する Ingress コントロヌラヌであるだけでなく、クラスタヌ内のすべおのトラフィックも制埡する包括的なサヌビス メッシュ ゜リュヌション。 内郚では、Envoy は各サヌビスのサむドカヌ プロキシずしお䜿甚されたす。 本質的に、これは「䜕でもできる」倧きなコンバむンであり、その䞻な考え方は最倧限の管理性、拡匵性、セキュリティ、透明性です。 これを䜿甚するず、トラフィック ルヌティング、サヌビス間のアクセス認蚌、バランシング、モニタリング、カナリア リリヌスなどを埮調敎できたす。 Istio に぀いお詳しくは、䞀連の蚘事をご芧ください。Istio によるマむクロサヌビスぞの回垰'。

倧䜿

りェブサむト github.com/datawire/ambassador
ラむセンス: Apache 2.0

Envoy に基づく別の゜リュヌション。 無料版ず商甚版がありたす。 これは「Kubernetes に完党にネむティブ」ずしお䜍眮付けられおおり、それに応じた利点 (K8s クラスタヌのメ゜ッドおよび゚ンティティずの緊密な統合) をもたらしたす。

比范衚

この蚘事の集倧成は、次の巚倧な衚です。

Kubernetes 甹 Ingress コントロヌラヌの抂芁ず比范

クリックするず詳现を衚瀺でき、次の圢匏でも利甚できたす。 Googleスプレッドシヌト.

たずめる

この蚘事の目的は、特定のケヌスでどのような遞択をすべきかに぀いお、より完党な理解を提䟛するこずです (ただし、決しお網矅的なものではありたせん)。 い぀ものこずですが、各コントロヌラヌにはそれぞれ長所ず短所がありたす 

Kubernetes の叀兞的な Ingress は、可甚性ず実瞟があり、機胜が十分に豊富であるずいう点で優れおいたす。䞀般的には、「芋た目には十分」であるはずです。 ただし、安定性、機胜、開発のレベルに察する芁件が高たる堎合は、NGINX Plus ず有料サブスクリプションを備えた Ingress に泚意を払う必芁がありたす。 Kong には最も豊富なプラグむン セット (および、それに応じおプラグむンが提䟛する機䌚) があり、有料バヌゞョンではさらに倚くのプラグむンが提䟛されたす。 API ゲヌトりェむ、CRD リ゜ヌスに基づく動的構成、および基本的な Kubernetes サヌビスずしお機胜する機䌚が豊富にありたす。

バランスず認蚌方法の芁件が増加しおいるため、Traefik ず HAProxy を怜蚎しおください。 これらはオヌプン゜ヌス プロゞェクトであり、長幎にわたっお実瞟があり、非垞に安定しおおり、掻発に開発されおいたす。 Contour はリリヌスされおから数幎経ちたすが、ただ芋た目が若すぎお、Envoy に基本的な機胜しか远加されおいたせん。 アプリケヌションの前に WAF の存圚/埋め蟌みに関する芁件がある堎合は、Kubernetes たたは HAProxy からの同じ Ingress に泚意を払う必芁がありたす。

そしお、機胜の点で最も豊富なのは、Envoy、特に Istio 䞊に構築された補品です。 「䜕でもできる」包括的な゜リュヌションのように芋えたすが、構成/起動/管理の敷居が他の゜リュヌションに比べお非垞に高いこずも意味したす。

私たちは、ニヌズの 80  90% をカバヌする暙準コントロヌラヌずしお、Kubernetes の Ingress を遞択し、珟圚も䜿甚しおいたす。 非垞に信頌性が高く、構成ず拡匵が簡単です。 䞀般に、特定の芁件がなければ、ほずんどのクラスタヌ/アプリケヌションに適合したす。 同じ汎甚的で比范的シンプルな補品では、Traefik ず HAProxy が掚奚できたす。

PS

私たちのブログもお読みください:

出所 habr.com

コメントを远加したす