Contents
Dockerイメージの取得とdocker-compose.ymlファイルの作成
ローカル環境でのKrakenD導入は、公式Dockerイメージを使用するだけで容易に開始できます。このセクションでは、Docker Hubからイメージを引き下ろす方法や、docker-compose.ymlを作成する際の基本構文を解説します。
公式リポジトリからのイメージ引き上げ手順
KrakenDの公式DockerイメージはDocker Hubで配布されており、以下のようにコマンド一発で取得可能です。ただし、latestタグではなく具体的なバージョンを指定することで安定性が保証されます。
-
Dockerデーモンが起動していることを確認
bash
docker info -
公式イメージを引き下ろす(固定バージョン推奨)
bash
docker pull krakend/krakend:2.10.2
基本的なyaml構文とサービス定義
docker-compose.ymlファイルを作成することで、KrakenDコンテナの起動や設定ファイルのマウントを自動化できます。以下の例では、ローカルにあるkrakend.jsonをマウントする際の設定を示します。
|
1 2 3 4 5 6 7 8 9 10 |
version: '3' services: krakend: image: krakend/krakend:2.10.2 ports: - "8080:8080" volumes: - ./config:/etc/krakend command: ["--config=/etc/krakend/krakend.json"] |
この設定により、./configディレクトリ内のkrakend.jsonがコンテナ内で読み込まれます。
krakend.json設定ファイルの構成と基本設定
KrakenDはkrakend.jsonという設定ファイルを元に動作するため、正しい構成が不可欠です。このセクションでは、エンドポイント定義やバックエンドサービスとの連携方法を中心に解説します。
エンドポイント定義の書き方
KrakenDの基本的な役割は、複数のAPIを統合してユーザーに提供することです。krakend.jsonでは、以下のようにエンドポイントを定義します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
{ "version": 2, "port": 8080, "endpoints": [ { "endpoint": "/api/v1/users", "method": "GET", "backend": [ { "url_pattern": "/users", "host": ["http://user-service:3000"] } ] } ] } |
port: KrakenDが待ち受けるポート番号endpoint: ユーザーから見えるエンドポイント(例:/api/v1/users)backend: 実際のAPI呼び出し先となるバックエンドサービス
バックエンドサービスとの連携方法
KrakenDは、ロードバランシングやフェールオーバーを自動で処理できるため、複数のバックエンドを並列して指定できます。以下は2つのサービスを組み合わせた例です。
|
1 2 3 4 5 6 7 8 9 10 11 |
"backend": [ { "url_pattern": "/users", "host": ["http://user-service1:3000"] }, { "url_pattern": "/users", "host": ["http://user-service2:3000"] } ] |
この設定により、/api/v1/usersにアクセスすると、KrakenDがロードバランシングを実施し、最適なバックエンドを選択します。
JWT認証モジュールの導入と公開鍵形式設定
APIゲートウェイでは、セキュリティ強化のためにJWT認証を有効にする必要があります。KrakenDは標準でJWTモジュールをサポートしており、以下の手順で導入できます。
認証が必要なエンドポイントの指定方法
krakend.jsonに以下のセクションを追加し、特定のエンドポイントに対して認証を強制します。
|
1 2 3 4 5 6 7 |
"extra_config": { "github.com/devopsfaith/krakend-jwt": { "signature-algorithm": "RS256", "public-key": "/etc/krakend/public.key" } }, |
signature-algorithm: 使用する署名アルゴリズム(例: RS256)public-key: 公開鍵ファイルのパス
公開鍵の生成手順とセキュリティ設定
公開鍵は/etc/krakend/public.keyに配置し、PEM形式で保存する必要があります。以下に生成手順を示します。
-
秘密鍵と公開鍵ペアの生成(OpenSSLを使用)
bash
openssl genrsa -out private.key 2048
openssl rsa -in private.key -pubout -out public.key -
公開鍵ファイルの配置とパーミッション設定
bash
mkdir -p ./config && mv public.key ./config/
chmod 600 ./config/public.key
重要: 秘密鍵(
private.key)は厳重に管理し、外部に公開しないようにしてください。定期的な鍵のローテーションも推奨されます。
ローカル環境での動作確認とテストケース設計
導入後の動作確認は、設定ミスの早期発見に不可欠です。このセクションでは、curlコマンドによるテスト方法やエラーハンドリングの検証手順を解説します。
curlコマンドによる簡単なテスト方法
KrakenDが正しく動作しているかは、以下のようにcurlで直接確認できます。
|
1 2 |
curl -X GET http://localhost:8080/api/v1/users |
このとき、user-serviceにアクセスするリクエストが正常に処理されているかを確認してください。また、レスポンスコードや内容の検証は必須です。
エラーハンドリングの検証手順
以下のように、不正なリクエストや認証エラー時の挙動をテストします。
-
存在しないエンドポイントへのアクセス
bash
curl -X GET http://localhost:8080/api/v1/invalid-endpoint
→404 Not Foundが返ってくるべきです。 -
JWT認証なしのリクエスト(保護されたエンドポイント)
bash
curl -X GET http://localhost:8080/api/v1/users-protected
→401 Unauthorizedが返ってくることで、認証機能が正しく動作していることを確認できます。
本番環境に向けたセキュリティとパフォーマンスチューニング
ローカルで動くだけでは不十分です。本番環境に移行する際のセキュリティ対策や性能調整も重要です。以下の項目を確認してください。
プロキシやロードバランサーとの連携設定
KrakenDは、NginxやHAProxyなどと組み合わせることで、負荷分散やSSL終端を効率的に行えます。以下のようにプロキシの設定例を紹介します。
|
1 2 3 4 5 6 7 8 |
server { listen 80; location /api/v1/ { proxy_pass http://localhost:8080/api/v1/; proxy_set_header Host $host; } } |
この設定により、KrakenDが外部から見えなくなり、セキュリティ面での保護が強化されます。
リクエスト制限の仕組み導入
APIの過剰なアクセスを防ぐためには、レートリミット(Rate Limiting)が有効です。krakend.jsonに以下のように設定します。
|
1 2 3 4 5 6 7 8 |
"extra_config": { "github.com/devopsfaith/krakend-ratelimit-middleware": { "rate": 10, "burst": 20, "identifier": "header:X-User-ID" } } |
| パラメータ | 値 | 補足 |
|---|---|---|
rate |
10 | セカンドあたりのリクエスト上限 |
burst |
20 | 瞬間的な最大数 |
identifier |
header:X-User-ID |
ユーザーを識別するヘッダ名 |
この設定により、1秒間に10回以上アクセスされた場合に自動で拒否される仕組みになります。
Docker Composeテンプレート(即時導入用)
以下に、KrakenDのローカル環境構築をすぐ開始できるdocker-compose.ymlファイルのテンプレートを提供します。./config/krakend.jsonには先述の設定内容を配置してください。
|
1 2 3 4 5 6 7 8 9 10 |
version: '3' services: krakend: image: krakend/krakend:2.10.2 ports: - "8080:8080" volumes: - ./config:/etc/krakend command: ["--config=/etc/krakend/krakend.json"] |
注意: 実運用では
latestタグを使用せず、固定バージョンを推奨します。また、セキュリティ設定は本番環境向けにさらに強化してください。