You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows环境下无法访问Minikube暴露的Kubernetes服务求助

排查Minikube中Angular应用Service无法访问的问题

我来帮你一步步定位这个问题,从你的配置来看,Pod、Deployment和Service的基础配置都是正常的(Endpoints已经正确关联了Pod IP),但浏览器访问超时说明链路里某个环节不通,咱们从内到外逐一排查:

1. 先确认容器内的Angular服务是否真的正常运行

Pod的Ready状态只代表容器启动了,但不代表ng serve服务已经成功监听端口。你可以:

  • 进入任意一个Pod内部:
    kubectl exec -it assistenza-fo-674f85c547-bzf8g -- /bin/bash
    
  • 在容器内测试本地访问:
    curl localhost:4200
    
    如果返回Angular的页面内容,说明服务正常;如果失败,查看Pod日志确认启动情况:
    kubectl logs assistenza-fo-674f85c547-bzf8g
    
    重点看是否有类似Angular Live Development Server is listening on 0.0.0.0:4200的提示,如果没有,可能是依赖安装失败、项目编译出错,或者ng serve启动超时。

2. 验证集群内部Service到Pod的转发是否正常

用集群内的临时Pod测试Service的可用性:

kubectl run -it --rm busybox --image=busybox:1.28 --restart=Never -- wget -O- http://assistenza-fo.default.svc.cluster.local:4200

如果能返回页面内容,说明Service和Pod的链路是通的;如果失败,虽然你的Selector和Pod Labels匹配、Endpoints也正常,但可以再用kubectl describe pod <pod-name>确认Pod端口配置是否正确。

3. 检查Minikube节点内部能否访问NodePort

进入Minikube节点测试:

minikube ssh

然后在节点内访问NodePort:

curl http://localhost:30375  # 或者你后来的30649端口

如果这里超时,说明NodePort没有正确映射到Service;如果能访问,问题就出在本地机器到Minikube节点的网络上。

4. 解决本地机器到Minikube节点的网络问题

如果Minikube内部能访问,但本地浏览器不行:

  • 确认Minikube的IP正确:执行minikube ip,确保和你看到的172.17.0.2一致
  • 尝试启动minikube tunnel(虽然你用的是NodePort,但部分环境下需要这个命令打通本地到集群的网络),然后再访问URL
  • 检查本地防火墙是否拦截了30375/30649端口,临时关闭防火墙测试
  • 如果是VirtualBox驱动的Minikube,确认虚拟机的网络模式是NAT或桥接,端口转发规则是否正常

额外的优化建议

开发模式的ng serve在容器中运行效率较低,而且不适合K8s环境。建议构建Angular生产版本,用Nginx托管静态文件,修改Dockerfile如下:

# 构建阶段
FROM registry.gitlab.informatica.aci.it/ccsc/images/nodejs/10_15 as builder
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm ci
COPY . .
RUN ng build --prod  # 构建生产版本

# 运行阶段
FROM nginx:alpine
COPY --from=builder /usr/src/app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

然后修改Service的TargetPort为80,这样服务更稳定,也符合容器化最佳实践。

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

火山引擎 最新活动