同一IP地址能否支持负载均衡的TCP/UDP两类转发规则?
认知偏差说明
你对负载均衡转发规则唯一约束的认知存在部分偏差,GCP 转发规则的冲突判断逻辑不是单纯的「IP地址+端口号」组合,而是IP地址 + IP协议 + 端口范围三者的匹配关系,只要三者存在重叠就会触发资源占用报错。
报错根因
你使用--ports=ALL参数是触发报错的直接原因:
- 当你为TCP协议的转发规则指定
--ports=ALL时,该规则会独占你指定IP的全端口TCP流量权限 - GCP 不允许同一IP下分别创建TCP全端口、UDP全端口的两条独立转发规则,二者必须合并为一条同时支持双协议的规则
解决方案
场景1:TCP和UDP全端口流量需要转发到同一个后端
- 先删除已创建的TCP单协议转发规则:
gcloud compute forwarding-rules delete <TCP规则名称> --region <规则所属区域> - 新建同时支持TCP和UDP的全端口转发规则,示例命令如下,其余原有配置参数保持不变即可:
gcloud compute forwarding-rules create <新规则名称> \ --region <规则所属区域> \ --ip-address x.y.w.z \ --ports ALL \ --ip-protocol TCP_UDP
场景2:TCP和UDP流量需要转发到不同后端
你不能再使用--ports=ALL参数,需要将两类协议需要用到的端口范围显式分开声明,只要二者的端口范围不存在重叠,就可以复用同一个IP创建两条独立的转发规则。
内容的提问来源于stack exchange,提问作者Aparna Chaganti
相关产品推荐
相关产品推荐

