Kubernetes中HAProxy Ingress无地址分配问题排查求助
问题排查与解决方案:Ingress未分配地址+CockroachDB端口转发失败
环境信息
- Kubernetes版本:v1.25.9+rke2r1
- 已部署组件:MetalLB(含可用外部IP池)、HAProxy Ingress Controller
- 目标:通过Ingress暴露由CrdbCluster Operator管理的CockroachDB实例
当前现象
- Ingress资源已创建,但
ADDRESS字段为空,外部访问超时 - 端口转发CockroachDB Service时出现连接重置错误
- HAProxy Pod日志无异常,Ingress与关联Service配置表面正常
相关资源输出
Ingress列表
k get ingress -A NAMESPACE NAME CLASS HOSTS ADDRESS PORTS AGE cockroachdb-instance sql-cockroachdb haproxy cockroachdb.dev-service-stage.k8s.mi1.prod.cloudfire.it 80 15m
Ingress详情
k describe ingress sql-cockroachdb -n cockroachdb-instance Name: sql-cockroachdb Labels: app.kubernetes.io/component=database app.kubernetes.io/instance=cockroachdb app.kubernetes.io/managed-by=cockroach-operator app.kubernetes.io/name=cockroachdb app.kubernetes.io/part-of=cockroachdb app.kubernetes.io/version=v23.1.4 crdb=test Namespace: cockroachdb-instance Address: Ingress Class: haproxy Default backend: <default> Rules: Host Path Backends ---- ---- -------- cockroachdb.dev-service-stage.k8s.mi1.prod.cloudfire.it cockroachdb-public:sql (10.222.19.88:26257,10.222.196.89:26257,10.222.30.93:26257) Annotations: crdb.io/last-applied: UEsDBBQACAAIAAAAAAAAAAAAAAAAAAAAAAAIAAAAb3JpZ2luYWyMk0GT0zAMhf+LzrG3pbvQ5ki5cIEZYLgwHGRbaTxxbK+sFDqd/HfGbelsoYe9aZSn7+kpyRFGEnQoCO0RAhoKpV... field.cattle.io/publicEndpoints: [{\"addresses\":[\"\"],\"port\":80,\"protocol\":\"HTTP\",\"serviceName\":\"cockroachdb-instance:cockroachdb-public\",\"ingressName\":\"cockroachdb-instance... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal CREATE 28m ingress-controller Ingress cockroachdb-instance/sql-cockroachdb Normal CREATE 28m ingress-controller Ingress cockroachdb-instance/sql-cockroachdb Normal UPDATE 27m (x2 over 27m) ingress-controller Ingress cockroachdb-instance/sql-cockroachdb Normal UPDATE 27m (x2 over 27m) ingress-controller Ingress cockroachdb-instance/sql-cockroachdb
端口转发错误日志
E0711 09:59:38.779413 43555 portforward.go:409] an error occurred forwarding 8081 -> 26258: error forwarding port 26258 to pod 8a774d302b846fdbdd7bbc6b3f35144d9712f15de9ab72d4ef9e0c8cdfa8ee85, uid : failed to execute portforward in network namespace \"/var/run/netns/cni-f1c36dc8-3647-e00e-b67e-7abb019b236b\": read tcp4 127.0.0.1:33424->127.0.0.1:26258: read: connection reset by peer
CrdbCluster配置
apiVersion: crdb.cockroachlabs.com/v1alpha1 kind: CrdbCluster metadata: name: cockroachdb spec: dataStore: pvc: spec: accessModes: - ReadWriteOnce resources: requests: storage: "20Gi" volumeMode: Filesystem resources: requests: cpu: 500m memory: 2Gi limits: cpu: 2 memory: 4Gi tlsEnabled: true ingress: sql: ingressClassName: haproxy host: cockroachdb.dev-service-stage.k8s.mi1.prod.cloudfire.it image: name: cockroachdb/cockroach:v23.1.4 nodes: 3 additionalLabels: crdb: test
排查步骤与解决方向
1. 优先解决CockroachDB端口转发问题(可能是根源)
端口转发连接重置,大概率是Pod内部服务未正常监听或TLS配置导致的:
- 检查Pod端口监听状态:
注意:CockroachDB默认SQL端口是k exec -n cockroachdb-instance cockroachdb-0 -- netstat -tulpn26257,UI端口是8080,你转发的26258可能是配置错误,确认是否有进程监听目标端口。 - 查看Pod启动日志,排查服务异常原因:
重点关注TLS证书加载失败、集群节点无法加入等错误(你已启用k logs -n cockroachdb-instance cockroachdb-0tlsEnabled: true)。 - 用官方客户端验证服务可用性:
启用TLS后,普通TCP连接会被重置,必须用带证书的客户端访问。k exec -n cockroachdb-instance cockroachdb-0 -- ./cockroach sql --certs-dir=/cockroach/cockroach-certs --host=cockroachdb-public
2. 排查Ingress未分配地址问题
Ingress无ADDRESS通常是HAProxy Controller与MetalLB关联异常:
- 检查HAProxy Controller的Service状态:
确认Service类型为k get svc -n haproxy-controller # 替换为你的HAProxy实际命名空间LoadBalancer,且EXTERNAL-IP字段有值(属于MetalLB的IP池范围)。 - 验证IngressClass关联关系:
确认k get ingressclass haproxy -o yamlspec.controller字段值与HAProxy Controller的配置一致(通常为haproxy.org/ingress-controller)。 - 检查MetalLB配置:确认IP池有可用IP,且HAProxy的LoadBalancer Service无
Pending状态。 - 过滤HAProxy Controller的Ingress相关日志:
未过滤的日志可能遗漏了关键错误信息。k logs -n haproxy-controller -l app.kubernetes.io/name=haproxy-ingress | grep sql-cockroachdb
3. 验证CockroachDB Service可用性
- 检查Service端点状态:
确认k describe svc cockroachdb-public -n cockroachdb-instanceEndpoints字段中所有Pod的26257端口处于Ready状态。 - 从集群内部测试连通性:
连接失败则说明Service到Pod的链路存在问题(如TLS拦截、Pod未就绪)。k run -it --rm test-pod --image=busybox -- /bin/sh # 在测试Pod内执行 nc -zv cockroachdb-public.cockroachdb-instance.svc.cluster.local 26257
4. 检查Ingress规则的协议兼容性
CockroachDB的SQL协议是TCP协议,HAProxy Ingress默认处理HTTP流量,需配置TCP转发:
- 在Ingress中添加TCP转发注解:
annotations: haproxy.org/tcp-services: "sql:cockroachdb-instance/cockroachdb-public:26257" - 或在HAProxy Controller的ConfigMap中预先配置TCP端口映射,再通过Ingress关联该配置。
内容的提问来源于stack exchange,提问作者simone.benati
相关产品推荐
相关产品推荐

