无法访问部署在Google Cloud上的Angular应用,返回502错误求助
故障排查及修复方案
1. 首要问题:Angular容器监听地址配置错误
这是最常见的导致本地运行正常、集群内访问502的原因:
Angular CLI默认ng serve仅监听本地回环地址127.0.0.1,集群内其他组件无法访问。你需要修改Angular项目的Dockerfile启动命令,修改为:
CMD ["ng", "serve", "--host", "0.0.0.0", "--port", "4200", "--disable-host-check"]
其中--disable-host-check是为了避免Angular的域名校验拦截blog.dev的访问请求。
2. 基础资源状态排查
依次执行以下命令确认资源状态正常:
- 检查Client Pod运行状态:
若Pod未处于Running状态,执行kubectl get pods | grep clientkubectl logs <Pod名称>查看启动日志排查报错。 - 检查Client服务端点是否正常:
确认Endpoints字段有对应Client Pod的IP地址,为空则说明Deployment和Service的标签匹配错误。kubectl describe svc client-srv - 本地端口转发验证服务可用性:
从Cloud Shell预览4200端口,若能正常访问则说明服务本身无问题,故障出在Ingress链路。kubectl port-forward svc/client-srv 4200:4200
3. Ingress配置修复
你当前使用的extensions/v1beta1版本Ingress已在Kubernetes 1.19+版本中废弃,与你部署的Ingress-NGINX v1.0.3不兼容,需要替换为networking.k8s.io/v1版本的配置:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-service annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/use-regex: 'true' spec: rules: - host: blog.dev http: paths: - path: /api/users/?(.*) pathType: Prefix backend: service: name: auth-srv port: number: 3100 - path: /?(.*) pathType: Prefix backend: service: name: client-srv port: number: 4200
配置更新后执行kubectl apply -f <Ingress配置文件路径>生效,之后执行kubectl describe ingress ingress-service确认无配置报错。
4. 可选优化项
你当前Skaffold配置中的文件同步规则存在语法错误,src/**/.ts需要改为src/**/*.ts才能正确同步TypeScript代码变更,避免修改代码后镜像不更新的问题。
内容的提问来源于stack exchange,提问作者Pinakin Chaubal
相关产品推荐
相关产品推荐

