Рейтинг:1

Доступ к службам Kubernetes в кластере из-за пределов локальной сети — Bare Metal

флаг in

Я запускаю простую среду «высокой доступности» с несколькими мастерами на «голом железе» с 2 мастерами и 2 рабочими, а также еще одну виртуальную машину с HAProxy, выступающую в качестве внешнего балансировщика нагрузки.

Мой вопрос: можно ли получить доступ к службам (панель инструментов, ngnix, mysql (особенно mysql) и т. д.) из-за пределов кластера, выставив их в сеть с этой настройкой, которую я запускаю?

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

Изменить: теперь все заработало, следуя предложению @c4f4t0r, вместо внешнего балансировщика нагрузки HAProxy эта же виртуальная машина стала третьим главным узлом, и, как и другие, теперь каждый из них запускает внутренний экземпляр HAProxy и Keepalived, в то время как виртуальная машина, которая раньше была внешней LB, теперь является мастером конечной точки для других, чтобы присоединиться к кластеру, при этом MetalLB работает внутри кластера с контроллером входа nginx, направляющим запросы к запрошенной службе.



>>> Ниже приведены шаги, которые я выполнил для создания среды, а также все конфигурации, используемые при установке.



Настройте высокодоступный кластер Kubernetes с помощью kubeadm

Следуйте этой документации, чтобы настроить высокодоступный кластер Kubernetes с помощью Убунту 20.04 ЛТС.

Эта документация поможет вам настроить кластер с двумя главными узлами, одним рабочим узлом и узлом балансировки нагрузки с использованием HAProxy.

Чистая среда

Роль полное доменное имя IP Операционные системы БАРАН ЦПУ
Балансировщик нагрузки loadbalancer.example.com 192.168.44.100 Убунту 21.04 1G 1
Мастер kmaster1.example.com 10.84.44.51 Убунту 21.04 2G 2
Мастер kmaster2.example.com 192.168.44.50 Убунту 21.04 2G 2
Рабочий kworker1.example.com 10.84.44.50 Убунту 21.04 2G 2
Рабочий kworker2.example.com 192.168.44.51 Убунту 21.04 2G 2
  • Пароль для корень учетная запись на всех этих виртуальных машинах кубеадмин
  • Выполняйте все команды от имени пользователя root, если не указано иное.

Предпосылки

Если вы хотите попробовать это в виртуализированной среде на вашей рабочей станции

  • Виртуальный бокс установлен
  • Хост-машина имеет не менее 8 ядер
  • Хост-компьютер имеет не менее 8 ГБ памяти

Настроить узел балансировки нагрузки

Установить Хапрокси
apt update && apt install -y haproxy
Настроить хапрокси

Добавьте следующие строки к /etc/haproxy/haproxy.cfg

внешний интерфейс kubernetes-frontend
    привязать 192.168.44.100:6443
    режим TCP
    опция tcplog
    default_backend kubernetes-бэкэнд

серверная часть kubernetes-backend
    режим TCP
    опция tcp-check
    круговой баланс
    сервер kmmaster1 10.84.44.51:6443 проверка падение 3 повышение 2
    сервер kmaster2 192.168.44.50:6443 проверить падение 3 поднять 2
Перезапустите службу haproxy
systemctl перезапустить haproxy

На всех узлах kubernetes (kmaster1, kmaster2, kworker1)

Отключить брандмауэр
ufw отключить
Отключить своп
подкачка -а; sed -i '/swap/d' /etc/fstab
Обновите настройки sysctl для сети Kubernetes.
кошка >>/etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --система
Установить докер-движок
{
  apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
  curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-ключ добавить -
  add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) стабильный"
  apt update && apt install -y docker-ce containerd.io
}

Настройка Кубернетес

Добавить репозиторий Apt
{
  curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-ключ добавить -
  echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
}
Установите компоненты Kubernetes
apt update && apt install -y kubeadm=1.19.2-00 kubelet=1.19.2-00 kubectl=1.19.2-00

На любом из главных узлов Kubernetes (например, kmaster1)

Инициализировать кластер Kubernetes
kubeadm init --control-plane-endpoint="192.168.44.100:6443" --upload-certs

Скопируйте команды, чтобы присоединиться к другим главным узлам и рабочим узлам.

Развертывать Калико сеть (я использую Weave вместо Calico)
kubectl --kubeconfig=/etc/kubernetes/admin.conf create -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml

Присоединить другие узлы к кластеру (kmaster2 и kworker1)

Используйте соответствующие команды соединения kubeadm, которые вы скопировали из выходных данных команды инициализации kubeadm на первом мастере.

ВАЖНО: вам также необходимо передать --apiserver-advertise-address команде соединения, когда вы присоединяетесь к другому главному узлу.

Рейтинг:1
флаг nl

Если вы используете metalb, я думаю, вам не нужно иметь внешнюю виртуальную машину с haproxy, вы можете установить контроллер входа в kubernetes и изменить тип службы контроллера входа на LoadBalancer.

Теперь у вас будет внешний IP-адрес в вашей локальной сети для доступа к вашей локальной службе через IP-адрес входного контроллера.

(Интернет) -> (Роутер) -> Nat -> Metalb-Ip -> Ingress-controller -> k8s-service

Ответить или комментировать

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