Kubernetes: обработка соединений с несколькими LoadBalancer в кластере через контроллер входящего трафика traefik.

Это может быть трудно объяснить, так что извините, если я не могу объяснить правильно.

В нашем кластере k8s у нас есть два OpenStack-Load Balancer, потому что мы хотели бы предоставить доступ к нашему приложению через входящий трафик, который должен быть подключен к Интернету. В том же кластере мы также развернули pgadmin4, который должен быть обращен к интрасети (доступен только из внутренней сети).

Итак, перед этим OpenStack-LB у нас также есть балансировщик нагрузки f5, который обрабатывает https-соединение, ssl .., а также логику для предоставления через интрасеть или Интернет.

MyApp подключен к Интернету и должен быть доступен с host.internet.net

PgAdmin4 - это интрасеть, и доступ к ней должен осуществляться через host.intranet.net/pgadmin4.

Итак, проблема в том, что когда я пытаюсь открыть свое приложение через вход с помощью host.internet.net, оно не работает, и я получил ошибку ниже, вероятно, он не может связаться с правильным openStack-LB. Когда я пытался открыть через IP-адрес openStack-lb, все работает нормально.

{"level": "error", "msg": "Service not found for dev / oneapihub-ui-dev", "time": "2020-03-26T05: 20: 05Z"} {"level": "error "," msg ":" конечные точки не найдены для dev / oneapihub-ui-dev "," time ":" 2020-03-26T05: 20: 05Z "}

И вопрос в том, как я могу решить эту проблему с помощью контроллера входящего трафика? Должен ли я установить еще один входной контроллер traefik?

capel0068340585:~ semural$ kubectl get ingress -n ingress
NAME                        HOSTS   ADDRESS   PORTS   AGE
ingress-traefik-dashboard   *                 80      21d

kubectl get tenantSpec -o yaml

    loadBalancers:
    - ip: <IP1>
      name: LBaaS2
      ports:
      - extPort: 80
        name: "80"
        nodePort: 30001
    - ip: <IP2>
      name: LBaaS1
      ports:
      - extPort: 80
        name: "80"
        nodePort: 30000

NAME                      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/oneapihub-ui-dev        ClusterIP   10.254.173.130   <none>        80/TCP     15m

NAME                        ENDPOINTS           AGE
endpoints/oneapihub-ui-dev        10.6.24.136:3000    15m

ingress:
  enabled: true
  annotations:
    kubernetes.io/ingress.class: traefik
  hosts:
    - host:  host.internet.net -> example
      paths: [/]
  tls: []

ingress:
  enabled: ingress
  annotations: 
    kubernetes.io/ingress.class: traefik
  hosts:
    - host: host.intranet.net
      paths:
      - /pgadmin4

person semural    schedule 26.03.2020    source источник


Ответы (2)


Вы сообщаете об ошибке "Service not found for dev/oneapihub-ui-dev", что означает, что traefik пытается подключиться к службе в пространстве имен dev под названием oneapihub-ui-dev, которую он не может найти.

Вам необходимо убедиться, что Сервис существует и имеет конечные точки. Вы можете проверить, существует ли Сервис с помощью kubectl -n dev get service oneapihub-ui-dev. Если он существует, проверьте, есть ли у него конечные точки с kubectl -n dev get ep oneapihub-ui-dev.

РЕДАКТИРОВАТЬ: Если служба существует и имеет конечные точки, вы можете изучить разрешения RBAC для traefik, чтобы узнать, достаточно ли у него разрешений для просмотра в пространстве имен dev, и если вы не развертываете какие-либо NetworkPolicies в пространстве имен dev, которые предотвращают входящее пространство имен от подключения.

person Tim Stoop    schedule 26.03.2020

Я решил эту проблему, используя labelSelector для traefik. Службы, которые я предоставляю только для внутренней сети, имеют метку, такую ​​как traffic-type = internal .. Вы также можете предоставить пространство имен для разрешений RBAC.

kubernetes:
  namespaces:
   - default
   - database
   - monitoring
   - logging
   - ingress
  labelSelector: "traffic-type=internal"
person semural    schedule 19.05.2020