Internal communication method between K8s Pod A and Pod B via API GW
本指南解释了如何通过 API 网关在同一集群环境中启用两个 Kubernetes Pod 之间的内部通信 - Pod A(客户端)和 Pod B(服务器)。API 网关使用 Kubernetes 服务名称和 Kong 代理规则在内部路由请求。
概念概述
- Pod A:发起 API 请求的客户端 Pod。
- Pod B:接收和处理 API 请求的服务器 Pod。
- 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。
通过 Kong 代理从 Pod A 发起请求
在 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
- 此设置完全在 Kubernetes 网络内使用内部 DNS。
- 确保 Kong Proxy 可以访问目标服务的 FQDN。
- 所有相关服务(Kong、Pod A、Pod B)必须在可以通过 DNS 或适当的网络策略解析彼此服务的命名空间中。