0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Kubernetes運用前に勉強していること基礎編03-06

Last updated at Posted at 2025-07-06

Kubernetes運用前に勉強していること基礎編03-06

注意
本記事の内容は個人的な勉強・備忘録を目的としており、勤務先や関係者とは一切関係ありません。


はじめに

Kubernetesの本番環境での運用を始めるにあたり、個人で勉強している内容を整理した記事です。構築や運用に必要な知識、注意点、実践して学んだことを随時更新していきます。基礎編の想定読者はコンテナの知識があり、Kubernetesでコンテナ運用したいがどうすればいいかを迷っている人です。今回は前回の引き続きで、Kubernetesのリソースカテゴリを学ぶことを目的としています。

勉強中の主な内容

  • 基礎編
    • クラウドネイティブとは
    • Kubernetesのアーキテクチャ概要
    • Kubernetesのリソース(今回の話)

Ingress(イングレス)

Ingress_Controller_internal_01.png

Ingressは、クラスタ外からHTTP/HTTPSなどのリクエストをクラスタ内のサービスにルーティングするためのリソースである。簡単に言えば、IngressはL7(アプリケーション層)のリバースプロキシ/ロードバランサ設定を表現するオブジェクトである。Ingressリソースではホスト名やパスに基づく転送ルールを定義できる。
たとえば「example.com/apiへのリクエストはapi-serviceへ、example.com/webはweb-serviceへ転送」といったことができる。 Ingress自体はあくまでルーティングルールの集合であり、それ単体では外部からのトラフィックを終端させる機能である。このため、Ingress自体はPod やノード上でパケットを処理する機能はない。
Ingressルールを有効にするには、クラスター上に図のようなIngress Controller(イングレスコントローラ)と呼ばれる専用のポッドをデプロイする必要がある。

Ingress Controller

Ingress Controller は通常 Deployment として動く Pod 群であり、

  1. API‑Server を watch して Ingress リソースの追加・更新・削除イベントを受け取る。
  2. 受け取ったルールをもとに データプレーン(ALB, Envoy, NGINX など)を動的再設定
  3. 健全性チェックや証明書更新などを行う

Kubernetesのマニフェストで定義した理想状態に実態を合わせるネットワーク経路実装する。Ingress がルート表で、Controller がルータを自動配線するエンジニアに相当するイメージである。

Ingressの種類

分類 代表例 データプレーン 外部 LBの有無 主なユースケース
クラウド LB 制御型 AWS Load Balancer Controller ALB/NLB(マネージド) あり パブリック公開
組込プロキシ型 NGINX Ingress Controller Pod 上のNGINX なし クラスタ内マルチテナント、 L7 カスタマイズ

 AWS Load Balancer Controller

アーキテクチャ概要

  • Controller は Ingress を監視し、ingressClassName: albを検知すると AWS ALBを自動生成
  • 生成された ALB は Target Group に Pod IP を直接登録(target-type: ip)し、Pod スケール/再配置は Controllerが同期
  • ALB は L7 で TLS 終端ポリシ適用・Header Rewrite などを実行し、その後 VPC 内 ENI 経由で Pod へフォワードする

特徴と利点

  • 運用負荷:
    • ALB 側で証明書、Autoscaling、AZ Fault tolerance が完結。
    • Controller Pod は control‑plane のみでスケール不要
  • 性能:
    • Hyper‑scale 帯域(数十 Gbps)、HTTP/2, gRPC, TLS 1.3 をフルサポート
  • コスト/経路:
    • インターネット公開の場合でも ALB → VPC ENI → Pod の 2 ホップで済み NAT不要

注意点

ルール数・リスナ数が多い場合は別 Ingress へ分割する。

NGINX Ingress Controller

アーキテクチャ概要

  • Controller Pod 内で NGINX が動作し、Ingress 変更を検知すると nginx.conf を再生成
  • デフォルトでは Controller Pod に対し Service type:ClusterIP が作成され、トラフィックは クラスタ内で完結
  • 外部に公開する場合は ClusterIP をフロントに NodePort や Service type:LoadBalancerを追加で置く二段構え

特徴と利点

  • 柔軟な L7 機能:
    • rewrite、WebAuthn,Lua など NGINX 拡張を自由に組込める
  • サイドカー的配置:
    • Private Subnet 内だけでAPIやgRPCサービスを相互接続する
  • マルチプロトコル:
    • TCP/UDP 振り分けや PROXY Protocol も ConfigMap で設定でき、LBに依存しない

注意点

  • パケットは全て Controller Pod を経由 するため、スループットは Pod 数・ノード帯域に依存し、100k rps 超級では Scale‑Out 設計必須

「クラスタ外 LB 型」 と 「内部プロキシ型」の違い

観点 ALB Ingress NGINX Ingress
データプレーン AWS マネージド(ALB/NLB) Pod 内 NGINX
スケール ELB の Auto‑Scaling Pod Replicas
L7 機能 WAFv2, HeaderRewrite, HTTP/2, gRPC rewrite, Lua, TCP/UDP
ネットワーク経路 インターネット→ALB→Pod (追加 LB)→NodePort→NGINX→Pod

Ingressのまとめ

  • Ingress リソース は ルールの宣言、Ingress Controller は ルールを実働システムに反映 する制御プレーン
  • Controller 実装は クラウド LB 制御型 と 組込プロキシ型 に2分され、データプレーンの場所・保守性・スケーラビリティが決定的に異なる

所感

公開されているHelmを使って、アプリケーションを運用するうえでIngressの設定がややこしく、よく失敗している。最初はLoadBalancerとIngressの違いなどが分からないため、NGINX Ingress Controller(組込プロキシ型)とAWS Load Balancer Controller(クラウド LB制御型)が混在して理解して、想定していない状態になっていた。このあたりのネットワーク関連のトラブルや設計を勉強することで、実運用のトラブルが起きても対応していけるようにしたい。

補足

過去の記事で記載していた内容を補足として追記しています。

Kubernetesのリソースカテゴリ

Kubernetesのリソースカテゴリは、『Kubernetes完全ガイド第二版』をベースとしている。

カテゴリ 概要
Workload APIs
アプリケーション(コンテナ)の実行を管理するためのリソース
Service APIs
Pod内のコンテナをネットワーク経由で公開し、アクセスを提供するリソース
Config APIs
コンテナで利用する設定や機密情報を管理するためのリソース
Storage APIs
コンテナで利用する永続化データを管理するためのリソース
Cluster APIs
クラスタ内のリソースの運用や管理、セキュリティを制御するリソース
Metadata APIs
クラスタ内の他リソースの操作や動的なメタデータ管理を行うリソース
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?