Можно ли использовать Ingress только на Minikube? Он не работает при установке Ubuntu

Я успешно протестировал ingress в minikube, никаких проблем. Затем я развернул свое приложение в ubuntu, если я использую службу NodePort, она также работает очень хорошо. После этого я подумал использовать Ingress в качестве балансировщика нагрузки для трафика маршрутизатора, чтобы внешний URL-адрес больше не был уродливым длинным портом. Но, к сожалению, у меня не получалось, всегда терпел поражение.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
    name: dv
    annotations:
        ingress.kubernetes.io/rewrite-target: /
spec:
    rules:
    - http:
          paths:
          - path: /test
            backend:
                serviceName: ngsc
                servicePort: 3000

kubectl get ing
NAME   HOSTS   ADDRESS   PORTS   AGE
dv     *                 80      12s
root@kmaster:/home/ubuntu/datavisor# kubectl describe ing dv
Name:             dv
Namespace:        default
Address:          
Default backend:  default-http-backend:80 (<none>)
Rules:
  Host  Path  Backends
  ----  ----  --------
  *     
        /   ngsc:3000 (192.168.1.14:3000,192.168.1.17:3000,192.168.1.18:3000)
Annotations:
  ingress.kubernetes.io/rewrite-target:  /
Events:                                  <none>

Затем, когда я попытался получить доступ, я получил следующую ошибку:

curl http://cluster-ip
curl: (7) Failed to connect to <cluster-ip> port 80: Connection refused

Я действительно надеюсь, что внешний URL-адрес будет выглядеть как http://ipaddress вместо http://ipaddress:30080

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

Можете ли вы проверить вывод выше и сказать, в чем ошибка? Я проверил много документов, все места казались сосредоточенными только в minikube, ничего не связанного с реальным развертыванием кластера. Нужно ли мне что-нибудь устанавливать, чтобы ingress работал? когда я использую kubectl get all --all-namespaces, я вообще не видел установленного входящего контроллера. Как я могу его установить при необходимости?

Спасибо за ваш совет


person user3006967    schedule 28.04.2019    source источник


Ответы (1)


Что ж, на самом деле Kubernetes не предоставляет никаких контроллеров Ingress из коробки. Вам необходимо установить Nginx Ingress или Traefik Ingress или что-нибудь еще. Контроллер Ingress должен работать где-то в вашем кластере, это обязательно. Фактически контроллер входящего трафика - это фактический прокси-сервер, который передает трафик вашим приложениям.

И я думаю, вы должны знать, что minikube под капотом также использует nginx-ingress-controller (см. https://github.com/kubernetes/minikube/tree/master/deploy/addons/ingress).

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

Если вы запускаете локальный кластер, то обычно ваш входной контроллер запускается как служба NodePort, и вы можете создать запись DNS, указывающую на IP-адреса вашего узла. Также можно запустить контроллер входящего трафика на выделенных узлах и использовать hostNetwork: true. Это позволит использовать стандартные порты 80/443. Так что здесь есть много вариантов.

person Vasili Angapov    schedule 28.04.2019
comment
Спасибо за быстрый ответ. посмотрю - person user3006967; 28.04.2019
comment
DNS должен указывать на IP-адрес узла или IP-адрес LoadBlancer? Если у нас есть порт узла, действительно ли нам нужен балансировщик нагрузки? Потому что NodePort - это балансировка нагрузки между модулями в разных узлах? - person yasin lachini; 28.04.2019
comment
если мы используем порт узла и балансировщик нагрузки, у нас будет две балансировки нагрузки. Это правда? - person yasin lachini; 28.04.2019