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

如何从部署虚拟机外部访问K8s集群应用?Ingress/NodePort访问失败求解

解决方案

1. 修复Ingress配置的语法错误

你的Ingress YAML存在缩进错误,name字段必须嵌套在service层级下,Kubernetes无法解析原配置。修正后的完整配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
   - http:
       paths:
       - path: /testpath
         pathType: Prefix
         backend:
           service:
             name: market
             port:
               number: 8080

2. 验证核心依赖

  • 确认market Service已正确创建:
    • Service的selector必须匹配Pod的标签(比如app: market)
    • Service的targetPort要和Pod实际监听的端口一致(需对应Ingress中指定的8080)
  • 确认集群已部署NGINX Ingress Controller:
    执行以下命令检查Ingress Controller Pod状态:
    kubectl get pods -n ingress-nginx
    
    如果没有部署,通过Kubernetes官方提供的NGINX Ingress Controller静态部署清单完成安装,执行对应版本的部署命令即可。

3. 排查连通性

  • 检查Ingress资源状态,确认已分配访问地址:
    kubectl get ingress test-ingress
    
    输出的ADDRESS字段应为Ingress Controller的公网IP或绑定的域名
  • 测试Service到Pod的连通性:
    在集群内任意运行的Pod中执行:
    curl market:8080
    
    若返回应用响应,说明Service与Pod的链路正常

4. NodePort方式的快速验证

如果想改用NodePort直接访问:

  • 将market Service修改为NodePort类型:
    apiVersion: v1
    kind: Service
    metadata:
      name: market
    spec:
      type: NodePort
      selector:
        app: market # 替换为你的Pod标签
      ports:
        - port: 8080
          targetPort: 8080
          nodePort: 30000 # 可选,端口范围需在30000-32767之间
    
  • 确保集群节点的公网IP开放了对应的NodePort端口(防火墙/安全组需放行)
  • 访问路径:<节点公网IP>:<NodePort>/testpath

5. 最终访问方式

  • Ingress方式:修复配置并确认Ingress Controller正常后,访问 <Ingress公网IP>/testpath(若绑定域名,需将域名解析到Ingress的ADDRESS)
  • NodePort方式:直接访问 <节点公网IP>:<NodePort>/testpath

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 05:07:37