編集者– この投稿は10 部構成のシリーズの一部です。
また、ブログの完全セットを無料の電子書籍「 Taking Kubernetes from Test to Production」としてダウンロードすることもできます。
組織が初めて Kubernetes の実験を開始するときは、 Ingress コントローラーの選択についてあまり考慮しないことがよくあります。 すべての Ingress コントローラーは同じであると考えるかもしれません。すぐに起動して実行するために、選択した Kubernetes フレームワークのデフォルトの Ingress コントローラーを使用するのが最も簡単です。 そして、テスト環境や小規模な本番環境では、ほぼすべての Ingress コントローラが問題なく使用できるのは事実です。 しかし、規模が大きくなるにつれて、Ingress コントローラーの選択がより重要になります。 これは、Ingress コントローラが、トラフィックをポイント A からポイント B に移動する基本的な機能よりもはるかに多くの機能を提供できるためです。
高度なトラフィック管理から可視性、組み込みセキュリティまで、Ingress コントローラーは Kubernetes スタックで最も強力なツールの 1 つになります。 実際、F5 NGINX では、これをあらゆる本番環境レベルの Kubernetes展開の基盤であると考えています。 しかし、多くの開発者やプラットフォーム運用チームは、Ingress コントローラーの真価を理解しておらず、拡張できないコントローラーを選択した場合の結果も理解していません。 適切に拡張できない、または複雑な環境を保護しない Ingress コントローラーを選択すると、Kubernetes をテストから本番環境に移行できなくなる可能性があります。 このブログ シリーズでは、Ingress コントローラーの基礎と、現在および将来に必要な機能とセキュリティを実現する賢明な選択を行う方法について学習することを目的としています。
Ingress コントローラは、Kubernetes クラスターに入るレイヤー 4 および 7 のトラフィック、および場合によってはクラスターから出るトラフィックを管理する特殊なロード バランサです。 全員が同じ認識を持つように、NGINX で使用する用語を以下に示します (業界全体でほぼ同じです)。
デフォルトでは、Kubernetes ポッド (コンテナ) で実行されているアプリケーションは外部ネットワークからはアクセスできず、Kubernetes クラスター内の他のポッドからのみアクセスできます。 Kubernetes には、 Ingressと呼ばれる HTTP ロード バランシング用の組み込み構成オブジェクトがあり、Kubernetes クラスターの外部のエンティティが 1 つ以上の Kubernetes サービスによって表されるポッドに接続する方法を定義します。
Kubernetes サービスへの外部アクセスを提供する必要がある場合は、 Ingress リソースを作成して、URI パス、バッキング サービス名、その他の情報を含む接続ルールを定義します。 ただし、Ingress リソースだけでは何も実行されません。 Ingress リソースで定義されたルールを実装するには、Ingress コントローラー アプリケーション (Kubernetes API を使用) をデプロイして構成する必要があります。
kube-proxy
トラフィック分散モデルを置き換え、Kubernetes 以外の環境でアプリケーション配信コントローラー (ADC) やリバース プロキシが提供するような追加の制御を提供します。Ingress コントローラーを選択するときは、機能リストから始めたくなるかもしれませんが、素晴らしい機能を備えていてもビジネス ニーズを満たさない Ingress コントローラーを選択してしまう可能性があります。 代わりに、Ingress コントローラーがチームとアプリでどれだけうまく機能するかに影響する 2 つの要素、つまりユースケース (どのような問題を解決するか) とリソース (どのように「支払う」か) を必ず検討してください。 このブログの残りの部分では、これら 2 つのトピックについて説明します。
Ingress コントローラの中心的なユースケースはトラフィック管理であるため、Ingress コントローラで次の一般的なユースケースの 1 つ以上を処理することが必要な場合があります。
しかし、「一芸に秀でた」ものに満足する必要はありません。ほとんどの Ingress コントローラーは、トラフィックの管理以上の機能を備えています。 Ingress コントローラーを使用して複数の問題を解決することで、スタックのサイズと複雑さが軽減されるだけでなく、非機能要件をアプリから Ingress コントローラーにオフロードすることもできます。 リソースをより効率的に使用しながら、Kubernetes デプロイメントのセキュリティ、俊敏性、スケーラビリティを高めるのに役立つ、従来とは異なる Ingress コントローラーのユースケースを 4 つ見てみましょう。
Kubernetes クラスターの可視性の欠如は、本番環境における最大の課題の 1 つであり、トラブルシューティングと回復力の困難につながります。 Ingress コントローラーは Kubernetes クラスターのエッジで動作し、あらゆるトラフィックに関係するため、Kubernetes クラスターまたはプラットフォームでのアプリの速度低下とリソース枯渇という 2 つの一般的な問題のトラブルシューティング (さらには回避) に役立つデータを提供するのに適しています。 Ingress コントローラの可視性を向上させるには、次のことが必要です。
Kubernetes でリクエストとレスポンスの操作を実行する予定がない限り、Ingress コントローラーが API ゲートウェイとしても機能する可能性が非常に高くなります。 Ingress コントローラは、その機能セットに応じて、TLS 終了、クライアント認証、レート制限、きめ細かいアクセス制御、レイヤー 4 から 7 でのリクエスト ルーティングなどのコア API ゲートウェイ機能を提供できる場合があります。
ログイン資格情報の認証を Kubernetes サービスから Ingress コントローラーにオフロードすると、2 つの問題を解決できます。
Ingress コントローラが Web アプリケーション ファイアウォール (WAF) として機能できるわけではなく、WAF を Ingress コントローラと統合できるということです。 WAF は Kubernetes の内外のさまざまな場所にデプロイできますが、ほとんどの組織にとって最も効率的で効果的な場所は Ingress コントローラーと同じポッド内です。 このユースケースは、セキュリティ ポリシーが SecOps または DevSecOps の指示下にあり、きめ細かいサービスごとまたは URI ごとのアプローチが必要な場合に最適です。 つまり、Kubernetes API を使用してポリシーを定義し、それをサービスに関連付けることができます。 さらに、Ingress コントローラのロールベースのアクセス制御 (RBAC) 機能により、SecOps はリスナーごとにポリシーを適用し、DevOps ユーザーは Ingress リソースごとにポリシーを設定できます。
すべての Ingress コントローラーにはコストがかかります...無料かつオープン ソースのものであってもです (「子犬のように自由」というフレーズを聞いたことがあるかもしれません)。 一部のコストは予算の明細項目として予測可能な金額を割り当てることができますが、その他のコストは、選択した Ingress コントローラーの結果 (複雑さの増大、移植性の欠如など) に対処するためにチームが費やす必要がある時間によって異なります。 Ingress コントローラーの予算を立てる際に考慮すべきコスト(時間とお金の両方)について見てみましょう。時間とお金です。
人員の予算編成は、特に馴染みのない分野でプロジェクトにリソースを割り当てようとする場合、固定費項目の予算編成よりもはるかに困難になる可能性があります。 次のような質問をする必要があります。
業界では、ツールと所有権を NetOps チームの管轄下に統合する傾向が見られます。 これはスタックの簡素化とセキュリティの向上に大いに役立ちますが、私たちはチームの目標に基づいてツールを慎重に複製することを推奨します。 NetOps チームはより広範なプラットフォームに重点を置いているため、境界ツール (外部ロード バランサーなど) を管理させるのは理にかなっています。しかし、DevOps チームは、アプリ コードの近くに展開されたサービスに最も重点を置き、NetOps ツールから得られるよりも俊敏性ときめ細かい制御を必要としています。 Ingress コントローラーを含む Kubernetes ツールは、DevOps によって選択された場合に成功する可能性が最も高くなります。 ただし、開発者にツールの選択の完全な自由を与えなければならないというわけではありません。 Kubernetes内でのツールの厳格な標準化は、依然としてベスト プラクティスです。
組織が初めて Kubernetes を試す場合、ツールやサポートにあまり予算を割り当てないことがよくあります。 もっと「手助け」が必要な Ingress コントローラーを本当にサポートできる人的リソースがある場合は、最初は金銭的な予算は不要です。 しかし、Kubernetes への投資が増えるにつれて、ツールの機能によって制限されることに気付いたり、チームを他の優先事項に専念させたいと考えるようになるかもしれません。 そうなると、エンタープライズ機能とサポートを備えた、より使いやすく安定したツールにお金を払う傾向が強まります。
Ingress コントローラーの料金を支払う準備ができたら、ライセンス モデルが重要であることに注意してください。 Kubernetes 外部の従来の価格モデルに基づくと、Ingress コントローラーの価格設定は多くの場合「インスタンスごと」または「Ingress プロキシごと」になります。 Kubernetes ではこれがまだ意味をなすユースケースもありますが、Ingress コントローラーのライセンスを「クラスターごと」に付与すると、「プロキシの数」ではなくアプリケーションのテナントに基づいて支払うことになります。
さまざまなシナリオに対する推奨事項は次のとおりです。
要件を把握できたので、次のステップは、Ingress コントローラーがもたらす可能性のあるリスクに対する許容度をチームとして決定し、Kubernetes デプロイメントの拡大に合わせて Ingress コントローラーをどのように拡張する必要があるかを把握することです。 パート2ではそれらのトピックを取り上げます。
「このブログ投稿には、入手できなくなった製品やサポートされなくなった製品が参照されている場合があります。 利用可能な F5 NGINX 製品およびソリューションに関する最新情報については、 NGINX 製品ファミリーをご覧ください。 NGINX は現在 F5 の一部です。 以前の NGINX.com リンクはすべて、F5.com の同様の NGINX コンテンツにリダイレクトされます。"