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

使用AWS Load Balancer Controller暴露应用遇404问题求助

问题:EKS中使用AWS Load Balancer Controller暴露game-2048应用返回404

我参考示例在EKS上使用AWS Load Balancer Controller通过负载均衡器暴露应用,仅在Ingress注解中添加alb.ingress.kubernetes.io/group.name后,echoserver示例可正常访问,配置如下:

apiVersion: "v1"
kind: "Namespace"
metadata:
  name: "echoserver"
---
apiVersion: "apps/v1"
kind: "Deployment"
metadata:
  name: "echoserver"
  namespace: "echoserver"
spec:
  selector:
    matchLabels:
      app: "echoserver"
  replicas: 1
  template:
    metadata:
      labels:
        app: "echoserver"
    spec:
      containers:
        - image: "k8s.gcr.io/e2e-test-images/echoserver:2.5"
          imagePullPolicy: "Always"
          name: "echoserver"
          ports:
            - containerPort: 8080
---
apiVersion: "v1"
kind: "Service"
metadata:
  name: "echoserver"
  namespace: "echoserver"
spec:
  ports:
    - port: 80
      targetPort: 8080
      protocol: "TCP"
  type: "NodePort"
  selector:
    app: "echoserver"
---
apiVersion: "networking.k8s.io/v1"
kind: "Ingress"
metadata:
  name: "echoserver"
  namespace: "echoserver"
  annotations:
    alb.ingress.kubernetes.io/subnets: "subnet-1,subnet-2,subnet-3"
    alb.ingress.kubernetes.io/tags: "Environment=dev,Team=test"
    alb.ingress.kubernetes.io/group.name: "test.apps"
    alb.ingress.kubernetes.io/scheme: "internal"
spec:
  ingressClassName: "alb"
  rules:
    - http:
        paths:
          - path: "/echoserver"
            pathType: "Prefix"
            backend:
              service:
                name: "echoserver"
                port:
                  number: 80

通过Ingress外部IP加/echoserver路径访问可获得预期输出。但部署game-2048应用时,访问Ingress的/game路径却返回404 Not Found,配置如下:

---
apiVersion: "v1"
kind: "Namespace"
metadata:
  name: "game-2048"
---
apiVersion: "apps/v1"
kind: "Deployment"
metadata:
  namespace: "game-2048"
  name: "deployment-2048"
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: "app-2048"
  replicas: 5
  template:
    metadata:
      labels:
        app.kubernetes.io/name: "app-2048"
    spec:
      containers:
        - image: "alexwhen/docker-2048"
          imagePullPolicy: "Always"
          name: "app-2048"
          ports:
            - containerPort: 80
---
apiVersion: "v1"
kind: "Service"
metadata:
  namespace: "game-2048"
  name: "service-2048"
spec:
  ports:
    - port: 80
      targetPort: 80
      protocol: "TCP"
  type: "NodePort"
  selector:
    app.kubernetes.io/name: "app-2048"
---
apiVersion: "networking.k8s.io/v1"
kind: "Ingress"
metadata:
  namespace: "game-2048"
  name: "ingress-2048"
  annotations:
    alb.ingress.kubernetes.io/subnets: "subnet-1,subnet-2,subnet-3"
    alb.ingress.kubernetes.io/tags: "Environment=dev,Team=test"
    alb.ingress.kubernetes.io/group.name: "test.apps"
    alb.ingress.kubernetes.io/scheme: "internal"
spec:
  ingressClassName: "alb"
  rules:
    - http:
        paths:
          - path: "/game"
            pathType: "Prefix"
            backend:
              service:
                name: "service-2048"
                port:
                  number: 80

请问我遗漏了什么配置?


解决方案

问题出在路径转发逻辑上:game-2048的Web服务默认仅响应**根路径(/)**的请求,而你的Ingress配置了/game前缀,ALB会直接把/game开头的请求原样转发给后端服务,但应用本身没有/game对应的路由,所以返回404。而echoserver之所以正常,是因为它支持任意路径的请求,会返回请求的详细信息,不受路径前缀影响。

你需要在game-2048的Ingress注解中添加路径重写配置,让ALB在转发请求时去掉/game前缀,将请求路径改为根路径,添加的注解如下:

alb.ingress.kubernetes.io/rewrite-target: /

修改后的完整Ingress配置如下:

apiVersion: "networking.k8s.io/v1"
kind: "Ingress"
metadata:
  namespace: "game-2048"
  name: "ingress-2048"
  annotations:
    alb.ingress.kubernetes.io/subnets: "subnet-1,subnet-2,subnet-3"
    alb.ingress.kubernetes.io/tags: "Environment=dev,Team=test"
    alb.ingress.kubernetes.io/group.name: "test.apps"
    alb.ingress.kubernetes.io/scheme: "internal"
    alb.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: "alb"
  rules:
    - http:
        paths:
          - path: "/game"
            pathType: "Prefix"
            backend:
              service:
                name: "service-2048"
                port:
                  number: 80

更新配置后,ALB会将/game开头的请求重写为根路径转发给game-2048服务,就能正常访问了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:37:04