Я использую простую -металлическую многоцелевую -основную среду «высокой доступности» с 2 мастерами и 2 рабочими, а также в качестве другой виртуальной машины с HAProxy, выступающей в качестве внешнего балансировщика нагрузки.
Мой вопрос: :можно получить доступ к службам (приборной панели, ngnix, mysql (, особенно mysql )и т. д. )из-за пределов кластера, подвергая их воздействию сеть с этой настройкой, которую я запускаю?
Я пытался использовать MetalLB в этой среде, чтобы представить сервисы как LoadBalancer, но, похоже, это не сработало, и, поскольку я новичок в Kubernetes, я не мог понять, почему.
Изменить :Теперь все заработало, следуя совету @c4f4t0r, вместо внешнего балансировщика нагрузки HAProxy эта же виртуальная машина стала третьим главным узлом, и, как и другие, теперь каждая из них работает как внутренний экземпляр. HAProxy и Keepalived, в то время как виртуальная машина, которая раньше была внешней LB, теперь является мастером конечной точки для других, присоединяющихся к кластеру, при этом MetalLB работает внутри кластера с контроллером входа nginx, направляющим запросы к запрошенной службе.
Следуйте этой документации, чтобы настроить высокодоступный кластер Kubernetes с помощью Ubuntu 20.04 LTS .
Эта документация поможет вам настроить кластер с двумя главными узлами, одним рабочим узлом и узлом балансировки нагрузки с использованием HAProxy.
Роль | Полное доменное имя | IP-адрес | ОС | ОЗУ | ЦП |
---|---|---|---|---|---|
Балансировщик нагрузки | loadbalancer.example.com | 192.168.44.100 | Ubuntu 21.04 | 1G | 1 |
Master | kmaster1.example.com | 10.84.44.51 | Ubuntu 21.04 | 2G | 2 |
Master | kmaster2.example.com | 192.168.44.50 | Ubuntu 21.04 | 2G | 2 |
Worker | kworker1.example.com | 10.84.44.50 | Ubuntu 21.04 | 2G | 2 |
Рабочий | kworker2.example.com | 192.168.44.51 | Ubuntu 21.04 | 2G | 2 |
- Пароль для root учетная запись на всех этих виртуальных машинах: kubeadmin
- Выполняйте все команды от имени пользователя root, если не указано иное
Если вы хотите попробовать это в виртуализированной среде на своей рабочей станции
apt update && apt install -y haproxy
Добавьте следующие строки в /etc/haproxy/haproxy.cfg
frontend kubernetes-frontend
bind 192.168.44.100:6443
mode tcp
option tcplog
default_backend kubernetes-backend
backend kubernetes-backend
mode tcp
option tcp-check
balance roundrobin
server kmaster1 10.84.44.51:6443 check fall 3 rise 2
server kmaster2 192.168.44.50:6443 check fall 3 rise 2
systemctl restart haproxy
ufw disable
swapoff -a; sed -i '/swap/d' /etc/fstab
cat >>/etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
{
apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt update && apt install -y docker-ce containerd.io
}
{
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
}
apt update && apt install -y kubeadm=1.19.2-00 kubelet=1.19.2-00 kubectl=1.19.2-00
kubeadm init --control-plane-endpoint="192.168.44.100:6443" --upload-certs
Скопируйте команды, чтобы присоединиться к другим главным узлам и рабочим узлам.
kubectl --kubeconfig=/etc/kubernetes/admin.conf create -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml
Используйте соответствующие команды соединения kubeadm, которые вы скопировали из вывод команды kubeadm init на первом мастере.
ВАЖНО :Вам также необходимо передать --apiserver -рекламу адреса -в команду присоединения, когда вы присоединяетесь к другому главному узлу.
Если вы используете metalb, я думаю, вам не нужна внешняя виртуальная машина с haproxy, вы можете установить входной контроллер в kubernetes и изменить тип службы входного контроллера на LoadBalancer.
Теперь у вас будет внешний IP-адрес в вашей локальной сети для доступа к вашей локальной службе через IP-адрес входного контроллера.
(Internet) -> (Router) -> Nat -> Metalb-Ip -> Ingress-controller -> k8s-service