Kubernetes ALB Ingress: как открыть несколько портов на входящем ресурсе

Я пытаюсь найти решение проблемы, которая кажется очень распространенной.

  1. У меня есть служба ip кластера k8s, которая предоставляет два порта: 8088 и 60004
  2. Я хотел бы выставить эти же порты на ALB и не использовать маршрутизацию на основе пути

Это работает для предоставления одной службы на порт 8088:

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myingress
  namespace: myns
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/healthcheck-path: /ping
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/tags: Environment=dev,Team=test
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 8088}]'
spec:
  rules:
    - host: myhost
      http:
        paths:
          - path: /*
            backend:
              serviceName: firstservice
              servicePort: 8088

Как можно добиться того же для обоих сервисов, используя ОДИН вход?

Заранее спасибо.


person Bakir Jusufbegovic    schedule 23.09.2019    source источник
comment
вы будете использовать другой хост для второй службы?   -  person Spazzy757    schedule 26.09.2019
comment
Нет, хозяин такой же.   -  person Bakir Jusufbegovic    schedule 10.10.2019
comment
вы пойдете другим путем? Я не понимаю, вы просто пытаетесь установить балансировку нагрузки между двумя портами на модуле? Это разные услуги   -  person Spazzy757    schedule 11.10.2019
comment
Я просто пытаюсь открыть 2 порта из одной службы / модуля через вход на ALB.   -  person Bakir Jusufbegovic    schedule 15.10.2019


Ответы (2)


В конце концов, чтобы решить эту проблему, я использовал функцию группы входных контроллеров ALB, которая сейчас находится в альфа-состоянии: https://github.com/kubernetes-sigs/aws-alb-ingress-controller/issues/914

Вот так сейчас выглядит мой входной ресурс:

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myingress_1
  namespace: myns
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/tags: Environment=dev,Team=test
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/group.name: mygroup
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 8088}]'
spec:
  rules:
    - host: <HOST>
      http:
        paths:
          - path: /*
            backend:
              serviceName: myservice
              servicePort: 8088
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myingress_2
  namespace: myns
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/tags: Environment=dev,Team=test
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/group.name: mygroup
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 60004}]'
spec:
  rules:
    - host: <HOST>
      http:
        paths:
          - path: /*
            backend:
              serviceName: myservice
              servicePort: 60004

где главное

alb.ingress.kubernetes.io/group.name: mygroup

который соединяет эти два входных ресурса.

Таким образом, я получаю следующее:

  • Сервис с несколькими (двумя) портами в k8s открыт с двумя отдельными входными ресурсами, но оба они указывают на один и тот же AWS ALB (из-за того же имени группы)
  • На стороне AWS ALB я получаю один ALB с двумя открытыми портами: 8088 и 60004, и каждый из них указывает на одну и ту же службу k8s, но на другой порт в одном модуле (это могут быть две разные службы k8s, если это необходимо)
person Bakir Jusufbegovic    schedule 14.10.2019

Я пробовал этот, у меня работает;

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: "ingress"
  namespace: "env"
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/certificate-arn: xxxxxx
    alb.ingress.kubernetes.io/ssl-policy: ELBSecurityPolicy-TLS-1-1-2017-01
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP":80},{"HTTP":443}]'
    alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}'
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: ssl-redirect
          servicePort: use-annotation
  - host: 123.example.com
    http:
      paths:
      - backend:
          serviceName: 1-server-tg
          servicePort: 80
  - host: 234.example.com
    http:
      paths:
      - backend:
          serviceName: 2-server-tg
          servicePort: 80
person Mohamed Jawad    schedule 04.02.2021