Internal communication method between K8s Pod A and Pod B via API GW
このガイドでは、同じクラスター環境内でAPIゲートウェイを介して2つのKubernetesポッド - Pod A (クライアント) と Pod B (サーバー) - の間で内部通信を有効にする方法を説明します。APIゲートウェイは、Kubernetesサービス名とKongプロキシルールを使用してリクエストを内部的にルーティングします。
概念の概要
- Pod A: APIリクエストを開始するクライアントポッド。
- Pod B: APIリクエストを受信し処理するサーバーポッド。
- API Gateway: サービスディスカバリーとヘッダーに基づくルーティング(Kong経由)を使用して、構成されたルールに基づいてリクエストをルーティングします。
この構成により、同じクラスター内で実行されているサービス間でシームレスな内部API呼び出しが可能になり、スケーラビリティとサービスの抽象化が確保されます。
ステップバイステップの構成
Pod BのサービスをAPIバックエンドとして登録
APIMコンソールでAPIを作成する際に、Pod BのKubernetes Service FQDN をバックエンドURLとして指定します。このFQDNにより、ゲートウェイは適切なサービスに内部的にトラフィックをルーティングできます。
バックエンドURLの例:
[http://svc-apim-gateway-manager.apim.svc.cluster.local:8081](http://svc-apim-gateway-manager.apim.svc.cluster.local:8081/)
- svc-apim-gateway-manager: Pod BのKubernetesサービス名。
- apim: Pod Bのネームスペース。
- svc.cluster.local: デフォルトのクラスタードメイン。
- 8081: Pod Bによって公開されるサービスポート。
このバックエンド登録により、API GWは内部DNSベースのサービスディスカバリーを使用してPod Bにトラフィックをルーティングできます。
Pod AからKongプロキシ経由でリクエストを行う
API登録後、Pod AはKongプロキシの内部サービスアドレスにアクセスし、正しいHostヘッダーを設定することで公開されたAPIを呼び出すことができます。KongはリクエストをPod Bに適切にルーティングします。
サンプルリクエスト:
curl -H "Host: `<desired-host>`" \
http://`<KONG_PROXY_SERVICE>`.`<kong-namespace>`.svc.cluster.local/svc-b/api
- desired-hostをAPI構成で登録されたホスト名に置き換えます。
- KONG_PROXY_SERVICEをKongプロキシのサービス名に置き換えます。
- kong-namespaceをKongがデプロイされているネームスペースに置き換えます。
- /svc-b/apiはバックエンドAPIにマッピングされたパスです。
Hostヘッダーは、Kongでどのルートがトリガーされるかを決定します。API作成時に登録されたルートと一致することを確認してください。
注意事項
- このセットアップは、内部DNSを使用してKubernetesネットワーク内で完全に機能します。
- Kongプロキシが宛先サービスのFQDNにアクセスできることを確認してください。
- 関与するすべてのサービス(Kong、Pod A、Pod B)は、DNSまたは適切なネットワークポリシーを介して互いのサービスを解決できるネームスペースに存在する必要があります。