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

如何配置Nginx Ingress转发到本地TCP服务解决503访问报错

问题根因

你当前的场景是将K8s的Nginx Ingress转发到集群节点本地通过docker-compose运行的3000端口服务,返回503的核心原因有两个:

  1. 你创建的Service默认需要通过selector匹配集群内的Pod作为后端,而你的服务跑在K8s集群调度的Pod之外,没有对应匹配的Pod,Service不存在可用后端端点
  2. 你的Ingress资源部署在ingress-basic命名空间,但你提供的Service配置没有指定命名空间,默认会创建在default命名空间,Ingress找不到对应Service资源
解决步骤

1. 调整docker-compose服务监听范围

修改docker-compose配置中的端口映射规则,将仅监听本地回环的127.0.0.1:3000:3000改为监听所有网卡:

services:
  你的服务名称:
    ports:
      - "3000:3000" # 等价于0.0.0.0:3000:3000

修改后重启docker-compose服务,执行curl 节点内网IP:3000验证可以正常访问。

2. 重新部署同命名空间的无选择器Service

创建不带selector的Service,不需要匹配集群内Pod,后续手动绑定后端地址:

apiVersion: v1
kind: Service
metadata:
  name: e-frontend-saleor
  namespace: ingress-basic # 必须与Ingress同命名空间
spec:
  ports:
    - protocol: TCP
      port: 80
      targetPort: 3000

3. 创建Endpoint绑定本地服务地址

创建同名Endpoint资源,将服务后端指向运行docker-compose的节点内网IP+3000端口:

apiVersion: v1
kind: Endpoints
metadata:
  name: e-frontend-saleor
  namespace: ingress-basic
subsets:
  - addresses:
      - ip: 替换为跑docker-compose服务的K8s节点内网IP,不可填127.0.0.1
    ports:
      - port: 3000
验证与排查
  • 执行kubectl get endpoints e-frontend-saleor -n ingress-basic确认端点已正常绑定
  • 进入Nginx Ingress Controller的Pod内部,执行curl <节点内网IP>:3000确认网络连通,无防火墙拦截
  • 等待1分钟左右访问域名验证是否正常返回内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:36:03