gke nginx ingress создать дополнительный балансировщик нагрузки - PullRequest
0 голосов
/ 26 января 2019

У меня есть набор служб, которые я хочу использовать в качестве балансировщика входной нагрузки.Я выбираю nginx для входа, потому что он может перенаправлять http на https.

Имея конфигурацию входа, такую ​​как

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: api-https
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: true
    nginx.ingress.kubernetes.io/force-ssl-redirect: true
    nginx.org/ssl-services: "api,spa"
    kubernetes.io/ingress.class: nginx
spec:
  tls:
    - hosts:
        - api.some.com
        - www.some.com
      secretName: secret
  rules:
    - host: api.some.com
      http:
        paths:
          - path: /
            backend:
              serviceName: api
              servicePort: 8080
    - host: www.some.com
      http:
        paths:
          - path: /
            backend:
              serviceName: spa
              servicePort: 8081

gke создает балансировщик нагрузки на входе nginx, но также и другой балансировщик нагрузки.с backends и всем таким, как если бы не был выбран nginx, но gcp как вход.

ниже скриншот показывает красным два неожиданных LB и синим два входа nginx LB один для наших qa и prod env соответственно.

gcplb

вывод от kubectl get services

xyz@cloudshell:~ (xyz)$ kubectl get services
NAME                            TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)                         AGE
api                             NodePort       1.2.3.4         <none>           8080:32332/TCP,4433:31866/TCP   10d
nginx-ingress-controller        LoadBalancer   1.2.6.9         12.13.14.15      80:32321/TCP,443:32514/TCP      2d
nginx-ingress-default-backend   ClusterIP      1.2.7.10        <none>           80/TCP                          2d
spa                             NodePort       1.2.8.11        <none>           8082:31847/TCP,4435:31116/TCP   6d

снимок экрана с gcp gke services просмотр входа с неверной информацией

ingress

Ожидается ли это?

Я пропустил какую-либо конфигурацию, чтобы предотвратить создание этого дополнительного балансировщика нагрузки?

Ответы [ 2 ]

0 голосов
/ 28 января 2019

На GCP GKE входной контроллер gcp включен по умолчанию и всегда будет приводить к новому LB в любом входном определении, даже если указан .class.

https://github.com/kubernetes/ingress-nginx/issues/3703

Таким образом, чтобы исправить это, мы должны удалить входной контроллер gcp из кластера, как указано в https://github.com/kubernetes/ingress-gce/blob/master/docs/faq/gce.md#how-do-i-disable-the-gce-ingress-controller

0 голосов
/ 28 января 2019

Когда вы создаете развертывание в кластере GKE, у вас есть две возможности его выставить:

  1. Используйте Сервис с типом LoadBalancer и выставьте его - это будет создать балансировщик нагрузки TCP
  2. Создание службы в качестве NodePort или кластера IP и выставьте его как Ingress - это создаст балансировщик нагрузки HTTP

Если вы видите их обоих в балансировщиках нагрузки, это означает, что вы, вероятно, создали тип службы LoadBalancer, а затем выставили его как Ingress. Вы открываете одно и то же развертывание для доступа с двух разных IP-адресов, по сервису и по входу. Чтобы подтвердить это, попробуйте:

$ kubectl get ingress
$ kubectl get svc

Вы получите 2 ips от этих 2 команд, и они обе покажут вам одну и ту же страницу.

Лучший способ настроить его - это иметь тип службы NodePort и представлять эту службу как входную. Это особенно полезно, потому что вы можете использовать один и тот же вход для предоставления большего количества услуг.

Таким образом, вы экономите количество выставленных IP-адресов (и экономите деньги, не используя несколько балансировщиков нагрузки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...