裸金属环境下如何将Istio Ingress Gateway绑定80/443端口
裸金属无托管负载均衡场景下Istio Gateway流量接入方案
核心问题结论
裸金属无外部负载均衡的场景下,使用HAProxy转发流量到Istio Ingress Gateway是完全合理且常用的方案;单节点场景下也可以通过调整Istio Ingress Gateway的暴露方式直接占用宿主机80/443端口,不需要额外的转发层。
此前MetalLB部署失败原因说明
你在Hetzner单节点专用服务器上配置MetalLB失败,并不是MetalLB不适配该场景,而是配置逻辑错误:MetalLB的二层广播模式要求分配的外部IP未被宿主机主网卡占用,你直接绑定宿主机已在用的公网IP自然无法生效,单节点场景也完全不需要引入MetalLB组件。
可选落地方案
方案1:Istio Ingress直接监听宿主机80/443端口(单节点场景最优)
不需要额外转发组件,链路最简洁,无SSL兼容性问题:
- 将Istio Ingress Gateway的部署配置改为
HostNetwork模式,直接共享宿主机网络命名空间,即可直接监听宿主机公网网卡的80、443端口,不需要端口映射 - 若不想使用HostNetwork,也可以将Istio Ingress Gateway的Service改为
NodePort类型,手动指定80、443为固定NodePort,操作前需先调整kube-apiserver的启动参数--service-node-port-range,将80、443加入允许的端口范围(默认范围为30000-32767,这也是你之前拿到31701动态端口的原因) - 上述两种方案都可以直接将cert-manager签发的SSL证书配置在Istio Gateway资源上,SSL卸载完全由Istio处理,没有中间层兼容性问题
方案2:保留HAProxy转发架构(适合多节点扩展场景)
你当前HAProxy无法处理cert-manager SSL流量的问题,是配置逻辑错误导致的,调整后即可正常使用:
- 将HAProxy的监听模式改为TCP透传模式,不要在HAProxy层做SSL卸载,直接把公网80、443端口的流量转发到Istio Ingress Gateway的NodePort端口
- SSL卸载完全交给Istio Gateway处理,即可完美兼容cert-manager签发的所有证书
- 后续集群扩展为多节点时,可以直接在HAProxy后端添加所有集群节点的Istio Ingress Gateway NodePort作为后端,自行实现负载均衡能力,扩展性更强
内容的提问来源于stack exchange,提问作者2Fast2BCn
相关产品推荐
相关产品推荐

