NGINX Ingress создает NodePort, а не LoadBalancer - PullRequest
0 голосов
/ 01 августа 2020

Я новичок в этом материале контейнеризации. Я запускаю minikube на Ubuntu 18.04. Я следую за установкой из: https://kubernetes.github.io/ingress-nginx/deploy/, поэтому просто выполняю minikube addons enable ingress, когда я выполняю kubectl get services -n ingress-nginx

it shows 
NAME                                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             NodePort    10.100.216.141   <none>        80:32205/TCP,443:31915/TCP   5d2h
ingress-nginx-controller-admission   ClusterIP   10.106.58.189    <none>        443/TCP                      5d2h

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

Моя входящая конфигурация:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: 'true'
spec:
  rules:
    - host: we-creators.dev
      http:
        paths:
          - path: /api/users/?(.*)
            backend:
              serviceName: auth-srv
              servicePort: 3000
          - path: /?(.*)
            backend:
              serviceName: client-srv
              servicePort: 3000

1 Ответ

1 голос
/ 06 августа 2020

Я тестировал это с двумя последними выпусками, и что я могу видеть на данный момент, нет службы, связанной с контроллером ingress- nginx (развернутым как аддон minikube).

Пожалуйста, посмотрите на порты в рамках развертывания ingress- nginx.

Включение развертывания надстройки ingress, созданное в пространстве имен kube-system с этим spe c:

...
spec:
  containers:
  - args: 
    - --report-node-internal-ip-address
...
    ports:
    - cotainerPort: 80
      hostPort:80
      name: http
      protocol: TCP
    - cotainerPort: 443
      hostPort: 443
      name: https
      protocol: TCP
...

Похоже, что в текущей версии minikube ingress- nginx использует - hostPorts вместо nginx ingress службы nodeport. Самая важная информация - поддерживает ли ваш текущий сетевой плагин cni Port-mapping

Из официальных документов сетевой плагин CNI поддерживает hostPort

Сетевой плагин CNI поддерживает hostPort.

Вы можете проверить эти настройки внутри узла minikube:

minikube -p your_name ssh
cat /etc/cni/net.d/your_config

"type": "portmap",
        "capabilities": {"portMappings": true},

    

Ограничения такие же, как для конфигурации hostNetwork: true:

Одним из основных ограничений этого подхода к развертыванию является то, что на каждом узле кластера может быть запланирован только один NGINX Ingress-контроллер, поскольку привязка одного и того же порта несколько раз к одному и тому же сетевому интерфейсу технически невозможна

- report-node-internal-ip-address

, поскольку голые узлы обычно не имеют ExternalIP, необходимо включить параметр --report -node-internal-ip-address флаг, который устанавливает статус всех Ingress-объектов на внутренний IP-адрес всех узлов, на которых работает NGINX Ingress-контроллер.

Kubernetes ServiceTypes позволяют указать, какой вид службы вам нужен. по умолчанию - ClusterIP .

Значения типов и их поведение:

  • ClusterIP : предоставляет службу в кластере. -внутренний IP. Выбор этого значения делает Сервис доступным только изнутри кластера. Это ServiceType по умолчанию.

  • NodePort : предоставляет услугу на каждом IP-адресе узла на порту stati c (NodePort). Служба ClusterIP, к которой маршрутизируется служба NodePort, создается автоматически. Вы сможете связаться со службой NodePort извне кластера, запросив:.

  • LoadBalancer : предоставляет доступ к службе извне с помощью балансировщика нагрузки облачного провайдера. . Сервисы NodePort и ClusterIP, к которым автоматически создаются маршруты внешнего балансировщика нагрузки.

Специальное примечание для типа сервиса Loadbalancer

Когда Тип службы равен установлен на LoadBalancer , Kubernetes предоставляет функциональность, эквивалентную типу, равному ClusterIP, для модулей в кластере и расширяет его, запрограммировав (внешний по отношению к Kubernetes) балансировщик нагрузки. с записями для модулей Kubernetes. Контроллер службы Kubernetes автоматизирует создание внешнего балансировщика нагрузки, проверки работоспособности (при необходимости), правил брандмауэра (при необходимости), а также извлекает внешний IP-адрес, выделенный поставщиком облака, и помещает его в объект службы

В качестве обходного пути в вашей среде без операционной системы вы можете использовать MetalLB

MetalLB обеспечивает реализацию балансировщика сетевой нагрузки для Кластеры Kubernetes, которые не работают на поддерживаемом облачном провайдере, что позволяет эффективно использовать LoadBalancer Services в любом кластере.

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