resource
杂记
公司有生产、测试、开发等不同的环境以及不同的集群,用户请求(分为公网,内网用户)是通过什么路径到达后端应用的。
公网
① Client
│
│ HTTPS
▼
② DNS
│
│ 找到 Public SLB IP
▼
③ Public SLB
│
│ 查看 Path
│
│ /api/v1/app/*
▼
④ APP Gateway Pool
│
│ 选择 APP Gateway 实例
▼
⑤ APP Gateway
│
│ 鉴权 / 限流 / Header处理
│
internal LB
│ /order/*
▼
ingress
| /order/* api 路由
▼
Order Service 入口
│
│
▼
Order Pod
client 发送请求 ,做 DNS 解析到一个公网 IP (Public SLB IP),假设为 203.0.113.10 ,
GET https://api.xxx.com/api/v1/app/user/info
SLB 解密出明文 HTTP 报文后进行解析,根据 Host 和 Path,将请求发往不同的集群,例如:
Host Path env
─────────────────────────────────────────────────────────
api.xxx.com /api/v1/app/* 生产 APP Gateway
api.xxx.com /api/v1/h5/* 生产 H5 Gateway
api.xxx.com /api/v1/open/* 生产 Open Gateway
test-api.xxx.com /api/v1/app/* 测试 APP Gateway
test-api.xxx.com /api/v1/h5/* 测试 H5 Gateway
test-api.xxx.com /api/v1/open/* 测试 Open Gateway
当前 GET https://api.xxx.com/api/v1/app/user/info 根据上述规则发往生产环境集群 APP Gateway 。
APP Gateway 结构:
APP Gateway
│
├── APP-GW-1
├── APP-GW-2
├── APP-GW-3
└── APP-GW-4
根据负载均衡算法选择其中一个网关, APP-GW-x 网关负责 API 路由 、鉴权 、限流 、traceId等,可以直接讲请求转发到相应的 Service
APP Gateway
│
┌───────────────┼────────────────┐
↓ ↓ ↓
/user/* /order/* /product/*
↓ ↓ ↓
User Service Order Service Product Service
也可能这里网关不负责 API 路由,做剩下的鉴权等操作,然后转发请求到 internal LB , 做负载均衡转发到不同的 ingress ,由 ingress 做 API 路由分发到不同的 Service。不管是哪种方式,请求总归会转发到 Service ,根据 Service 中维护的 EndpointSlice 记录,讲请求转发到内部 pod。
APP Gateway
│
| 转发请求到 Internal LB
|
▼
┌─────────────────┐
│ Internal LB │
│ 10.10.20.100 │
└────────┬────────┘
│
负载均衡选择
│
┌───────────────┼───────────────┐
↓ ↓ ↓
Ingress-1 Ingress-2 Ingress-3
Controller Controller Controller
│ │ │
└───────────────┼───────────────┘
│
│ API 路由
▼
┌─────────────────┐
│ Service │
└───────┬─────────┘
│
┌──────────────┼──────────────┐
↓ ↓ ↓
Service Service Service
User Order Product
│ │ │
▼ ▼ ▼
User Pod Order Pod Product Pod
具体网络拓扑
VPC 网段 10.1.0.0/16 | K8s Pod 网段 10.11.0.0/16 | K8s Service 网段 10.111.0.0/16
| 设施名称 | 内网 IP 示例 | 所在环境/载体类型 | 备注 |
|---|---|---|---|
| APP-GW-1 | 10.1.10.5 |
ECS 云服务器 | 不在 K8s 中,直接挂载 VPC 内网网卡 |
| APP-GW-2 | 10.1.10.6 |
ECS 云服务器 | 不在 K8s 中,直接挂载 VPC 内网网卡 |
| Internal LB | 10.1.20.100 |
云厂商内网 SLB 产品 | K8s Ingress 的流量入口 |
| Ingress-1 Controller | 10.1.30.11 (Node IP)10.11.1.5 (Pod IP) |
K8s 集群 (Worker Node) | 通常采用 HostNetwork 模式直接复用宿主机 IP,或通过 NodePort 暴露 |
| Ingress-2 Controller | 10.1.30.12 (Node IP)10.11.1.6 (Pod IP) |
K8s 集群 (Worker Node) | 部署在另一个 Worker Node 节点上保证高可用 |
| User Service | 10.111.1.10 |
K8s 虚拟ip (ClusterIP) | 仅在 K8s 集群内部有效,无法从外部 ping 通 |
| Order Service | 10.111.1.20 |
K8s 虚拟ip (ClusterIP) | 同上 |
| User Pod 1 | 10.11.2.50 |
K8s Pod ip 网段 (10.11.0.0/16) | 容器网络插件分配的 IP,通过 CNI 与 Node 通信 |
| Order Pod 1 | 10.11.3.100 |
K8s Pod ip 网段 (10.11.0.0/16) | 同上 |
也可以通过调用云厂商的 API,将 IP 显式地注册到网卡上,将 K8s 的 Pod IP 铺开到 VPC 路由表中( 这样的扁平化网络感觉更好管理 ),铺开的只有 Pod IP,Service clusterIp ,k8s DNS 服务器IP,依旧是逻辑 IP,仅存在于 iptables 规则中。此时 10.11.1.5 也是 VPC 内可寻址的一个 IP。
内网
办公网络(如 192.168.x.x)与云上 VPC(10.1.0.0/16)默认是物理隔离的。企业必须通过 物理专线 (Direct Connect) 或 IPsec VPN 加密隧道 将两端路由器打通。输入内网域名(如 admin.internal.com),该请求由办公网内部的 DNS 服务器将其解析为云上 Internal LB)的私有 IP,在上述的拓扑中为 10.1.20.100。
为了安全与业务隔离,内网访问通常会拥有一套独立于公网的网关或 Ingress 设施:
① Office Client (办公网电脑)
│ 请求 admin.internal.com
▼
② 企业本地路由器 -> 专线 / VPN 加密隧道
│ 路由转发直达 VPC 内网网段 (10.1.x.x)
▼
③ Internal LB (云内网负载均衡, 10.1.20.100)
│
▼
④ Internal Ingress 内网专属 Ingress Controller
│ API 路由分发 (如 /admin/*)
▼
⑤ Admin Service (后台服务的 ClusterIP)
│
▼
⑥ Admin Pod (后台管理业务容器)