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

AWS上Kops部署的K8s集群Route53访问异常及服务类型疑问

问题分析与解决方案

先梳理下你遇到的两个核心问题,以及关于服务类型的疑问,逐一解答:

1. Route53 访问2048游戏出现504网关超时

你提到通过ALB的DNS可以正常访问,但Route53绑定的域名http://2048.mysite.com返回504,结合现象来看,ALB本身是正常工作的,问题大概率出在Route53的Alias配置或者DNS解析环节,建议按以下步骤排查:

  • 确认Alias Target配置正确性:在Route53记录集里,确保你选择的Alias Target是同一个AWS区域的Application Load Balancer,并且是ALB的外部端点(不要选内部负载均衡)。检查目标ALB的ARN是否和你部署alb-ingress-controller时关联的ALB一致。
  • 验证DNS解析结果:执行dig 2048.mysite.com,对比返回的IP地址是否和ALB的DNS解析出的IP一致。如果不一致,可能是Route53记录尚未生效(TTL缓存),可以尝试刷新本地DNS缓存,或者等待TTL过期(默认通常是300秒)。
  • 检查ALB安全组与目标组:虽然ALB DNS能访问,但还是确认下ALB的安全组是否允许来自互联网的80/443流量,以及目标组的健康检查是否正常(如果目标组健康检查失败,ALB可能会返回504,但你能通过ALB访问说明这一步大概率没问题)。

2. Prometheus服务访问出现连接拒绝

从你提供的kubectl get svc结果来看,Prometheus相关服务都是ClusterIP类型,这就是问题的核心:

  • ClusterIP服务的限制:ClusterIP是Kubernetes默认的服务类型,仅能在集群内部(Pod或节点)访问,外部请求(比如你的本地机器或者互联网)无法直接连接到ClusterIP,所以会出现Connection refused错误。

解决方案:用ALB Ingress Controller暴露ClusterIP服务

你已经配置了alb-ingress-controller,这是暴露ClusterIP服务的最佳方式,不需要改成NodePort。只需要为每个Prometheus组件创建Ingress资源即可,示例如下:

暴露Prometheus Server的Ingress

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: prometheus-server-ingress
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
spec:
  rules:
  - host: server.mysite.com
    http:
      paths:
      - path: /*
        backend:
          serviceName: steely-wombat-prometheus-server
          servicePort: 80

暴露Alertmanager的Ingress

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: prometheus-alertmanager-ingress
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
spec:
  rules:
  - host: alertmanager.mysite.com
    http:
      paths:
      - path: /*
        backend:
          serviceName: steely-wombat-prometheus-alertmanager
          servicePort: 80

暴露Pushgateway的Ingress

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: prometheus-pushgateway-ingress
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
spec:
  rules:
  - host: pushgateway.mysite.com
    http:
      paths:
      - path: /*
        backend:
          serviceName: steely-wombat-prometheus-pushgateway
          servicePort: 9091

创建这些Ingress后,alb-ingress-controller会自动配置ALB的路由规则,将对应域名的请求转发到ClusterIP服务。之后记得在Route53中把server.mysite.com等域名的Alias Target指向这个ALB即可。

3. 是否必须使用NodePort类型?

完全不需要。NodePort只是Kubernetes暴露服务的一种方式,适合快速测试或简单场景,但在生产环境中,更推荐的组合是ClusterIP服务 + Ingress Controller:

  • ClusterIP服务保持内部访问,避免不必要的端口暴露,安全性更高。
  • Ingress统一管理域名、路由规则,还支持SSL终止、路径匹配等高级功能,并且可以复用同一个ALB来暴露多个服务,降低成本。
  • 如果你有特殊需求(比如需要直接通过节点IP访问),NodePort是可选的,但不是必须的。LoadBalancer类型适合需要独立负载均衡的服务,但会额外产生ALB费用,不如Ingress高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:39:46