Балансировщик нагрузки GKE 1 с несколькими приложениями на разных назначенных портах - PullRequest
0 голосов
/ 14 апреля 2020

Я хочу иметь возможность развертывать несколько отдельных модулей и приложений и получать к ним доступ на одном IP-адресе, опираясь на Kubernetes, чтобы назначать порты такими, какие они есть, когда вы используете службу NodePort.

Is Есть ли способ использовать NodePort с балансировщиком нагрузки?

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

Вот служба, если нам нужно что-то, на чем можно основывать ответ. В этом случае я хочу развернуть 10 этих служб, которые являются разными приложениями, на одном и том же IP-адресе, каждый из которых общедоступен на своем порте, каждый прокси-порт 80 контейнера nginx.

---
apiVersion: v1
kind: Service
metadata:
  name: foo-svc
spec:
  selector:
    app: nginx
  ports:
    - name: foo
      protocol: TCP
      port: 80
  type: NodePort

Ответы [ 2 ]

1 голос
/ 04 мая 2020

GKE, кажется, блокирует прямой доступ к узлам.

GCP позволяет создавать правила FW, которые разрешают входящий трафик c либо «Все экземпляры в сети», либо «Указано». Целевые теги / сервисная учетная запись »в вашей сети VP C.

Правила являются постоянными , если не указано иное в политиках организации.

Внешний IP-адрес узла можно проверить в Cloud Console -> Compute Engine -> VM. Экземпляры или с kubectl get nodes -o wide.

Я запускаю GKE (управляемый k8s) и могу получить доступ ко всем моим активам извне. Я открыл все необходимые порты в моей настройке. ниже приведен самый быстрый пример.

Ниже вы можете найти мои настройки:

$ kubectl get nodes -o wide 
NAME        AGE   VERSION           INTERNAL-IP   EXTERNAL-IP
gke--mnnv   43d   v1.14.10-gke.27   10.156.0.11   34.89.x.x   
gke--nw9v   43d   v1.14.10-gke.27   10.156.0.12   35.246.x.x

kubectl get svc -o wide
NAME     TYPE        CLUSTER-IP    EXTERNAL-IP  PORT(S)                         SELECTOR
knp-np   NodePort    10.0.11.113   <none>       8180:30008/TCP 8180:30009/TCP   app=server-go

$ curl 35.246.x.x:30008/test
Hello from ServerGo. You requested: /test 

Вот почему, похоже, будет достаточно связки NodePort типа Services (каждая обслуживает запросы для определенных selector)

Если по какой-то причине невозможно настроить правила FW, чтобы разрешить traffi c непосредственно для ваших узлов, можно настроить GCP TCP LoadBalancer.

Cloud Console -> Сетевые службы -> Балансировка нагрузки -> Создать LB -> Балансировка нагрузки TCP.

Там вы можете выбрать свои узлы GKE (или пул узлов) в качестве «Backend» и укажите все необходимые порты для «внешнего интерфейса». Для внешнего интерфейса вы можете зарезервировать IP-адрес Stati c прямо во время настройки и указать диапазон «Порт» в виде двух номеров портов, разделенных знаком da sh (при условии, что у вас есть несколько портов для пересылки в ваш пул узлов). Кроме того, при необходимости вы можете создать несколько «Интерфейсов».

Надеюсь, это поможет.

1 голос
/ 14 апреля 2020

Есть ли способ использовать NodePort с балансировщиком нагрузки?

Сервис типа Kubernetes LoadBalancer построен поверх NodePort. Таким образом, внутренне LoadBalancer использует NodePort, то есть при создании службы типа loadBalancer он автоматически сопоставляется с NodePort. Хотя это сложно, но возможно создать службу типа NodePort и вручную настроить балансировщик нагрузки, предоставленный Google, для указания на NodePorts.

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