Comparison of Kubernetes Top Ingress Controllers

KubernetesのIngressコントローラーの比較

gavin.zhou
8 min readDec 20, 2019

今回は、KongやTraefikなどのIngressコントローラーについて説明しています。

IngressはKubernetesのデプロイメント全般において、必要なコンポーネントです。 こちらの記事でKubernetesの管理については詳しく説明しています。Ingressは外部のトラフィックとKubernetesのサービスを接続します。そして、アプリケーションがKubernetes上で、ユーザーにアクセスされるようにします。そのIngressアブストラクションもまたKubernetes上ではユニークなものとして扱われています。例えば、オブジェクトやサービスのような他のコンポーネントとは違って、Ingresコントローラーはクラスターがローンチされた時に自動的にスタートするわけではありません。

正しいIngressコントローラーを選ぶことは、とても重要です。Kubernetesクラスターへ来るトラフィックやロードを考えた場合にはしっかりと正しいものを選択すべきです。クラスター内でヘルプのアノテーションやクラスがあるたくさんのIngressコントローラーを使うという手もあります。通常の例では、2つのIngressコントローラーが利用できます。

  • 外部のトラフィックを扱うIngressコントローラー(一般向け ingress).
  • プライベート・トラフィックを管理するIngressコントローラー (VPC内のすべての内部トラフィック-同じネットワーク内のサービスとホストがKubernetesで実行されている内部サービスにアクセスできるようにする).

この二つはそれぞれスタートする際のアノテーションの使用によって選ばれています。ちょっと難しい部分としては、最初の場所で使うために適切なIngressコントローラーを選ぶという点です。色々なIngressコントローラーをこの記事で比較し、適切なIngressコントローラーを選べるようにできたらと思っています。

Kong

それでは、まずKongから始めたいと思います。Kongは当初独立したIngressコントローラーとして開発されたわけではありませんでした。しかし、Kongの開発者たちは、単独で働くIngressコントローラーになるように多くの機能を追加しました。またKongは、とてもデベロッパーに優しいコントローラーなのです。

KongはAPIゲートウェイが欲しい時に使うIngressコントローラーです。Kongのための多くのモジュールやアドオンもあり、基本的な機能に加え、より自分のニーズに合ったものへと拡張することができます。唯一の弱点は、KongがHTTPトラフィックのロードバランサーとして使用された時に最適化ができないということです。しかし、設定を調整するか、アドオンを使うことで最適化ができるようになります。

Traefik

Traefik はデベロッパーたちの中でものすごく人気の高いコントローラーです。これには、すごい理由があります。初めて使用する人たちにとっては、とても簡単に使用でき、Kubernetes環境への統合がすぐにできるからです。ダイナミックなバックエンドサービスを取得し、TCP, HTTP, HTTPS, GRPCへのフルサポートも受けられます。また、ロードバランシングのためのラウンドロビンや加重ラウンドロビンにも対応しています。

Traefikは自分のプログラムのたくさんのインスタンス(たくさんのロードバランシングケーパビリティを伴ったもの)を処理することができ、実際のプログラムに届くように機能するサービスコンフィグレーションを使います。

個人的にはHTTPトラフィックに対して、Traefikを使うのが好きです。何の処理も不要で Let’s Encryptに対応してくれます。そしてすべてのトラフィックがよりセキュアなHTTPを通して直接につながります。またHTTP/2との相性もものすごくよく、重いロードを簡単に最適化されます。Traefikを使っていて何らかの問題が生じた場合、このingressコントローラーに対応しているプレミアムサポートを受けることもできます。

HAProxy

次はHAProxyです。ロードバランシングについて言えば、一番ケーパブルなコントローラーです。HAProxyは市場にリリースされるたびにそれぞれのイテレーションを伴って改善されてきました。そのため、そのバランシングアルゴリズムが現在のようにケーパブルなのも当然なのです。なお一層良いことに完全にそれらのアルゴリズムをユーティライズするためにコンフィグをそこまで深く追求する必要はありません。

またHAProxyはとても安定しているということで定評があります。というのも、多くのKubernetesの本番環境ではHAProxyがingressコントローラーとして好んで使われているからです。少し調整すれば、HTTPトラフィックからTCPロード バランシングに至るまでのすべてのことをコントロールできるケーパブルなKubernetesクラスターを走らせることができます。HAProxyが持ち合わせている機能を完璧に設定するために、より高度なモニタリングに対するGrafana や Datadogを使用してください。

Istio Ingress Gateway

Istio Ingress Gateway、こちらも忘れてはいけないIngressコントローラーです。これは多くのデベロッパーから最高のKubernetes ingressコントローラーだと評価が高いものです。というのも、これは、設定などの作業がほとんどせずにすぐに使えるingressコントローラーだからです。Istioを既に使っているのであれば、Istio Ingressを使うのが論理的な選択でしょう。互換性も保証されていて、他のコントローラーにはない機能も付いています。

Istio Ingressにはいくつか弱点があります。それは、コントローラーがより多くの機能をもち、イングレスではなくケーパブルなゲートウェイにすることです。またIstio ingressをデプロイするためにIstioサービスメッシュを使わなければいけません。これは、Envoyがベースにんっていますが、全てのトラフィックタイプに対応しています。それに加え、Istioは十分なロードバランス機能を持ち合わせています。パススルーやランダムなロードバランシングなどの機能です。Jaeger やZipkin UIを使う場合にトレーシングもしてくれます。

Nginx

優れたingressコントローラーの一つにingress-nginxがあります。このingressは、自分のingressコントローラーにコンフィギュアすることを考えない場合には一番安全な選択肢でしょう。アルゴリズムをベースにしたロードバランシングもingress-nginxの優れた特徴の一つです。

しかし、有効なパワフルで詳細なVirtualhost Traffic Stats (VTS)や異なるヘッダーオプションなどのようなポッドの中で走っているNginx webサーバーを色々と調整することがConfigMapsを通してできます。またNginxコントローラーには2つの種類があって、コミュニティがそのうちの一つをサポートしてくれていて、もう一つの方は追加機能のあるNGNX Incがサポートしてくれています。

Nginxは、「デフォルトの」ingressコントローラーとして選ばれることがよくあります。しかし、更なる拡張機能のための開発環境においては、他のコントローラーを選択しとして考えてもいいと思います。ingressコントローラーの中でもトップに入るものはどれもとても便利ですが、他のものよりも特定の本番環境にのみ合うものがありあます。

Ambassador

Ambassador は最近市場に出てきたingressコントローラーで、今ものすごく人気のあるものです。ingressコントローラーとしても機能するだけじゃなく、AmbassadorはしっかりとしたAPIゲートウェイとしても機能するからです。Envoy Proxy上の、ダイナミックなオープンソースのKubernetesネイティブなマイクロサービス APIゲートウェイビルです。

Ambassadorは本質的にはEnvoy ingressコントローラーとしても動きますが、他にも多くの機能を持ち合わせています。

  • Istio と Consul の統合
  • アノテーションを通してのセルフサービスコンフィグレーション
  • WebSockets, gRPC, HTTP/2, TCPに対応

自分の気に入ったingressコントローラーが見つかると、作業がものすごく効率よくなります。3大トップコントローラーが互換性を備えているため、新しいコントローラーを実装するにしても、たくさんのコントローラーを追加するにしても簡単に実行が可能です。

Kubernetes上でのingrss コントローラーの管理についてはこちらに詳しく書いてあります。

Orangesys.ioでは、kuberneteの運用、DevOps、監視のお手伝いをさせていただいています。ぜひ私たちにおまかせください。

--

--

No responses yet