今日のクラスタートラフィック制御の核となる3つの方法をブログ形式でまとめました。オープンソースのTraefikを活用することで、Kubernetesネイティブ機能であるIngressとGateway、そしてTraefikのCRDであるIngressRoute機能のすべてを利用できます。ここでは、これらの機能のためのYAMLファイルをどのように作成できるか詳しく見ていきましょう。

1. 🏛️ クラシックの力:KubernetesネイティブIngress
Kubernetesの初期からトラフィックのゲートウェイとして機能してきたIngressは、最も馴染み深く、実績のある方法です。L7ロードバランシングのための標準仕様です。
- 動作原理:Ingressリソースはルールを定義し、実際の処理はNginxやTraefikのようなコントローラーが担当します。
- 利点:設定が非常にシンプルで、ほとんどすべてのクラウド環境で標準として機能します。
- 限界:複雑なルーティング(カナリア、ミラーリングなど)を実装するには、各ベンダー固有の断片化されたAnnotationsに依存する必要があり、これが設定の可読性を低下させる主な原因となります。
📝 Ingressマニフェスト例
YAML
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: native-ingress
annotations:
kubernetes.io/ingress.class: traefik
spec:
rules:
- host: app.juhun.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app-service
port:
number: 80
2. 🚀 次世代標準:KubernetesネイティブGateway API
Ingressの限界を克服するために登場したGateway APIは、役割ベース(Role-oriented)設計が核となります。大規模なインフラを設計するエンジニアにとって、この標準化された構造は大きな恩恵です。
- 役割分離:インフラ管理者(GatewayClass, Gateway)とサービス開発者(HTTPRoute)の権限を明確に分離できます。
- 標準化された高度な機能:Annotationsなしで、トラフィックの重み付け分散、ヘッダー操作などを標準スペックでサポートします。
- 柔軟性:L4(TCP/UDP)からL7までを網羅する統合制御が可能で、拡張性が非常に優れています。
📝 Gateway API (HTTPRoute) 例
YAML
apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
name: app-gateway-route
spec:
parentRefs:
- name: my-gateway
rules:
- matches:
- path: { type: PathPrefix, value: /api }
backendRefs:
- name: api-service-v1
port: 80
weight: 90
- name: api-service-v2 # カナリアデプロイ
port: 80
weight: 10
3. 🎨 最適化の真髄:Traefik CRD (IngressRoute)
標準も良いですが、特定のソリューションの性能を100%引き出したい場合、私たちは
CRD(Custom Resource Definition)
を選択します。TraefikのIngressRouteは、特に「直感性」と「強力な機能」を同時に提供します。
- ミドルウェアチェイニング:認証、レート制限、エラーページ処理などをミドルウェアオブジェクトとして作成し、自由に組み合わせることができます。
- Kubernetes Native:Kubernetesスタイルの構文をそのまま使用しながらも、標準Ingressよりもはるかにきめ細やかなトラフィック制御が可能です。
- セキュリティ最適化:TLS設定や認証処理が非常に直感的で、専門分野であるセキュリティインフラの構築に最適です。
📝 Traefik IngressRoute 例
YAML
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: traefik-crd-route
spec:
entryPoints:
- websecure
routes:
- match: Host(`juhun-lab.com`) && PathPrefix(`/admin`)
kind: Rule
services:
- name: admin-service
port: 80
middlewares:
- name: ip-whitelist # セキュリティミドルウェア適用
🧐 最終比較ガイド
| 区分 | Ingress | Gateway API | Traefik CRD |
| — | — | — | — |
| 推奨対象 | シンプルなウェブサービスデプロイ | マルチテナンシーベースの大規模クラスター | Traefikの機能をフル活用したい場合 |
| 複雑度 | 低(簡単な開始) | 高(徹底した役割分担) | 中(直感的なCRD構造) |
| 柔軟性 | 限定的(Annotationsに依存) | 非常に高(標準規格) | 高(ミドルウェア活用) |
—
💡 終わりに
すでにお気づきかもしれませんが、技術の選択は「何がより良いか」ではなく、「どのような環境により適しているか」の問題です。11月に生まれた末っ子と過ごす大切な時間と同じくらい、私たちのクラスターもこれら3つのツールを通じて、より堅牢で平穏に管理されることを願っています。
コメントを残す