executing-plans
executing-plans
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available
configure-api-gatewayAPIゲートウェイ(KongまたはTraefik)をデプロイして設定し、APIトラフィック管理、 認証、レート制限、リクエスト/レスポンス変換、ルーティングを処理します。プラグイン設定、 上流サービス、コンシューマー管理、既存インフラとの統合をカバーします。複数のバックエンド サービスに統一されたAPIエンドポイントが必要な場合、集中認証またはレート制限が必要な場合、 APIバージョニングを実装する場合、またはマイクロサービスの詳細な分析とロードバランシングが 必要な場合に使用します。
Independent GitHub snapshot · Automated classification · Original documentation governs
集中型APIトラフィック管理とポリシー強制のためのAPIゲートウェイをデプロイして設定します。
完全な設定ファイルとテンプレートについては拡張例を参照してください。
データベース付き(Kong)またはファイルベース設定(Traefik)でAPIゲートウェイをデプロイします。
KongとPostgreSQLの場合:
# kong-deployment.yaml (excerpt - see EXAMPLES.md for complete file)
apiVersion: v1
kind: Namespace
metadata:
name: kong
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: kong
namespace: kong
spec:
replicas: 2
# ... (PostgreSQL, migrations, services - see EXAMPLES.md)
Traefikの場合:
# traefik-deployment.yaml (excerpt - see EXAMPLES.md for complete file)
apiVersion: v1
kind: Namespace
metadata:
name: traefik
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: traefik
namespace: traefik
spec:
replicas: 2
# ... (RBAC, ConfigMap, services - see EXAMPLES.md)
完全なデプロイマニフェストはEXAMPLES.mdを参照
デプロイ:
kubectl apply -f kong-deployment.yaml # OR traefik-deployment.yaml
kubectl wait --for=condition=ready pod -l app=kong -n kong --timeout=300s
kubectl get svc -n kong kong-proxy # Get load balancer IP
期待結果: ゲートウェイのPodが2レプリカで稼働中。LoadBalancerサービスに外部IPが割り当て済み。管理APIにアクセス可能(Kong:ポート8001、Traefik:ダッシュボードポート8080)。ヘルスチェックが合格。
失敗時:
kubectl logs -n kong -l app=kongkubectl logs -n kong kong-migrations-<hash>kubectl get clusterrolebinding traefik -o yamlkubectl get svc --all-namespaces | grep 8000上流サービスを定義してAPIを公開するルートを作成します。
Kongの場合(宣言的設定にdeCKを使用):
# Install decK CLI
curl -sL https://github.com/Kong/deck/releases/download/v1.28.0/deck_1.28.0_linux_amd64.tar.gz | tar -xz
sudo mv deck /usr/local/bin/
# Create kong.yaml with services, routes, upstreams
# (see EXAMPLES.md for complete configuration)
deck sync --kong-addr http://localhost:8001 -s kong.yaml
curl -i http://localhost:8001/routes # Verify routes
Traefikの場合(IngressRoute CRDを使用):
# traefik-routes.yaml (excerpt)
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: user-api-route
spec:
entryPoints: [websecure]
routes:
- match: Host(`api.example.com`) && PathPrefix(`/api/users`)
# ... (see EXAMPLES.md for full configuration)
ルートを適用:
kubectl apply -f traefik-routes.yaml
curl -H "Host: api.example.com" https://GATEWAY_IP/api/users
完全なルーティング設定はEXAMPLES.mdを参照
期待結果: ルートがトラフィックをバックエンドサービスに正しくプロキシ。重み付きルーティングが設定に従ってトラフィックを分散。ヘルスチェックがバックエンドサービスの健全性を監視。
失敗時:
kubectl get svc -n defaultkubectl run test --rm -it --image=busybox -- nslookup user-service.default.svc.cluster.localkubectl logs -n kong -l app=kong --tail=50deck validate -s kong.yamlAPIセキュリティのための認証プラグイン/ミドルウェアを設定します。
Kongの場合(APIキーとJWT認証):
# kong-auth-config.yaml (excerpt)
consumers:
- username: mobile-app
custom_id: app-001
keyauth_credentials:
- consumer: mobile-app
key: mobile-secret-key-123
plugins:
- name: key-auth
service: user-api
# ... (see EXAMPLES.md for full configuration)
deck sync --kong-addr http://localhost:8001 -s kong-auth-config.yaml
curl -i -H "apikey: mobile-secret-key-123" http://GATEWAY_IP/api/users
Traefikの場合(BasicAuthとForwardAuthミドルウェア):
# traefik-auth-middleware.yaml (excerpt)
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: basic-auth-middleware
spec:
basicAuth:
secret: basic-auth
removeHeader: true
# ... (see EXAMPLES.md for OAuth2, rate limiting)
kubectl apply -f traefik-auth-middleware.yaml
curl -u user1:password https://GATEWAY_IP/api/protected
完全な認証設定はEXAMPLES.mdを参照
期待結果: 未認証リクエストが401を返す。有効なクレデンシャルでアクセスが許可。レート制限が閾値を超えた後429を返す。JWTトークンが正しく検証される。ACLがグループのパーミッションを強制。
失敗時:
curl http://localhost:8001/consumerscurl http://localhost:8001/plugins | jq .curl -vでレスポンスヘッダーを確認リクエストとレスポンスを変換するミドルウェアを追加します。
Kongの場合:
# kong-transformations.yaml (excerpt)
plugins:
- name: request-transformer
service: user-api
config:
add:
headers: [X-Gateway-Version:1.0, X-Request-ID:$(uuid)]
remove:
headers: [X-Internal-Token]
- name: correlation-id
# ... (see EXAMPLES.md for full configuration)
deck sync --kong-addr http://localhost:8001 -s kong-transformations.yaml
Traefikの場合:
# traefik-transformations.yaml (excerpt)
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: add-headers
spec:
headers:
customRequestHeaders:
X-Gateway-Version: "1.0"
# ... (see EXAMPLES.md for circuit breaker, retry, chain)
kubectl apply -f traefik-transformations.yaml
curl -v https://GATEWAY_IP/api/users | grep X-Gateway
完全な変換設定はEXAMPLES.mdを参照
期待結果: リクエストヘッダーが設定通りに追加/削除される。レスポンスヘッダーにゲートウェイメタデータが含まれる。大きなリクエストが413で拒否される。サーキットブレーカーが繰り返しの失敗でトリップ。一時的なエラーにリトライが発生。
失敗時:
API可視性のためのメトリクス、ログ、ダッシュボードを設定します。
Kongのモニタリングセットアップ:
# kong-monitoring.yaml (excerpt)
plugins:
- name: prometheus
config:
per_consumer: true
- name: http-log
service: user-api
# ... (see EXAMPLES.md for Datadog, file-log configuration)
deck sync --kong-addr http://localhost:8001 -s kong-monitoring.yaml
# Deploy ServiceMonitor (see EXAMPLES.md)
kubectl apply -f kong-servicemonitor.yaml
curl http://localhost:8100/metrics
Traefikのモニタリング(組み込み):
# ServiceMonitor (excerpt - see EXAMPLES.md for Grafana dashboard)
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: traefik-metrics
spec:
endpoints:
- port: metrics
path: /metrics
interval: 30s
kubectl port-forward -n traefik svc/traefik-dashboard 8080:8080
# Open http://localhost:8080/dashboard/
完全なモニタリング設定はEXAMPLES.mdを参照
期待結果: Prometheusがゲートウェイメトリクスをスクレーピング成功。ダッシュボードがリクエスト率、レイテンシパーセンタイル、エラー率を表示。ログが集約システムに転送。メトリクスがサービス、ルート、コンシューマー別に分割。
失敗時:
kubectl get servicemonitor -Akubectl port-forward -n kong svc/kong-metrics 8100:8100バージョン管理と優雅なAPI廃止予定を設定します。
Kongのバージョニング戦略:
# kong-versioning.yaml (excerpt)
services:
- name: user-api-v1
url: http://user-service-v1.default.svc.cluster.local:8080
routes:
- name: user-v1-route
paths: [/api/v1/users]
plugins:
- name: response-transformer
config:
add:
headers:
- X-Deprecation-Notice:"API v1 deprecated on 2024-12-31"
- Sunset:"Wed, 31 Dec 2024 23:59:59 GMT"
# ... (see EXAMPLES.md for v2, default routing, rate limits)
Traefikのバージョニング:
# traefik-versioning.yaml (excerpt)
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: v1-deprecation-headers
spec:
headers:
customResponseHeaders:
X-Deprecation-Notice: "API v1 deprecated on 2024-12-31"
# ... (see EXAMPLES.md for complete IngressRoutes)
バージョニングをテスト:
curl -i https://api.example.com/api/v1/users # Deprecated
curl -i https://api.example.com/api/v2/users # Current
curl -i https://api.example.com/api/users # Routes to v2
完全なバージョニング設定はEXAMPLES.mdを参照
期待結果: 異なるバージョンが適切なバックエンドサービスにルーティング。v1レスポンスに廃止予定ヘッダーが存在。廃止予定バージョンはレート制限が厳しい。デフォルトパスが最新バージョンにルーティング。メトリクスがAPIバージョン別に分割。
失敗時:
データベース依存(Kong): データベースを持つKongはPostgreSQL/Cassandraが必要。DBレスモードは利用可能だが一部の機能が制限される(実行時の設定変更)。複数のゲートウェイインスタンスを持つ本番ではDBモードを使用する。
パスマッチングの順序: ルート/IngressRouteが特定の順序で評価される。より具体的なパスは優先度を高くすべき。重複するパスは予測不可能なルーティングを引き起こす。curl -vで実際にヒットしたルートを確認する。
認証バイパス: 全ルートに認証プラグインが適用されていることを確認する。認証なしにルートを追加しやすい。サービスレベルでデフォルトプラグインを使用し、必要に応じてルート単位でオーバーライドする。
レート制限のスコープ: レート制限のpolicy: localはゲートウェイのPod単位でカウントする。レプリカ間で一貫した制限には集中型ポリシー(Redis)またはスティッキーセッションを使用する。
CORS設定: APIゲートウェイがCORSを処理すべきで、個々のサービスではない。ブラウザのプリフライト失敗を避けるために早い段階でCORSプラグイン/ミドルウェアを追加する。
SSL/TLSターミネーション: ゲートウェイは通常SSLを終端する。証明書が有効で自動更新が設定されていることを確認する。Kubernetes証明書管理にcert-managerを使用する。
上流のヘルスチェック: バックエンドの失敗を素早く検出するためにアクティブなヘルスチェックを設定する。パッシブチェックはリアルトラフィックに依存し、問題の検出が遅い場合がある。
プラグイン/ミドルウェアの実行順序: 順序が重要。レート制限より先に認証(無効なリクエストでレート制限スロットを無駄にしない)。ログより先に変換(変換された値をログに記録する)。
リソース制限: ゲートウェイのPodは負荷がかかると大量のCPUを消費する可能性がある。適切なリソースリクエスト/制限を設定する。本番でのCPUスロットリングを監視する。
移行戦略: 全プラグインを一度に有効にしない。段階的にロールアウトする:ルーティング → 認証 → レート制限 → 変換 → 高度な機能。
configure-ingress-networking - APIゲートウェイを補完するIngressコントローラーのセットアップsetup-service-mesh - サービスメッシュが補完的な東西トラフィック管理を提供manage-kubernetes-secrets - ゲートウェイの証明書とクレデンシャル管理setup-prometheus-monitoring - ゲートウェイメトリクスのモニタリング統合enforce-policy-as-code - ゲートウェイ認可を補完するポリシー強制