Kubernetes при использовании Gitlab при установке Ingress возвращает "?"как внешний IP - PullRequest
0 голосов
/ 19 ноября 2018

Я успешно соединил свой кластер Kubernetes с Gitlab. Также я смог установить Helm через пользовательский интерфейс Gitlab (Операции-> Кубернетес) Моя проблема в том, что если я нажму кнопку «Установить» Ingress, Gitlab создаст все ненужные вещи, необходимые для Ingress-Controller. Но будет упущено одно: внешний IP. Внешний IP помечается как «?».

И если я выполню эту команду:

kubectl get svc --namespace=gitlab-managed-apps ingress-nginx-ingress- controller -o jsonpath='{.status.loadBalancer.ingress[0].ip}'; echo

Это ничего не покажет. Как будто у меня не будет Loadbalancer, который выставляет внешний IP.

Кубернетский кластер

Я установил Kubernetes через kubeadm, используя фланель в качестве CNI

kubectl версия:

Client Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.2"}
Server Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.2"}

Есть ли что-то, что я должен настроить перед установкой Ingress. Нужен ли мне внешний Loadbalancer (моя мысль: Gitlab создаст этот сервис для меня)?

Еще один совет: после установки состояние службы Nginx-Ingress-Controller останется в состоянии ожидания. Причина в том, что он не может обнаружить внешний IP. Я также изменил yaml-файл службы и вручную поставил строку «externalIPs: -External-IP». В результате получилось, что он больше не ожидал. Но все же я не смог найти внешний IP, набрав выше команда и Gitlab также не смогли найти внешний IP

EDIT: Это происходит после установки: см. Рисунок

EDIT2: Запустив следующую команду:

kubectl describe svc ingress-nginx-ingress-controller -n gitlab-managed-apps

Я получаю следующий результат:

см. Рисунок

В журнале событий вы увидите, что я переключаю тип на «NodePort» один раз, а затем снова на «LoadBalancer» и добавляю строку «externalIPs: -192.168.50.235» в файл yaml. Как вы можете видеть, есть внешний IP, но Git его не обнаруживает.

Btw. Я не использую ни одного из этих облачных провайдеров, таких как AWS или GCE, и я обнаружил, что LoadBalancer не работает таким образом. Но для этого должно быть решение без LoadBalancer.

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

После некоторых исследований я обнаружил, что это проблема Gitlab. Как я уже говорил выше, я успешно установил соединение с моим кластером. Поскольку я использую Kubernetes без облачных провайдеров, невозможно использовать тип «LoadBalancer». Поэтому вам нужно добавить внешний IP или изменить тип на «NodePort». Таким образом, вы можете сделать свой Ingress-Controller доступным снаружи.

Проверьте это: ожидание внешнего IP-сервиса kubernetes

Я только что продолжил обучение Gitlab, и оно сработало.

0 голосов
/ 20 ноября 2018

Я бы рассмотрел MetalLB как основного поставщика службы балансировки нагрузки в вашем кластере.Если вы не используете какого-либо облачного провайдера для получения точки входа (External IP) для ресурса Ingress, существует возможность для сред Bare-metal переключиться на решение MetalLB, которое создаст службы Kubernetes типа LoadBalancer в кластерах, которые не работают на облачном провайдере, поэтому его также можно реализовать для NGINX Ingress Controller .

Как правило, MetalLB можно установить через файл манифеста Kubernetes.или используя Helm менеджер пакетов, как описано здесь .

MetalLB развертывает свои собственные службы в кластере Kubernetes, и может потребоваться зарезервировать пул IP-адресов, чтобы иметь возможность стать владельцем службы ingress-nginx.Этот пул может быть определен в ConfigMap, называемом config, расположенном в том же пространстве имен, что и контроллер MetalLB:

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 203.0.113.2-203.0.113.3

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

Более подробную информацию о реализации MetalLB для NGINX Ingress Controller можно найти в официальной документации .

...