AWS EKS Fargate Ingress не имеет адреса - PullRequest
1 голос
/ 17 марта 2020

Обновлено

Итак, я следовал AWS документам о том, как настроить кластер EKS с Fargate с помощью инструмента eksctl, Все прошло гладко, но когда я добираюсь до части, где я развертываю свое реальное приложение, у меня нет конечных точек, и у входного контроллера нет адреса, связанного с ним. Как видно здесь:

NAME                     HOSTS   ADDRESS   PORTS   AGE
testapp-ingress           *                 80      129m

Итак, я не могу ударить его извне. Но у тестового приложения (2048 игра) был адрес от эльба, связанный с входом. Я подумал, что это могут быть теги su bnet, как было предложено здесь , и мои подсети были помечены неправильно, поэтому я отметил их так, как это было предложено в этой статье. Все еще не повезло.

Это первоначальная статья, которой я следовал, чтобы настроить. Я выполнил все шаги и только ударил стену с помощью альб: https://docs.aws.amazon.com/eks/latest/userguide/fargate-getting-started.html#fargate -gs-next-steps

Это статья про альб, за которой я следовал: https://docs.aws.amazon.com/eks/latest/userguide/alb-ingress.html

Я выполнил шаги по развертыванию примера приложения 2048, и это прекрасно работает. Я сделал мои конфиги очень похожими, и это должно работать. Я выполнил все шаги. Вот мои старые конфиги, новая конфигурация ниже:

deployment yaml>>>
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: "testapp-deployment"
  namespace: "testapp-qa"
spec:
  selector:
    matchLabels:
      app: "testapp"
  replicas: 5
  template:
    metadata:
      labels:
        app: "testapp"
    spec:
      containers:
      - image: xxxxxxxxxxxxxxxxxxxxxxxxtestapp:latest
        imagePullPolicy: Always
        name: "testapp"
        ports:
        - containerPort: 80
---
service yaml>>>
apiVersion: v1
kind: Service
metadata:
  name: "testapp-service"
  namespace: "testapp-qa"
spec:
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
      name: http
  type: NodePort
  selector:
    app: "testapp"
---
ingress yaml >>>
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: "testapp-ingress"
  namespace: "testapp-qa"
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
  labels:
    app: testapp-ingress
spec:
  rules:
    - http:
        paths:
          - path: /*
            backend:
              serviceName: "testapp-service"
              servicePort: 80
---
namespace yaml>>>
apiVersion: v1
kind: Namespace
metadata:
  name: "testapp-qa"

Вот некоторые из журналов входного контроллера >>

E0316 22:32:39.776535       1 controller.go:217] kubebuilder/controller "msg"="Reconciler error" "error"="failed to reconcile targetGroups due to failed to reconcile targetGroup targets due to Unable to DescribeInstanceStatus on fargate-ip-xxxxxxxxxxxx.ec2.internal: InvalidInstanceID.Malformed: Invalid id: \"fargate-ip-xxxxxxxxxxxx.ec2.internal\"\n\tstatus code: 400, request id: xxxxxxxxxxxx"  "controller"="alb-ingress-controller" "request"={"Namespace":"testapp-qa","Name":"testapp-ingress"}
E0316 22:36:28.222391       1 controller.go:217] kubebuilder/controller "msg"="Reconciler error" "error"="failed to reconcile targetGroups due to failed to reconcile targetGroup targets due to Unable to DescribeInstanceStatus on fargate-ip-xxxxxxxxxxxx.ec2.internal: InvalidInstanceID.Malformed: Invalid id: \"fargate-ip-xxxxxxxxxxxx.ec2.internal\"\n\tstatus code: 400, request id: xxxxxxxxxxxx"  "controller"="alb-ingress-controller" "request"={"Namespace":"testapp-qa","Name":"testapp-ingress"}

Per предложение в комментариях @Michael Hausenblas, я добавил аннотацию к своему сервису для входа в alb.

Теперь, когда мой входной контроллер использует правильный ELB, я проверил журналы, потому что я все еще не могу нажать /healthcheck моего приложения. Журналы:

E0317 16:00:45.643937       1 controller.go:217] kubebuilder/controller "msg"="Reconciler error" "error"="failed to reconcile targetGroups due to failed to reconcile targetGroup targets due to Unable to DescribeInstanceStatus on fargate-ip-xxxxxxxxxxx.ec2.internal: InvalidInstanceID.Malformed: Invalid id: \"fargate-ip-xxxxxxxxxxx.ec2.internal\"\n\tstatus code: 400, request id: xxxxxxxxxxx-3a7d-4794-95fb-a18835abe0d3"  "controller"="alb-ingress-controller" "request"={"Namespace":"testapp-qa","Name":"testapp"}
I0317 16:00:47.868939       1 rules.go:82] testapp-qa/testapp-ingress: modifying rule 1 on arn:aws:elasticloadbalancing:us-east-1:xxxxxxxxxxx:listener/app/xxxxxxxxxxx-testappqa-testappin-b879/xxxxxxxxxxx/6b41c0d3ce97ae6b
I0317 16:00:47.890674       1 rules.go:98] testapp-qa/testapp-ingress: rule 1 modified with conditions [{    Field: "path-pattern",    Values: ["/*"]  }]

Обновление

Я обновил мой конфиг. У меня больше нет ошибок, но я все еще не могу поразить мои конечные точки, чтобы проверить, принимает ли мое приложение traffi c. Это может быть как-то связано с фаргейтом или со стороны AWS, которую я не вижу. Вот мой обновленный конфиг:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: "testapp"
  namespace: "testapp-qa"
spec:
  selector:
    matchLabels:
      app: "testapp"
  replicas: 5
  template:
    metadata:
      labels:
        app: "testapp"
    spec:
      containers:
      - image: 673312057223.dkr.ecr.us-east-1.amazonaws.com/wood-testapp:latest
        imagePullPolicy: Always
        name: "testapp"
        ports:
        - containerPort: 9898
---
apiVersion: v1
kind: Service
metadata:
  name: "testapp"
  namespace: "testapp-qa"
  annotations: 
    alb.ingress.kubernetes.io/target-type: ip
spec:
  ports:
    - port: 80
      targetPort: 9898
      protocol: TCP
      name: http
  type: NodePort
  selector:
    app: "testapp"
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: "testapp-ingress"
  namespace: "testapp-qa"
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/healthcheck-path: /healthcheck
  labels:
    app: testapp
spec:
  rules:
    - http:
        paths:
          - path: /*
            backend:
              serviceName: "testapp"
              servicePort: 80
---
apiVersion: v1
kind: Namespace
metadata:
  name: "testapp-qa"

1 Ответ

1 голос
/ 17 марта 2020

В вашем сервисе попробуйте добавить следующую аннотацию:

  annotations:
    alb.ingress.kubernetes.io/target-type: ip

А также вам необходимо явно сообщить ресурсу Ingress через аннотацию alb.ingress.kubernetes.io/healthcheck-path, где / как выполнять проверки работоспособности для целевая группа. См. Входной контроллер ALB docs для семантики аннотаций.

...