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

自建EC2 Kubernetes集群Ingress无法访问求助

自建EC2 Kubernetes集群Ingress访问问题排查方案

以下是针对你场景的逐一排查步骤:

1. 确认NGINX Ingress Controller的服务暴露方式

执行命令查看Ingress Controller的服务类型:

kubectl get svc -n nginx
  • 如果服务类型是ClusterIP:该类型仅集群内部可访问,外部无法直接通过节点IP访问。需修改为NodePort(自建集群推荐),或确认Controller Pod是否用hostPort绑定了80/443端口。
    修改服务类型命令:
    kubectl patch svc nginx-nginx-ingress -n nginx -p '{"spec":{"type":"NodePort"}}'
    
    修改后查看分配的NodePort端口(格式如80:30XXX/TCP),确保工作节点安全组开放该端口。
  • 如果服务类型是NodePort:确认80对应的NodePort端口已在工作节点安全组中开放。

2. 检查Ingress Controller Pod状态与日志

  • 确认Pod正常运行:
    kubectl get pods -n nginx
    
    确保所有Pod处于Running状态,重启次数为0。
  • 查看Pod日志排查错误:
    kubectl logs -n nginx <nginx-ingress-controller-pod-name>
    
    重点关注Ingress资源加载失败、后端服务连接超时类报错。

3. 验证Ingress资源的状态与配置

  • 查看Ingress资源状态:
    kubectl get ingress -n app1
    
    检查ADDRESS字段是否有值(应为工作节点IP或Ingress Controller服务地址),若为空说明Controller未识别该Ingress资源。
  • 调整Ingress Class匹配规则:
    部分新版本NGINX Ingress Controller要求用spec.ingressClassName替代annotation,可修改Ingress配置:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ingress1
      namespace: app1
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /
    spec:
      ingressClassName: nginx # 替换原ingress.class annotation
      rules:
      - host: app1.alexthedeveloper.com.br
        http:
          paths:
            - pathType: Prefix
              path: "/app1"
              backend:
                service:
                  name: svc1
                  port:
                    number: 5678
    
    应用修改:kubectl apply -f <ingress-file.yaml> -n app1

4. 检查工作节点的端口监听与防火墙

  • 登录工作节点,检查目标端口是否被监听:
    netstat -tulpn | grep -E '(:80|:30[0-9]{3})'
    
    确保有NGINX相关进程在监听对应端口。
  • 检查节点本地防火墙(Amazon Linux 2默认用firewalld):
    firewall-cmd --list-all
    
    确认80端口或NodePort端口已在public区域开放。

5. 验证流量到达与后端连通性

  • 本地验证DNS解析:
    nslookup app1.alexthedeveloper.com.br
    
    确认解析结果为工作节点的正确IP。
  • 用curl查看详细访问日志:
    curl -v http://app1.alexthedeveloper.com.br/app1
    
    根据错误信息定位问题:
    • 连接超时:检查安全组、节点防火墙或网络路由。
    • 404 Not Found:检查rewrite规则或后端服务路径。
    • 503 Service Unavailable:Ingress Controller无法连接后端服务,需排查集群内部网络。
  • 进入Ingress Controller Pod测试后端连通性:
    kubectl exec -n nginx <nginx-pod-name> -it -- /bin/sh
    curl svc1.app1.svc.cluster.local:5678
    
    若无法访问,检查Service端点是否存在:
    kubectl get endpoints -n app1 svc1
    
    确保ENDPOINTS字段显示后端Pod的IP和端口,若为空则检查Deployment的Pod标签与Service selector是否匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:33:31