web-dev-qa-db-ja.com

nginxをロードバランサーとして公開することとIngressコントローラーとして公開することの違いは何ですか?

単一のロードバランサー/パブリックIPで複数のサービス/ルートを公開したい場合にIngressを使用できることを理解しました。

次に、Nginxサーバーを公開します。 2つの選択肢があります

  1. セットする service type as LoadBalancer出来上がりパブリックIPを取得しました
  2. Nginx Ingress Controller を使用します

これで、オプション1を使用して仕事を終わらせることができます。オプション2を選択するのはいつですか。なぜ、Ingressを使用せずにInginでnginxを使用することのメリットは何ですか。

11
Siva

ingress rule(ingress)ingress controllerには違いがあります。したがって、技術的には、nginxイングレスコントローラーとLoadBalancerタイプのサービスは比較できません。下記の入力リソースとLoadBalancerタイプのサービスを比較できます。

一般的に言えば:

LoadBalancerタイプのサービスは、L4(TCP)ロードバランサーです。これを使用して、単一のアプリまたはサービスを外部に公開します。宛先IPアドレスとポートに基づいて負荷を分散します。

Ingressタイプのリソースは、L7(HTTP/S)ロードバランサーを作成します。 L7 LBはアプリケーションに対応しているため、これを使用して複数のサービスを同時に公開し、アプリケーションの状態に応じてトラフィックの送信先を決定できます。

ingressおよびingress controllerrelation

Ingress、またはingress rulesは、ingress controllerが負荷を分散するために従うルールです。入力コントローラはパケットを取得し、入力ルールをチェックして、パケットを配信するサービスを決定します。

Nginx入力コントローラー

Nginxイングレスコントローラーは、実際にはクラスターへのエントリポイントとしてLoadBalancerタイプのサービスを使用します。次に、上りルールをチェックして負荷を分散します。これは非常に混乱する可能性があります。 Ingressリソースを作成すると、HTTP/Sロードバランサーが作成されます。また、外部IPアドレス(GKEなど)も提供しますが、そのIPアドレスにアクセスしようとすると、接続が拒否されます。

結論:

IPアドレスにマップする単一のアプリ、たとえばmyapp.comがある場合は、ロードバランサータイプサービスを使用します。

複数のアプリがある場合は、イングレスリソースを使用します。たとえば、myapp1.commyapp1.com/mypathmyapp2.com、..、myappn.comを1つのIPアドレスにマッピングします。

入力はL7であるため、myapp1.commyapp1.com/mypathを区別でき、トラフィックを適切なサービスにルーティングできます。

19
suren

受け入れられた答えはすでに多くのものをカバーしました。 AWSでIngress Controllerを使用している理由を除いて、すべての理由は有効ですが、コストを最小限に抑えるためです。 Kubernetesクラスターawsで実行されている複数のWebアプリケーションがあります。個々のアプリケーションをLoadBalancerとして公開して個々のELBを作成する(各ELBは費用がかかる)代わりにこれらのアプリケーションにアクセスするには、上りコントローラーサービスをLoadBalancerとして公開し、それぞれに上りルールを作成します。

手順は次のとおりです。

  • AWSでELBを作成したロードバランサーとして公開されているIngressサービスelb1.aws.com
  • 各ウェブアプリケーションの上りルール(例:example.com、awesome.com、helloworld.com)
  • Route53マッピングはすべて同じELBにマッピングされます。例:example.com-> elb1.aws.com awesome.com-> elb1.aws.com helloworld.com-> elb1.aws.com
3
Balkrishna