You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes TCP场景下主机与服务Ingress映射配置问题

基于Nginx Ingress控制器暴露TCP服务的解决方案

故障根因确认

你之前使用的标准Ingress资源是Kubernetes原生定义的七层HTTP/HTTPS流量路由规则,仅能识别HTTP请求头中的Host字段实现子域名分发,无法处理SQL Server这类TCP协议的四层流量,配置不生效符合预期。

具体操作步骤

你使用的Nginx Ingress控制器本身支持TCP/UDP服务暴露,可按以下步骤配置:

  • 调整Nginx Ingress控制器启动参数
    确认Nginx Ingress控制器的启动命令中已添加--tcp-services-configmap参数,指定存储TCP路由规则的ConfigMap地址,格式为<命名空间>/<configmap名称>,通用配置为--tcp-services-configmap=ingress-nginx/tcp-services。

  • 创建TCP路由规则ConfigMap
    在Nginx Ingress控制器所在命名空间下,创建名为tcp-services的ConfigMap,示例配置如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-services
  namespace: ingress-nginx
data:
  # 键为Ingress控制器监听端口,值格式为<服务命名空间>/<服务名>:<服务端口>
  1433: "ingress-basic/mssql-linux:1433"
  • 开放Ingress Service对应端口
    修改Nginx Ingress关联的LoadBalancer类型Service配置,新增1433端口的暴露规则,让集群负载均衡IP开放该端口接收流量:
spec:
  ports:
    - name: http
      port: 80
      targetPort: http
      protocol: TCP
    - name: https
      port: 443
      targetPort: https
      protocol: TCP
    # 新增SQL Server端口暴露配置
    - name: mssql
      port: 1433
      targetPort: 1433
      protocol: TCP

子域名复用说明

TCP协议本身没有类似HTTP Host字段的域名标识,无法在同一个端口上通过不同三级子域名区分不同TCP服务,多个TCP服务复用同一个负载均衡IP时,需要为每个服务分配独立的监听端口。
你可以将microname3.subdomain.domain.com的DNS解析指向现有负载均衡IP,客户端通过microname3.subdomain.domain.com:1433即可访问SQL Server服务,实现域名复用的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:12:00