You need to enable JavaScript to run this app. Kubernetes 如何通过同一 Ingress 暴露 TCP 与 UDP 混合协议端口服务
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes 如何通过同一 Ingress 暴露 TCP 与 UDP 混合协议端口服务

同一Ingress暴露TCP+UDP混合协议服务的实现方案

先明确你之前操作报错的核心原因

  • 你贴的ingress-nginx Service配置存在语法错误:args是Deployment容器的启动参数字段,不属于Service的spec合法配置项,会直接触发K8s API的配置校验异常,部分环境下会误报“不支持混合协议端口配置”
  • 多数云厂商内置的LoadBalancer对接插件,旧版本会限制单个LoadBalancer实例同时配置TCP、UDP两类监听器,即使你配置的是不同端口的不同协议,也会被插件的校验逻辑拦截
  • 很多人配置Nginx Ingress的TCP/UDP透传时,漏了Deployment层面的参数配置:ingress-nginx容器默认不会加载tcp-services、udp-services两个ConfigMap的映射,必须在容器启动参数中显式指定--tcp-services-configmap=ingress-nginx/tcp-services、--udp-services-configmap=ingress-nginx/udp-services,不然ConfigMap写了也不会生效

可直接落地的实现路径

所有路径最终对外都会统一使用同一个Ingress入口地址,不会为TCP、UDP服务拆分独立公网入口,完全匹配你的原始需求。

路径1:修正Nginx Ingress配置,绕过云插件限制

  • 第一步:修正ingress-nginx的Deployment配置:
    • 给ingress-nginx容器显式加上上述两个启动参数,开启TCP、UDP端口透传能力
    • 在容器的ports字段中,同时添加5555/TCP、5556/UDP的端口声明,如果ingress-nginx用了hostNetwork模式,还要同步确认节点防火墙放行这两个端口的出入方向流量
  • 第二步:清理之前错误的ingress-nginx Service配置,移除非法的args字段,保留5555/TCP、5556/UDP的端口映射
  • 第三步:如果云网插件依然报混合协议不支持,直接绕过Service的自动端口同步:
    • 将ingress-nginx的Service类型暂时改为NodePort
    • 手动在云侧LoadBalancer上配置两个独立监听器:5555端口TCP、5556端口UDP,都转发到所有ingress-nginx节点对应的NodePort端口

路径2:切换原生支持混合协议的Ingress实现

如果云侧LoadBalancer完全不支持同实例下的UDP监听器,不需要硬改Nginx Ingress的配置,可以直接用原生支持TCP、UDP统一路由的Ingress控制器:

  • 直接在控制器中分别创建对应TCP、UDP路由规则,把流量直接绑定到你的test-service的对应端口
  • 不需要手动维护tcp-services、udp-services的ConfigMap映射,控制器会自动同步路由规则,同一个LoadBalancer实例可以同时承载TCP、UDP协议的流量转发

必查的排错点

  • 先确认test-service本身有可用的后端端点:原配置的selector是tt: test,要确保后端Pod的标签完全匹配,不然Service没有可用后端,所有转发都不会生效
  • 检查两个ConfigMap的键值格式:数据键必须是纯数字的端口字符串,值的格式严格为命名空间/服务名:服务端口,比如default/test-service:5555,不要额外加协议前缀,不然ingress-nginx会解析映射失败
  • 检查ingress-nginx Pod的启动日志:如果TCP流量通、UDP流量不通,看日志里有没有UDP端口绑定的权限报错,部分节点的安全策略会限制非特权端口外的UDP绑定

内容的提问来源于stack exchange,提问作者Mohamed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.14 22:36:08