MCP HubMCP Hub
스킬 목록으로 돌아가기

configure-api-gateway

pjt222
업데이트됨 2 days ago
7 조회
17
2
17
GitHub에서 보기
개발api

정보

이 스킬은 API 게이트웨이(Kong 또는 Traefik)를 배포 및 설정하여 서비스의 트래픽 관리, 인증, 속도 제한, 라우팅을 처리합니다. 플러그인 설정, 업스트림 서비스, 기존 인프라와의 통합을 담당합니다. 여러 백엔드를 위한 통합 진입점, 중앙화된 보안 정책, API 버전 관리 및 분석이 필요할 때 사용하세요.

빠른 설치

Claude Code

추천
기본
npx skills add pjt222/agent-almanac -a claude-code
플러그인 명령대체
/plugin add https://github.com/pjt222/agent-almanac
Git 클론대체
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/configure-api-gateway

Claude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요

문서


name: configure-api-gateway description: > APIゲートウェイ(KongまたはTraefik)をデプロイして設定し、APIトラフィック管理、 認証、レート制限、リクエスト/レスポンス変換、ルーティングを処理します。プラグイン設定、 上流サービス、コンシューマー管理、既存インフラとの統合をカバーします。複数のバックエンド サービスに統一されたAPIエンドポイントが必要な場合、集中認証またはレート制限が必要な場合、 APIバージョニングを実装する場合、またはマイクロサービスの詳細な分析とロードバランシングが 必要な場合に使用します。 locale: ja source_locale: en source_commit: 6f65f316 translator: claude-opus-4-6 translation_date: "2026-03-16" license: MIT allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: devops complexity: intermediate language: multi tags: api-gateway, kong, traefik, rate-limiting, authentication, routing, middleware

APIゲートウェイの設定

集中型APIトラフィック管理とポリシー強制のためのAPIゲートウェイをデプロイして設定します。

使用タイミング

  • 複数のバックエンドサービスに一貫したポリシーを持つ統一APIエンドポイントが必要
  • APIアクセスへの集中型認証/認可が必要
  • API全体でレート制限とクォータ管理が必要
  • バックエンドサービスを変更せずにリクエスト/レスポンスを変換したい
  • APIバージョニングと廃止予定の戦略を実装
  • 詳細なAPI分析とモニタリングが必要
  • マイクロサービスのサービスディスカバリとロードバランシングが必要

入力

  • 必須: KubernetesクラスターまたはDocker環境
  • 必須: APIゲートウェイの選択(KongまたはTraefik)
  • 必須: プロキシするバックエンドサービスエンドポイント
  • 任意: 認証プロバイダー(OAuth2、OIDC、APIキー)
  • 任意: レート制限要件(分/時間あたりのリクエスト数)
  • 任意: カスタムミドルウェアまたはプラグイン設定
  • 任意: HTTPSエンドポイント用のTLS証明書

手順

完全な設定ファイルとテンプレートについては拡張例を参照してください。

ステップ1: APIゲートウェイのインストール

データベース付き(Kong)またはファイルベース設定(Traefik)でAPIゲートウェイをデプロイします。

KongとPostgreSQLの場合:

# kong-deployment.yaml(抜粋 - 完全なファイルはEXAMPLES.mdを参照)
apiVersion: v1
kind: Namespace
metadata:
  name: kong
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kong
  namespace: kong
spec:
  replicas: 2
  # ... (PostgreSQL、マイグレーション、サービス - EXAMPLES.mdを参照)

Traefikの場合:

# traefik-deployment.yaml(抜粋 - 完全なファイルはEXAMPLES.mdを参照)
apiVersion: v1
kind: Namespace
metadata:
  name: traefik
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: traefik
  namespace: traefik
spec:
  replicas: 2
  # ... (RBAC、ConfigMap、サービス - EXAMPLES.mdを参照)

完全なデプロイマニフェストはEXAMPLES.mdを参照

デプロイ:

kubectl apply -f kong-deployment.yaml  # または traefik-deployment.yaml
kubectl wait --for=condition=ready pod -l app=kong -n kong --timeout=300s
kubectl get svc -n kong kong-proxy  # ロードバランサーIPを取得

期待結果: ゲートウェイのPodが2レプリカで稼働中。LoadBalancerサービスに外部IPが割り当て済み。管理APIにアクセス可能(Kong:ポート8001、Traefik:ダッシュボードポート8080)。ヘルスチェックが合格。

失敗時:

  • Podのログを確認:kubectl logs -n kong -l app=kong
  • データベース接続を確認(Kong):kubectl logs -n kong kong-migrations-<hash>
  • サービスアカウントのパーミッションを確認(Traefik):kubectl get clusterrolebinding traefik -o yaml
  • ポートがすでに使用中でないか確認:kubectl get svc --all-namespaces | grep 8000

ステップ2: バックエンドサービスとルートの設定

上流サービスを定義してAPIを公開するルートを作成します。

Kongの場合(宣言的設定にdeCKを使用):

# 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/

# サービス、ルート、アップストリームのkong.yamlを作成
# (完全な設定はEXAMPLES.mdを参照)
deck sync --kong-addr http://localhost:8001 -s kong.yaml
curl -i http://localhost:8001/routes  # ルートを確認

Traefikの場合(IngressRoute CRDを使用):

# traefik-routes.yaml(抜粋)
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: user-api-route
spec:
  entryPoints: [websecure]
  routes:
  - match: Host(`api.example.com`) && PathPrefix(`/api/users`)
    # ... (完全な設定はEXAMPLES.mdを参照)

ルートを適用:

kubectl apply -f traefik-routes.yaml
curl -H "Host: api.example.com" https://GATEWAY_IP/api/users

完全なルーティング設定はEXAMPLES.mdを参照

期待結果: ルートがトラフィックをバックエンドサービスに正しくプロキシ。重み付きルーティングが設定に従ってトラフィックを分散。ヘルスチェックがバックエンドサービスの健全性を監視。

失敗時:

  • バックエンドサービスが稼働中か確認:kubectl get svc -n default
  • DNS解決を確認:kubectl run test --rm -it --image=busybox -- nslookup user-service.default.svc.cluster.local
  • ゲートウェイのログを確認:kubectl logs -n kong -l app=kong --tail=50
  • 設定を検証:deck validate -s kong.yaml

ステップ3: 認証と認可の実装

APIセキュリティのための認証プラグイン/ミドルウェアを設定します。

Kongの場合(APIキーとJWT認証):

# kong-auth-config.yaml(抜粋)
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
  # ... (完全な設定はEXAMPLES.mdを参照)
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(抜粋)
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
  name: basic-auth-middleware
spec:
  basicAuth:
    secret: basic-auth
    removeHeader: true
# ... (OAuth2、レート制限はEXAMPLES.mdを参照)
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/consumers
  • プラグインが有効か確認:curl http://localhost:8001/plugins | jq .
  • verbose付きでテスト:curl -vでレスポンスヘッダーを確認
  • JWTを検証:jwt.ioでトークンをデコード

ステップ4: リクエスト/レスポンス変換の設定

リクエストとレスポンスを変換するミドルウェアを追加します。

Kongの場合:

# kong-transformations.yaml(抜粋)
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
  # ... (完全な設定はEXAMPLES.mdを参照)
deck sync --kong-addr http://localhost:8001 -s kong-transformations.yaml

Traefikの場合:

# traefik-transformations.yaml(抜粋)
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
  name: add-headers
spec:
  headers:
    customRequestHeaders:
      X-Gateway-Version: "1.0"
    # ... (サーキットブレーカー、リトライ、チェーンはEXAMPLES.mdを参照)
kubectl apply -f traefik-transformations.yaml
curl -v https://GATEWAY_IP/api/users | grep X-Gateway

完全な変換設定はEXAMPLES.mdを参照

期待結果: リクエストヘッダーが設定通りに追加/削除される。レスポンスヘッダーにゲートウェイメタデータが含まれる。大きなリクエストが413で拒否される。サーキットブレーカーが繰り返しの失敗でトリップ。一時的なエラーにリトライが発生。

失敗時:

  • チェーン内のミドルウェアの順序を確認
  • バックエンドサービスとのヘッダー競合を確認
  • チェーン化する前に変換を個別にテスト
  • 変換エラーのログを確認

ステップ5: モニタリングと分析の有効化

API可視性のためのメトリクス、ログ、ダッシュボードを設定します。

Kongのモニタリングセットアップ:

# kong-monitoring.yaml(抜粋)
plugins:
- name: prometheus
  config:
    per_consumer: true
- name: http-log
  service: user-api
  # ... (Datadog、file-log設定はEXAMPLES.mdを参照)
deck sync --kong-addr http://localhost:8001 -s kong-monitoring.yaml

# ServiceMonitorのデプロイ(EXAMPLES.mdを参照)
kubectl apply -f kong-servicemonitor.yaml
curl http://localhost:8100/metrics

Traefikのモニタリング(組み込み):

# ServiceMonitor(抜粋 - GrafanaダッシュボードはEXAMPLES.mdを参照)
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
# http://localhost:8080/dashboard/ を開く

完全なモニタリング設定はEXAMPLES.mdを参照

期待結果: Prometheusがゲートウェイメトリクスをスクレーピング成功。ダッシュボードがリクエスト率、レイテンシパーセンタイル、エラー率を表示。ログが集約システムに転送。メトリクスがサービス、ルート、コンシューマー別に分割。

失敗時:

  • ServiceMonitorを確認:kubectl get servicemonitor -A
  • UIでPrometheusターゲットを確認
  • メトリクスポートがアクセス可能か確認:kubectl port-forward -n kong svc/kong-metrics 8100:8100
  • ログエンドポイントの到達可能性を検証

ステップ6: APIバージョニングと廃止予定の実装

バージョン管理と優雅なAPI廃止予定を設定します。

Kongのバージョニング戦略:

# kong-versioning.yaml(抜粋)
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"
# ... (v2、デフォルトルーティング、レート制限はEXAMPLES.mdを参照)

Traefikのバージョニング:

# traefik-versioning.yaml(抜粋)
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
  name: v1-deprecation-headers
spec:
  headers:
    customResponseHeaders:
      X-Deprecation-Notice: "API v1 deprecated on 2024-12-31"
# ... (完全なIngressRoutesはEXAMPLES.mdを参照)

バージョニングをテスト:

curl -i https://api.example.com/api/v1/users  # 廃止予定
curl -i https://api.example.com/api/v2/users  # 現行
curl -i https://api.example.com/api/users     # v2にルーティング

完全なバージョニング設定はEXAMPLES.mdを参照

期待結果: 異なるバージョンが適切なバックエンドサービスにルーティング。v1レスポンスに廃止予定ヘッダーが存在。廃止予定バージョンはレート制限が厳しい。デフォルトパスが最新バージョンにルーティング。メトリクスがAPIバージョン別に分割。

失敗時:

  • パス優先度/プライオリティ設定を確認(優先度が高い = 最初に評価される)
  • 重複するパスパターンを確認
  • 各バージョンのルートを独立してテスト
  • ルーティングのログでパスマッチングを確認
  • 各バージョンのバックエンドサービスが稼働中か確認

バリデーション

  • APIゲートウェイのPodがHA用の複数レプリカで稼働中
  • LoadBalancerサービスに外部IPが割り当て済み
  • ルートがトラフィックをバックエンドサービスに正しくプロキシ
  • 認証/認可がアクセス制御を強制(401/403レスポンス)
  • レート制限がクォータ超過後に429を返す
  • リクエスト/レスポンス変換がヘッダーを正しく追加/削除
  • サーキットブレーカーがバックエンドの繰り返し失敗でトリップ
  • メトリクスが公開されPrometheusにスクレーピングされている
  • ダッシュボードがリクエスト率、レイテンシ、エラーを表示
  • APIバージョニングがリクエストを正しいバックエンドバージョンにルーティング
  • 古い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 - ゲートウェイ認可を補完するポリシー強制

GitHub 저장소

pjt222/agent-almanac
경로: i18n/ja/skills/configure-api-gateway
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

연관 스킬

qmd

개발

qmd는 BM25, 벡터 임베딩, 재순위화를 결합한 하이브리드 검색을 통해 로컬 파일을 색인화하고 검색할 수 있는 로컬 검색 및 색인화 CLI 도구입니다. 명령줄 사용과 Claude 통합을 위한 MCP(Model Context Protocol) 모드를 모두 지원합니다. 이 도구는 임베딩에 Ollama를 사용하고 색인을 로컬에 저장하여 터미널에서 직접 문서나 코드베이스를 검색하는 데 이상적입니다.

스킬 보기

subagent-driven-development

개발

이 스킬은 각 독립적인 작업마다 새로운 하위 에이전트를 배치하고 작업 사이에 코드 리뷰를 진행하여 구현 계획을 실행합니다. 이 리뷰 프로세스를 통해 품질 게이트를 유지하면서 빠른 반복 작업을 가능하게 합니다. 동일한 세션 내에서 대부분 독립적인 작업을 진행할 때 내장된 품질 검증과 함께 지속적인 진행을 보장하기 위해 사용하세요.

스킬 보기

mcporter

개발

mcporter 스킬은 개발자가 Claude에서 직접 Model Context Protocol(MCP) 서버를 관리하고 호출할 수 있도록 합니다. 이 스킬은 사용 가능한 서버를 나열하고, 인수를 사용해 해당 서버의 도구를 호출하며, 인증 및 데몬 생명주기를 처리하는 명령어를 제공합니다. 개발 워크플로우에서 MCP 서버 기능을 통합하고 테스트할 때 이 스킬을 사용하세요.

스킬 보기

adk-deployment-specialist

개발

이 스킬은 A2A 프로토콜을 사용하여 Vertex AI ADK 에이전트를 배포하고 오케스트레이션하며, AgentCard 검색, 작업 제출, 코드 실행 샌드박스 및 메모리 뱅크와 같은 지원 도구를 관리합니다. Python, Java 또는 Go 언어로 순차, 병렬 또는 루프 오케스트레이션 패턴을 갖춘 다중 에이전트 시스템 구축을 가능하게 합니다. Google Cloud에서 ADK 에이전트 배포 또는 에이전트 워크플로우 오케스트레이션을 요청받았을 때 사용하세요.

스킬 보기