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

部署在EC2 Ubuntu实例MicroK8s中的Web应用无法通过浏览器访问求助

排查步骤与解决方案

1. 确认访问地址正确性

确保浏览器访问时使用的是EC2实例的公网IP/弹性IP,而非私有IP。私有IP仅能在VPC内部访问,外部浏览器无法直接连通。

2. 检查VPC网络ACL配置

安全组允许流量后,需确认VPC的网络ACL(入站/出站规则):

  • 入站规则:添加允许0.0.0.0/0访问目标NodePort(或LoadBalancer端口)的TCP规则
  • 出站规则:添加允许所有TCP流量(或至少允许对应端口的返回流量)的规则
    网络ACL是VPC层面的防火墙,默认可能拦截非默认端口的流量。

3. 验证MicroK8s网络组件状态

  • 检查网络插件(Calico/Flannel)是否正常运行:
    microk8s kubectl get pods -n kube-system
    
    确保所有网络相关Pod处于Running状态,无重启或异常。
  • 确认服务端口映射:
    microk8s kubectl get svc
    
    核对服务的PORT(S)列,确认NodePort与安全组开放的端口一致;若使用LoadBalancer,需确保EXTERNAL-IP已分配(非<pending>状态)。
  • 检查节点iptables转发规则:
    sudo iptables-save | grep <你的NodePort>
    
    确认存在指向对应服务的DNAT规则,若缺失需重启MicroK8s网络组件:microk8s stop && microk8s start。

4. 检查EC2本地防火墙(UFW)

Ubuntu实例默认可能启用UFW,即使安全组放行,本地防火墙仍会拦截流量:

  • 查看UFW状态:
    sudo ufw status
    
  • 若未允许目标端口,添加规则:
    sudo ufw allow <你的NodePort>/tcp
    
    或直接关闭UFW(生产环境按需选择):sudo ufw disable。

5. 确认应用监听地址

确保Pod内的Web应用监听的是0.0.0.0而非127.0.0.1:

  • 进入Pod执行:
    microk8s kubectl exec -it <你的Pod名称> -- netstat -tulpn
    
    若应用仅监听127.0.0.1,则仅能在Pod内部访问,需修改应用配置改为监听0.0.0.0。

6. LoadBalancer服务额外检查

若使用LoadBalancer类型服务:

  • 确认已启用MetalLB插件:microk8s enable metallb
  • 配置MetalLB IP池(需为EC2所在子网的可用私有IP或弹性IP):
    microk8s kubectl apply -f - <<EOF
    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      name: default
      namespace: metallb-system
    spec:
      addresses:
      - <可用IP范围,如10.0.0.100-10.0.0.200>
    EOF
    
    配置完成后再次查看服务的EXTERNAL-IP,确认已分配有效IP后再尝试访问。

7. 抓包定位流量问题

在EC2实例上执行抓包命令,验证浏览器请求是否到达实例:

sudo tcpdump -i any port <你的NodePort>
  • 若未捕获到请求包:问题出在VPC路由、安全组或网络ACL
  • 若捕获到请求但无响应:问题出在MicroK8s服务转发或应用本身

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 14:41:17