Контроллер входа Nubx Kubernetes на NodePort - PullRequest
0 голосов
/ 26 октября 2019

Я развернул входной контроллер на основе nginx в кластере Kubernetes, управляемом RKE. (Я также попробовал то же самое напрямую без RKE).

В обоих случаях он пытается использовать / bind to Ports 80 и 443 на хосте, и это не удается, потому что в модуле security policy для всех служебных учетных записей я не разрешаю порты хоста.

На самом деле мне не нужно получать доступ непосредственно к входам на хостах, но я хочу получить доступ к ingress controller как Service наNodePort от внешнего LoadBalancer.

Есть ли способ развернуть Nginx ingress controller, чтобы не использовать хост hostPort.

1 Ответ

0 голосов
/ 06 ноября 2019

В документации о NodePort вы можете обнаружить, что этот тип может выделять порты из диапазона 30000-32767. Однако есть обходной путь. Если вы добавите специальный флаг --service-node-port-range с запрошенным диапазоном, контроллер доступа позволит вам создать NodePort с портами 80 и 443.

Вам нужно будет перейти к /etc/kubernetes/manifests/, отредактировать kube-apiserver.yaml с помощью sudo идобавить запись - --service-node-port-range=1-32767. После этого вам нужно сохранить его.

Теперь вам нужно будет создать service. Для этого вам нужно отредактировать этот yaml и в портах добавить node port к spec.ports

До:

 ports:
    - name: http
      port: 80
      targetPort: 80
      protocol: TCP
    - name: https
      port: 443
      targetPort: 443
      protocol: TCP

После:

  ports:
  - name: http
    nodePort: 80
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    nodePort: 443
    port: 443
    protocol: TCP
    targetPort: 443

После этих изменений вы можете снова отредактировать kube-apiserver.yaml в / etc / kubernetes / manifest / и прокомментировать его, используя # в том же самомстрока как - --service-node-port-range.

Тогда вы сможете свернуть этот NodePort адрес и Node адрес.

РЕДАКТИРОВАТЬ: После уточнения

Вход может быть развернут двумя способами. Первый - это развертывание Nginx как Deamonset , для которого требуется hostPort внутри файла конфигурации. Однако есть и другой вариант, вы можете развернуть Nginx как Deployment.

NodeIP и известный порт: блоки в DaemonSet могут использовать hostPort, так что блоки доступны через IP-адреса узла,Клиенты каким-то образом знают список IP-адресов узлов и знают порт.

Однако в нижней части страницы вы можете найти:

DaemonSets похожи на Deploymentsв том смысле, что они оба создают модули, и в этих модулях есть процессы, которые не должны завершаться (например, веб-серверы, серверы хранения).

Использование развертывания для служб без сохранения состояния, таких как веб-интерфейсы, где увеличение или уменьшение числареплик и развертывание обновлений важнее, чем контроль, на каком именно хосте работает Pod. Используйте DaemonSet, когда важно, чтобы копия модуля всегда выполнялась на всех или определенных хостах, а также когда он должен запускаться раньше других модулей.

Вам необходимо развернуть Ingress как Deployment и не как Deamonset.

Пример развертывания Nginx можно найти здесь . Поскольку для развертывания не требуется hostPort, вы сможете создавать модули без этого параметра.

...