TraefikをベースにしたKubernetes Ingressネットワークシステムについてお話しましょう

TraefikをベースにしたKubernetes Ingressネットワークシステムについてお話しましょう

こんにちは、皆さん。私はルガです。今日は、クラウド ネイティブ エコシステムに関連するテクノロジー、つまりクラウド ネイティブ ゲートウェイ Traefik について引き続きお話します。この記事では、Kubernetes の Ingress ネットワーク システム テクノロジの分析に引き続き重点を置き、Ingress アクセスが一般的になっている理由と、アプリケーションや市場の開発で Ingress アクセスをより有効に活用する方法を誰もが理解できるようにします。

1. Kubernetes Ingressネットワークの簡単な分析

ご存知のとおり、Kubernetes は主要なコンテナ オーケストレーション プラットフォームとして、分散アプリケーションの構築と管理のための強力な機能を提供します。ただし、ビジネス シナリオが異なれば、ネットワークの要件も異なります。これらの差別化された要件を満たすには、カスタマイズされたネットワーク ソリューションを提供するために、さまざまな Kubernetes クラスター ネットワーク モードを作成する必要があります。

一般的に、Kubernetes のクラスター ネットワークは、以下に示すように、次のコア要件を満たす必要があります。

  • サービスのセキュリティと分離: 異なるサービスが相互に分離され、悪意のあるアクセスが防止されるようにします。
  • ポッド接続、ネットワーク、および IP: ポッドのネットワーク接続と IP アドレスの割り当てを提供し、動的な割り当てと管理をサポートします。
  • 複数の物理クラスターからクラスター抽象化を展開するためのネットワークをセットアップします。複数の物理ノードを統合ネットワークに仮想化して、アプリケーションの展開と管理を容易にします。
  • サービスの複数のインスタンス間でのトラフィック負荷分散: トラフィックを複数のサービス インスタンスに均等に分散して、システムの負荷容量と信頼性を向上させます。
  • サービスへの外部アクセスを制御する: サービスのセキュリティを確保するために、サービスへのアクセス権を制限します。

パブリック環境および非クラウド環境での Kubernetes ネットワークの使用: さまざまなクラウド環境での Kubernetes クラスターの展開と操作をサポートします。

2. ポッド内のアクセス

2 つのノードを持つ単純な Kubernetes クラスターの場合、Kubernetes は Pod を作成して実行すると、Pod 用の独立したネットワーク名前空間を構築し、ネットワーク レベルで分離された環境を提供します。

この分離された環境では、Pod は独立したサーバー上で実行されているのと同じように、独立したネットワーク カード、IP アドレス、ルーティング テーブル、iptables ルールなどを含む独立したネットワーク スタックを持つことができます。この分離メカニズムにより、異なるポッド間のネットワーク トラフィックが相互に干渉することがなくなり、ネットワーク通信のセキュリティと信頼性が確保されます。

ネットワークの分離に加えて、Kubernetes は各ポッドに一意の IP アドレスも割り当てるため、クラスター内のすべてのポッドは IP アドレスを通じて相互にアクセスできるようになります。これらの IP アドレスは、専用のサブネットから静的に割り当てることも、DHCP などの動的割り当て方法を通じて取得してクラスターによって自動的に管理することもできます。使用される割り当て方法に関係なく、Kubernetes はクラスター全体で IP の競合が発生しないようにし、スムーズで信頼性の高い通信を保証します。

詳細については、以下を参照してください。

Pod ネットワークの分離によりサービスのセキュリティは確保されますが、サービス アクセスに一定の課題も生じます。ポッド内の IP アドレスはクラスターの外部からアクセスできないため、外部クライアントはサービスと直接通信できません。これはサービスにとって何を意味しますか?サービスは、Pod ネットワーク内の Pod 内で実行されます。 Pod ネットワーク (サービス用) に割り当てられた IP アドレスは、Pod の外部からはアクセスできません。では、このサービスにはどのようにアクセスするのでしょうか?

3. クロスノードアクセス

実際のビジネス シナリオでは、サービスは通常、複数の Pod インスタンスで構成され、クラスター内の異なるノードに分散される場合があります。たとえば、サービスは 2 つの異なる物理ノードで実行される 2 つの Pod で構成されます。外部クライアントがサービスにアクセスする必要がある場合、Kubernetes は 2 つの Pod 間で負荷分散を実行して、リクエストが各インスタンスに公平に分散されるようにするにはどうすればよいでしょうか。

Kubernetes は、クラスター IP 抽象化メカニズムを使用してこの問題を解決します。具体的には、Kubernetes は統合された外部エントリ ポイントとして各サービスにクラスター IP を割り当てます。クライアントがサービスのリクエストを開始するときは、バックエンドの特定の Pod インスタンスを気にすることなく、クラスター IP に接続するだけで済みます。

次に、Kubernetes は、事前に設定された負荷分散戦略に基づいて、サービスを実行しているすべての Pod インスタンスに着信リクエスト トラフィックを分散します。一般的に使用される負荷分散アルゴリズムには、重みベースのラウンドロビン スケジューリング、最小接続スケジューリングなどがあります。ユーザーは、自分のニーズに応じてスケジューリング アルゴリズムをカスタマイズすることもできます。採用された戦略に関係なく、Kubernetes は、リクエスト トラフィックが Pod インスタンス間で適切に分散され、高可用性と負荷分散が実現されることを保証できます。

この負荷分散プロセスはクライアントに対して完全に透過的であることは注目に値します。クライアントは、バックエンド ポッドの実際の配布を気にすることなく、クラスター IP に接続するだけで済みます。これにより、クライアントのアクセス ロジックが簡素化されるだけでなく、高度なサービス抽象化が実現され、クライアントが基盤となるインフラストラクチャから切り離されます。

クラスター IP は、Kubernetes がサービス検出と負荷分散を実現するためのコア メカニズムであり、kube-proxy コンポーネントと一連のネットワーク テクノロジのサポートに依存しています。

Kubernetes は、kube-proxy、iptables/IPVS、ネットワーク プラグインなどの複数のコンポーネントの緊密な連携を通じて、効率的なトラフィック負荷分散を実現するだけでなく、豊富なネットワーク ポリシー制御をサポートできる高度に抽象化された強力なサービス ネットワーク ソリューションをユーザーに提供し、クラウド ネイティブ アプリケーションの潜在能力を真に解き放ち、マイクロサービス アーキテクチャの広範な適用を促進します。

4. クラスター外部アクセス

ClusterIP は、Kubernetes クラスターで実行されているサービスにアクセスするための便利な方法を提供しますが、デフォルトではクラスター内でのみアクセス可能であり、外部トラフィックからは見えません。これはセキュリティ上の理由により、サービスが外部から直接アクセスされ、攻撃されるのを防ぐためです。

ただし、シナリオによっては、クラスター外部のクライアントにサービスを公開する必要がある場合があります。たとえば、パブリック ネットワークに接続する一部の Web サービスや、クラスター間で通信する必要があるマイクロサービスなどです。このニーズを満たすために、Kubernetes は NodePort タイプのサービスを提供します。

NodePort サービスは、各ノードで指定されたポートを開いて、クラスター外部からのトラフィックをクラスター内に導入し、ClusterIP を介してバックエンドの Pod インスタンスにトラフィックを転送します。具体的には、クライアントが任意のノードの NodePort にアクセスすると、ノードはリクエストを対応する ClusterIP に転送し、ClusterIP は負荷分散を実行して、サービスを提供するすべての Pod インスタンスにトラフィックを分散します。

このモードは、クラスターのエッジにイングレス ゲートウェイを設定するのと同じであり、外部トラフィックの正当なエントリ ポイントを提供します。サービスの ClusterIP を直接公開する場合と比較して、この方法ではセキュリティと柔軟性が向上します。管理者は、NodePort を通じて外部に公開できるサービスを微調整でき、必要に応じて NodePort のポート マッピング ポリシーを調整することもできます。

NodePort サービスでは各ノードでポートを開く必要があることに注意してください。つまり、クラスター内のすべてのノードでポートを再利用することはできません。ポート リソースの無駄を避けるために、Kubernetes は利用可能な上位ポート (デフォルトの範囲は 30000 ~ 32767) を NodePort として自動的に割り当てます。もちろん、ユーザーは実際のニーズに応じて NodePort のポート番号をカスタマイズすることもできます。

Kubernetes は、NodePort に加えて、LoadBalancer や Ingress などのより高度なサービス公開方法もサポートしています。 LoadBalancer サービスは、クラウド サービス プロバイダーが提供するロード バランサを通じて、サービスに外部からアクセス可能な IP アドレスを提供します。 Ingress を使用すると、ユーザーはサービスの外部アクセス ルールをカスタマイズして、より洗練されたルーティングとトラフィック管理を実現できます。

ここでは、パブリック クラウドについては触れず、プライベート クラウド環境の Ingress ネットワークについてのみ説明します。

プライベート クラウドで実行する場合、LoadBalancer タイプのサービスを作成するには、ロード バランサーを構成できる Kubernetes コントローラーが必要です。現在のソリューションの中で、そのような実装の 1 つが MetalLb です。 MetalLB は、標準ルーティング プロトコルを使用するベアメタル Kubernetes クラスターのロード バランサー実装です。割り当てられた IP アドレスに基づいて、クラスター内の外部トラフィックをルーティングします。本質的に、MetalLB は、ベアメタル クラスター上の外部サービスが可能な限り正常に機能するように、標準ネットワーク機器と統合するネットワーク LoadBalancer 実装を提供することで、この不均衡を修正することを目指しています。

MetalLB は、BGP セッションを処理するためのバックエンドとして FRR コンテナを使用する実験的な FRR モードを実装します。 BGP セッションと BFD セッションのペアリングや IPV6 アドレスのアドバタイズなど、ネイティブ BGP 実装では利用できない機能を提供します。

MetalLB は、ベアメタル環境で使用できる Kubernetes 外部ロードバランサ実装です。これは Google が開発したシンプルなロード バランサで、ロード バランサ タイプのサービスにパブリック IP アドレス (外部 IP) を割り当て、外部 IP にルーティング情報を公開するという 2 つの機能があります。 MetalLb の設計機能に基づいて、主に次の 2 つのコア機能が含まれます。

  • アドレスの割り当て: LoadBalancer サービスを作成すると、MetalLB によって IP アドレスが割り当てられます。この IP アドレスは、事前に構成された IP アドレス プールから取得されます。同様に、サービスが削除されると、割り当てられた IP アドレスはアドレス データベースに返されます。
  • 外部ブロードキャスト: IP アドレスが割り当てられた後、クラスター外部のネットワークにこのアドレスの存在を通知する必要があります。 MetalLB は、標準ルーティング プロトコル (ARP、NDP、または BGP) を使用して実装されます。

放送方法は2通りあります。 1 つ目は、ARP (ipv4)/NDP (ipv6) プロトコルを使用するレイヤー 2 モードです。 2番目はBPGです。

以下に示す MetalLB ネットワーク参照図を見てみましょう。

上記の参照トポロジー図に基づくと、外部トラフィックがアクセスを要求すると、ルータと ipvs が設定されたルーティング情報に従って接続先を調整することがわかります。したがって、ある観点から見ると、MetalLB 自体は負荷分散コンポーネント機能ではなく、負荷分散シナリオに基づいて設計されています。

実は、Traefik のようなプロキシは、サービスとして実行し、この LoadBalancer タイプのサービスを定義することで、クラスターに流入するすべての外部トラフィックを受信できます。これらのプロキシは、L7 ルーティングとセキュリティ ルールを使用して構成できます。これらのルールの集合が Ingress ルールを形成します。

Ingress ベース - ロード バランサーを介して外部からアクセス可能なプロキシの背後にサービスを配置します。 L7 プロキシのレイヤーをサービスの前に配置して、L7 ルーティングとポリシーを適用できます。このためには、イングレス コントローラが必要です。 Ingress Controller は、外部トラフィックを受信するための LoadBalancer として構成された Kubernetes クラスター内のサービスです。

Ingress コントローラは、定義された L7 ルーティング ルールと L7 ポリシーを使用してトラフィックをサービスにルーティングします。詳細については、次の概略図を参照してください。

本質的に、Ingress Controller を実行し、Ingress でポリシーを実行することには、具体的には次のような明らかな利点がいくつかあります。

  • Ingress は、Kubernetes クラスター内でポリシーを適用するためのポータブルなメカニズムを提供します。クラスター内で実装されたポリシーは、クラウド間で簡単に移植できます。 Kubernetes サービス拡張機能を使用して水平方向にスケーリングできます。
  • Kubernetes サービスを使用して複数のプロキシを水平方向に拡張することができ、L7 構造の弾力性により操作と拡張が容易になります。
  • L7 ポリシーは、クラスターネイティブの状態ストレージを使用して、クラスター内のサービスと共同ホストできます。
  • L7 ポリシーをサービスに近づけることで、サービスと API に対するポリシーの適用とトラブルシューティングが簡素化されます。

Kubernetes クラスターで Ingress コントローラーを選択することは、クラスターのネットワーク パフォーマンス、セキュリティ、およびスケーラビリティに直接関係する非常に重要な決定です。非常に評価の高いオープンソースの Ingress コントローラーである Traefik は、その優れた設計コンセプトと強力な機能により、多くのユーザーにとって第一の選択肢の 1 つとなっています。

では、なぜ Traefik を Kubernetes Ingress の推奨として選択するのでしょうか?詳細は次のとおりです。

1. 使いやすくメンテナンスも簡単

Traefik のインストールと構成のプロセスは、非常に読みやすく保守しやすい YAML または TOML 形式の宣言型構成ファイルを使用するため、非常にシンプルでスムーズです。同時に、Traefik は Web UI に基づく直感的な管理インターフェイスも提供しており、ユーザーはルーティング ルール、ミドルウェア、その他の構成項目をリアルタイムで表示および管理できるため、運用と保守の複雑さが大幅に軽減されます。

2. 自動サービス検出機能

Traefik には、Kubernetes クラスター内のサービスの変更を自動的に監視し、手動による介入なしにこれらの変更に基づいて対応するルーティング ルールを動的に生成できる強力な自動サービス検出機能があります。この自動化機能により、構成プロセスが大幅に簡素化されるだけでなく、ルーティング ルールのリアルタイム更新が保証され、サービス検出の正確性と適時性が保証されます。さらに、Traefik は Kubernetes Ingress、Docker など複数のサービス検出メカニズムをサポートしており、さまざまな複雑なデプロイメント環境に適応できます。

3. インテリジェントな動的負荷分散

Traefik には、サービス インスタンスのリアルタイムの状態に応じてバックエンドの重みを動的に調整し、真にインテリジェントな負荷分散を実現できる、高性能な負荷分散モジュールが組み込まれています。同時に、Traefik はセッション アフィニティ、サーキット ブレーカー メカニズム、再試行戦略などの高度な機能もサポートしているため、サービスの高可用性と信頼性が確保され、アプリケーションに安定した効率的な動作環境が提供されます。

4. 豊富なミドルウェアエコシステム

Traefik には、認証、レート制限、回路遮断、再試行、キャッシュなど、さまざまな側面をカバーする数十の組み込みミドルウェアがあります。ユーザーは、実際のニーズに応じて簡単な構成でこれらのミドルウェアを有効にし、強力なエッジ サービスを迅速に構築できます。組み込みミドルウェアに加えて、Traefik は優れたスケーラビリティも提供し、ユーザーがさまざまな複雑なシナリオのニーズを満たすカスタマイズされたミドルウェアを開発および統合することをサポートします。

5. 優れた拡張性

実稼働レベルの Ingress コントローラーとして、Traefik は自然にスケーラブルです。単一インスタンス、クラスターなど、複数のデプロイメント モードをサポートします。クラスター モードでは、複数の Traefik インスタンスがシームレスに連携して、高可用性と水平拡張を実現できます。同時に、Traefik は HTTP、gRPC などの複数のバックエンド サーバー タイプもサポートしており、さまざまな複雑なアプリケーション シナリオのニーズを満たすことができます。

6. 包括的なセキュリティ保護

Traefik を設計する際、セキュリティは最優先事項であり、HTTPS/TLS やロールベースのアクセス制御 (RBAC) などの複数のセキュリティ機能をサポートしています。 Traefik は、Let's Encrypt やその他の方法を通じて SSL/TLS 証明書を自動的に取得および更新し、データ転送のエンドツーエンドの暗号化を保証します。同時に、基本認証、JWT などの完全な ID 認証メカニズムも提供し、不正アクセスからサービスを効果的に保護します。

<<:  Kubernetes クラスター ノードが「準備完了」状態の場合のトラブルシューティング

>>:  Elasticsearch - 分散検索および分析エンジン

推薦する

ブラックストーンがハイブリッドクラウドの境界を拡大、テンセントクラウドがユーザーによるより充実したハイブリッドクラウドの構築を支援

「国内のIT環境が従来のアーキテクチャからクラウドアーキテクチャへと進化するにつれ、プライベートクラ...

マルチクラウド環境をより良く管理する方法

今日では、単一の Infrastructure as a Service (IaaS) クラウド コ...

ウェブサイト診断ではどのような点を分析する必要がありますか?

プロのウェブサイト最適化担当者として、基本的な SEO 操作を理解する必要があります。基本的な SE...

インテルがクラウドコンピューティングの加速キーを押す

4 月 7 日、Intel はシングル ソケットおよび 2 ソケット サーバー向けに設計された第 3...

#大容量ハードディスク: boltvm-$2.25/1g メモリ/100g ハードディスク/2CPU/1T トラフィック/ロサンゼルス/ニュージャージー

boltvm は電子メールで、VPS が最近アップグレードされ、主にメモリと帯域幅がアップグレードさ...

3つの共同購入会社を経験した内部関係者は「美団を尊敬している」と語った。

私は2011年2月14日のバレンタインデーに共同購入サイトWoWotuanに参加し、その後24qua...

エッジコンピューティングの台頭:データストレージをどう変えるか

エッジ コンピューティングは、データ転送コストと損失を削減することで、企業が効率的で信頼性の高いスト...

プロメテウスはわずか4.55ポンド:4Gメモリ/4コア/50Gハードディスク/2Tトラフィック

iperweb は、prometeus (イタリアで登録) の 2 番目のブランド (英国で登録) ...

非営利ウェブサイトの価値を見積もる際の核心は何ですか?

最近、私の友人が非営利のウェブサイトを売りたいと考えており、交渉中の買い手がいたものの、価格に合意で...

工業情報化省:我が国の情報通信産業は全体的に順調に運営されている。

工業情報化部の最新データによると、今年1月から8月まで、わが国の電気通信事業の売上高は合計1兆1,4...

まず、ウェブサイトのPR価値の重要性についてお話ししましょう

多くのウェブサイト運営者は、自分のウェブサイトの Google PageRank 値を非常に気にして...

信頼性の高いホスティングサービス: $30/i7-860/16g メモリ/2x500g+2x1T/5T トラフィック

reliablehostingservices.net は 2008 年から運営されている企業で、低...

Aoyou Hosting: 春に全11室のVPSルームが25%オフ、老舗ブランド、ウェブサイト構築などにおすすめ(IP変更は10元のみ)

今年はAoyou Hostingの10周年の節目です。同社はオーストラリアのShy Brotherに...