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

Nginx Ingress中ClickHouse TCP 9000端口连接失败排查

问题分析与解决步骤

核心问题:你错误地使用HTTP类型的Ingress资源来配置TCP端口转发——Nginx Ingress Controller的TCP/UDP转发机制和HTTP Ingress完全独立,不需要创建Ingress资源,而是依赖你已经配置的tcp参数,再配合正确的客户端连接方式。


1. 删除无效的HTTP Ingress资源

你创建的ingress-test-clickhouse-native是HTTP协议的Ingress,它只会把HTTP请求转发到ClickHouse的9000端口,这就是浏览器访问返回提示的原因,而clickhouse-client使用的是原生TCP协议,这个Ingress完全无法处理这类流量。执行命令删除:

kubectl delete ingress ingress-test-clickhouse-native

2. 确认TCP转发配置生效

检查Nginx Controller的TCP配置ConfigMap(默认在ingress-nginx命名空间,名称为ingress-nginx-controller-tcp),确认其中包含以下条目:

9000: "test-clickhouse-operator/clickhouse-test-chi-speed:9000"

如果你是通过Helm部署的,之前在values.yaml中添加的配置应该已经自动生成这个ConfigMap,若未生效,重新执行Helm升级:

helm upgrade ingress-nginx ingress-nginx/ingress-nginx -n ingress-nginx -f values.yaml

3. 调整客户端连接方式

现在Nginx Controller的外部IP(an.external.ip)的9000端口已经直接转发到ClickHouse服务的9000端口,需要做两步操作:

  • 将域名clickhousenative.staging.mydomain.com解析到Nginx Controller的外部IP an.external.ip
  • 使用clickhouse-client连接时,明确指定9000端口(即使默认是9000,也要显式声明,避免域名解析后默认走HTTP端口的误解):
    clickhouse-client -h clickhousenative.staging.mydomain.com --port 9000
    

4. 验证转发链路

先跳过域名,直接用Nginx的外部IP测试,排查问题:

clickhouse-client -h an.external.ip --port 9000
  • 如果能正常连接:说明TCP转发配置没问题,问题出在域名解析环节
  • 如果连接失败:检查集群节点的NodePort(32033)是否开放了TCP流量,或者防火墙/安全组是否限制了9000端口的外部访问

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 19:02:54