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

通过ClusterIP/NodePort无法访问EKS中运行的valhalla-server

排查AWS EKS中Valhalla Server NodePort Service无法外部访问的问题

环境与配置信息

Pod配置

apiVersion: v1
kind: Pod
metadata:
  name: valahalla-pod
  labels:
    app: valahalla-app-pod  # Updated label name
spec:
  containers:
  - name: docker-valahalla
    image: ghcr.io/gis-ops/docker-valhalla/valhalla
    env:
      - name: tile_urls
        value: "https://download.geofabrik.de/europe/andorra-latest.osm.pbf ghcr.io/gis-ops/docker-valhalla/valhalla:latest"
    ports:
    - containerPort: 8002
    volumeMounts:
    - name: my-local-folder
      mountPath: /custom_files
  volumes:
  - name: my-local-folder
    hostPath:
      path: /home/ubuntu/custom_files

NodePort Service配置

apiVersion: v1
kind: Service
metadata:
  name: valahalla-service
spec:
  selector:
    app: valahalla-app-pod 
  ports:
    - protocol: TCP
      port: 80  # Port exposed by the service
      targetPort: 8002 
  type: NodePort

排查步骤

  • 验证标签匹配与Service端点
    执行以下命令检查Service是否正确关联到Pod:

    kubectl describe service valahalla-service
    

    查看输出中的Endpoints字段,如果显示<none>,说明Service的selector与Pod的labels不匹配。再用以下命令确认Pod的标签:

    kubectl get pods --show-labels
    

    确保Pod的app标签值和Service的selector完全一致。

  • 确认NodePort实际暴露端口
    执行命令获取Service的NodePort:

    kubectl get service valahalla-service
    

    输出中NODE_PORT列的端口(通常是30000-32767范围内的数值)才是外部访问的端口,外部访问地址应为EKS节点公网IP:NODE_PORT,而非Service的port:80。

  • 检查EKS节点安全组
    AWS EKS节点的安全组需要开放NodePort范围(默认30000-32767)的TCP入站流量,来源设置为你的外部IP或测试用的0.0.0.0/0。同时确认Pod所在节点拥有弹性公网IP,或通过NAT网关/负载均衡能接收外部流量。

  • 验证集群内部连通性
    在集群内任意节点或Pod中,测试是否能访问Pod的服务:

    # 先获取Pod IP
    POD_IP=$(kubectl get pod valahalla-pod -o jsonpath='{.status.podIP}')
    curl $POD_IP:8002
    

    再进入Pod内部检查端口监听状态:

    kubectl exec -it valahalla-pod -- netstat -tulpn | grep 8002
    

    确认服务正常监听8002端口。

  • 排查网络策略与VPC配置
    如果集群启用了网络策略(如Calico),检查是否有策略阻止了外部流量到Service。同时确认节点所在子网的路由表包含正确的路由规则,确保外部流量能到达节点。

  • 临时替换hostPath存储测试
    当前Pod使用hostPath卷,依赖节点本地目录,可能导致调度或服务异常。可临时替换为emptyDir卷测试:

    volumes:
    - name: my-local-folder
      emptyDir: {}
    

    重建Pod后再次尝试外部访问,排除存储相关问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 05:17:16