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 Proxyのサービス名に置き換えます。
- kong-namespaceをKongがデプロイされている名前空間に置き換えます。
- /svc-b/apiはバックエンドAPIにマッピングされたパスです。
Hostヘッダーは、Kongでトリガーされるルートを決定します。API作成時に登録されたルートと一致することを確認してください。
### Notes \{#notes}
- このセットアップは、内部DNSを使用してKubernetesネットワーク内で完全に機能します。
- Kong Proxyが宛先サービスのFQDNにアクセスできることを確認してください。
- 関与するすべてのサービス(Kong、Pod A、Pod B)は、DNSまたは適切なネットワークポリシーを介して互いのサービスを解決できる名前空間に存在する必要があります。