AWS EKS 服务入口和 ALB --no ADDRESS

AWS EKS service ingress and ALB --no ADDRESS

我的端口在这个清单上的设置方式似乎有问题,这是一个简单的 go 应用程序。该应用程序配置为侦听端口 3000。 这个容器 运行 在我的本地机器上很好(localhost:3000),但是当我查看 Ingress 时我没有得到地址(k get ingress ...)。 当我尝试在 EKS 上 运行 此图像时,AWS aws-load-balancer-controller 日志中记录了一个错误:

controller-runtime.manager.controller.ingress","msg":"Reconciler error","name":"fiber-demo","namespace":"demo","error":"ingress: demo/fiber-demo: unable to find port 3000 on service demo/fiber-demo"

这是我的 k8s 清单:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: fiber-demo
  namespace: demo
  labels:
    app: fiber-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: fiber-demo
  template:
    metadata:
      labels:
        app: fiber-demo
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: kubernetes.io/arch
                    operator: In
                    values:
                      - amd64
                      - arm64
      containers:
        - name: fiber-demo
          image: 240195868935.dkr.ecr.us-east-2.amazonaws.com/fiber-demo:0.0.2
          resources:
            requests:
              memory: "64Mi"
              cpu: "250m"
            limits:
              memory: "128Mi"
              cpu: "500m"
          ports:
            - containerPort: 3000

---
apiVersion: v1
kind: Service
metadata:
  name: fiber-demo
  namespace: demo
  labels:
    app: fiber-demo
spec:
  selector:
    app: fiber-demo
  ports:
  - protocol: TCP
    port: 80
    targetPort: 3000

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: fiber-demo
  namespace: demo
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing

  labels:
    app: fiber-demo
spec:
  rules:
    - http:
        paths:
          - path: /
            backend:
              serviceName: fiber-demo
              servicePort: 3000

难道我无法在服务中指定端口 80 以外的目标端口吗?

Am I simply not able to specify a targetPort other than port 80 in the Service?

backend.servicePort指的是服务暴露的端口,不是容器

...
backend:
  serviceName: fiber-demo  # <-- ingress for this service, not container
  servicePort: 80          # <-- port which the service exposed, not the port which the container exposed.