Kong AI Gateway の使い方 — Docker で最小構成を動かす導入手順

2026.08.13 ・ 約10分で読めます

Kong AI Gateway を検討するとき、最初の壁は「まず手元で動かすには何が必要か」です。本記事では、データベースなし(DB-less)の Kong Gateway を Docker で起動し、ai-proxy プラグイン経由で OpenAI 互換の入口を立てて、curl で応答を確認するまでの手順を示します。ローカル環境なら30分ほどで一巡できる内容です。

設定例は Kong Gateway 3.x 系の宣言的設定(declarative config)で書いています。プラグインのスキーマはバージョンで変わることがあるため、動かない場合は 公式ドキュメント(Plugin Hub: ai-proxy)で手元のバージョンの仕様を確認してください。

構成の全体像

今回作るのは次の構成です。アプリ(ここでは curl)は Kong の 8000 番ポートに OpenAI 形式のリクエストを送り、Kong の ai-proxy プラグインがプロバイダごとの認証ヘッダー付与とリクエスト変換を行って、LLM プロバイダに中継します。アプリ側は API キーを持ちません。

CLIENT
curl / アプリ
(キーを持たない)
KONG :8000
ai-proxy
認証付与・変換・中継
PROVIDERS
OpenAI
Anthropic ほか
図1:最小構成。API キーは Kong 側の設定にだけ存在し、アプリからは見えません。

前提条件

必要なものは3つです。(1) Docker が動く環境(Docker Desktop / OrbStack / Linux いずれも可)。(2) LLM プロバイダの API キー(この記事では OpenAI を例にします)。(3) Kong Gateway 3.6 以降。ai-proxy プラグインは 3.6 でオープンソース版に入ったため、それより古いイメージでは動きません。この記事では執筆時点の安定系である 3.9 系イメージを使います。

データベースは使いません。Kong には設定を PostgreSQL に持つモードと、YAML ファイル1枚で完結する DB-less モードがあり、検証には DB-less が向いています。設定ファイルがそのまま構成のドキュメントになり、Git で差分管理できるのも利点です。

手順1: 宣言的設定 kong.yml を書く

作業ディレクトリに kong.yml を作ります。service と route を1組定義し、その route に ai-proxy プラグインを付けます。

_format_version: "3.0"

services:
  - name: openai-chat
    url: https://api.openai.com
    routes:
      - name: openai-chat-route
        paths:
          - /openai/chat
    plugins:
      - name: ai-proxy
        config:
          route_type: llm/v1/chat
          auth:
            header_name: Authorization
            header_value: Bearer sk-XXXX   # 本番では直書きせず Vault 参照や環境変数に
          model:
            provider: openai
            name: gpt-4o-mini
            options:
              max_tokens: 512
              temperature: 0.7
kong.yml — /openai/chat への POST を OpenAI の Chat Completions に中継する最小設定。

設定のポイントは3つあります。route_type: llm/v1/chat は「OpenAI の Chat Completions 形式で受けて中継する」という宣言です。auth.header_value に API キーを書くことで、Kong がプロバイダへのリクエストにキーを付けます。model.name をゲートウェイ側で固定しているため、クライアントがモデルを指定する必要はありません(部門ごとに使えるモデルを固定する、という統制がこの1行でできます)。

なお、検証を早く始めるためにキーを直書きしていますが、この YAML を Git に入れる段階で必ず外部化してください。Kong には環境変数や外部シークレットストアを参照する Vault 機能があり、{vault://env/openai-api-key} のような参照形式に置き換えられます。

手順2: Docker で起動する

docker run -d --name kong-ai \
  -v "$(pwd)/kong.yml:/kong/declarative/kong.yml" \
  -e KONG_DATABASE=off \
  -e KONG_DECLARATIVE_CONFIG=/kong/declarative/kong.yml \
  -e KONG_PROXY_LISTEN="0.0.0.0:8000" \
  -e KONG_ADMIN_LISTEN="0.0.0.0:8001" \
  -p 8000:8000 -p 8001:8001 \
  kong:3.9
DB-less モードで起動。8000 がプロキシ(アプリが叩く口)、8001 が Admin API です。

起動したら設定が読めているかを Admin API で確認します。curl -s localhost:8001/routes で routes が1件返れば読み込みは成功です。YAML の構文エラーがあるとコンテナが起動直後に落ちるので、その場合は docker logs kong-ai でエラー行を確認します。

手順3: curl で動作を確認する

curl -s http://localhost:8000/openai/chat \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [
      {"role": "user", "content": "1行で自己紹介してください"}
    ]
  }' 
OpenAI 形式のボディをそのまま送ります。model はゲートウェイ側の設定が使われるため省略できます。

OpenAI の Chat Completions と同じ形式のレスポンスが返れば成功です。アプリ側から見ると「モデル名も API キーも知らないのに LLM が使える」状態になっており、これが AI Gateway を入口に置く意味そのものです。プロバイダを切り替えたくなったら、アプリのコードではなく kong.yml を書き換えます。

手順4: 2つ目のプロバイダを追加する

services 配列にもう1組追加すると、パスごとにプロバイダを使い分けられます。Anthropic の例です。

  - name: anthropic-chat
    url: https://api.anthropic.com
    routes:
      - name: anthropic-chat-route
        paths:
          - /anthropic/chat
    plugins:
      - name: ai-proxy
        config:
          route_type: llm/v1/chat
          auth:
            header_name: x-api-key        # Anthropic は Authorization ではなく x-api-key
            header_value: sk-ant-XXXX
          model:
            provider: anthropic
            name: claude-sonnet-4-5       # 利用可能なモデル名に置き換える
            options:
              anthropic_version: "2023-06-01"
              max_tokens: 512
kong.yml の services 配列への追記分。認証ヘッダー名とバージョン指定がプロバイダごとに異なる点に注意。

これで /openai/chat/anthropic/chat という2つの入口ができ、アプリは同じ OpenAI 形式のボディをどちらにも送れます。プロバイダごとの API 形式の差(認証ヘッダー、リクエスト構造)は ai-proxy が吸収します。DB-less モードの設定反映は、ファイル更新後にコンテナを再起動するか、Admin API の /config エンドポイントに新しい YAML を POST します。

つまずきやすい点

症状よくある原因と対処
401 が返るauth.header_value の書式間違いが大半です。OpenAI は「Bearer 」プレフィックスが必要、Anthropic は x-api-key にキーのみ。プロバイダ側のダッシュボードでキーの有効性も確認します。
404 が返るroute の paths とリクエスト先パスの不一致。Kong はデフォルトで前方一致のため、まず curl localhost:8001/routes で登録済みパスを見ます。
ストリーミングが動かないボディに "stream": true を入れると SSE で返せますが、Kong と クライアントの間に別のプロキシ(バッファリングする LB など)があると崩れます。まず Kong に直接 curl して切り分けます。
タイムアウトするLLM の応答は通常の API より遅く、長い生成では service のデフォルトタイムアウト(60秒)を超えることがあります。service の read_timeout を伸ばします。
コンテナが即落ちするkong.yml の構文エラーか、_format_version の不一致。docker logs にパース失敗の行番号が出ます。
表1:検証時に実際に踏みやすい5つ。まず Admin API(8001)とコンテナログを見る癖をつけると早く抜けられます。

最小構成と本番の間にあるもの

ここまでの構成は「動く」までです。本番に置くときは、少なくとも次の4点を追加で設計することになります。(1) 呼び出し側の認証。今の入口は誰でも叩けるため、key-auth や OIDC で利用者を識別します。ここで付けた consumer 単位に、後述のコスト集計やレート制限が掛かります。(2) レート制限とコスト管理。トークン量ベースの制限や部門別の利用集計は AI 系プラグインの領域で、高度なものは有償版の機能に含まれます。(3) ログと可観測性。誰がどのモデルに何トークン使ったかの記録は、監査とコスト配賦の土台になります。(4) 設定の運用。DB-less の YAML を Git 管理し、CI から配布する形(いわゆる GitOps 運用)に乗せるか、コントロールプレーンを Konnect に任せるかの分岐です。

OSS の範囲でどこまで賄えるか、どこから有償版が必要かは、Kong のライセンスと料金の整理にまとめました。製品間の比較から入りたい場合は AI Gateway 比較(Kong / LiteLLM / Portkey)が前段になります。

検証から本番設計まで、Kong パートナーとして伴走します。
認証・レート制限・コスト可視化・ガードレールを含めた本番構成の設計と構築を日本語で支援します。
Kong AI Gateway の支援内容を見る
相談する →