Назад | Перейти на главную страницу

Использование HAProxy с кубернетами

Я пытаюсь настроить кластер Kubernetes с помощью HAProxy. Сейчас есть только два узла. Балансировщик нагрузки находится на главном узле. Но из журналов я вижу, что соединение проверяется на виртуальном IP-адресе, которого нет. Вот конечные точки для кластера кубернетов.

NAME                       ENDPOINTS                                                     AGE
activemq-svc               10.0.86.2:1883,10.0.86.2:8161,10.0.86.2:8161 + 1 more...      2h
admin-svc                  10.0.86.7:8080,10.0.86.7:9840,10.0.86.7:9841                  2h
kube-dns                   10.0.54.2:53,10.0.54.2:4001,10.0.54.2:53                      2h
kubernetes                 172.31.16.18:6443                                             4h
mysql-admin-svc            10.0.86.6:3306                                                2h
mysql-edu-svc              10.0.86.4:10050,10.0.86.4:3306                                2h
mysql-stat-svc             10.0.54.4:3306                                                2h
platform-riak-cs-service   10.0.54.3:8087,10.0.54.3:8080,10.0.54.3:8098                  2h
redis-svc                  10.0.86.3:6379                                                2h
server-svc                 10.0.86.10:8080,10.0.86.10:9840,10.0.86.10:9841 + 1 more...   2h
statistics-svc             10.0.86.8:8080,10.0.86.8:9840,10.0.86.8:9841                  2h

Но в журналах я вижу, что мой IP-адрес пытается подключиться к адресу, которого нет в списке конечных точек. В HAProxy.cfg нет правила также для ..86.5. Кто-нибудь может сказать мне, что происходит?

servicelb [INFO] Connect from 118.102.239.85:39812 to **10.0.86.5:443** (httpsfrontend/HTTP)
servicelb [INFO] Connect from 118.102.239.85:40418 to 10.0.86.5:443 (httpsfrontend/HTTP)
servicelb [INFO] Connect from 118.102.239.85:41057 to 10.0.86.5:443 (httpsfrontend/HTTP)
servicelb [INFO] Connect from 118.102.239.85:41100 to 10.0.86.5:443 (httpsfrontend/HTTP)
servicelb [INFO] Connect from 118.102.239.85:41143 to 10.0.86.5:443 (httpsfrontend/HTTP)
servicelb [INFO] Connect from 10.0.86.1:49589 to 10.0.86.5:80 (httpfrontend/HTTP)
servicelb [INFO] Connect from 10.0.86.1:49611 to 10.0.86.5:80 (httpfrontend/HTTP)
servicelb [INFO] Connect from 10.0.86.10:53882 to 10.0.86.5:80 (httpfrontend/HTTP)
servicelb [INFO] 10.0.86.10:55668 [21/Dec/2015:11:45:15.526] httpsfrontend/1: SSL handshake failure

Это нормально, когда вы создаете сервис, kube-proxy создайте на каждом узле правило iptables для перенаправления трафика на конечные точки, поэтому при использовании облачного провайдера у вас будет следующая схема.

{external load balancer ip:port}->{NodePort(iptables PREROUTING RULE by kubeproxy)}->{pod internal ip address}

Таким образом, вам не нужно настраивать IP-адрес внутренней службы кластера.

Конечная точка kube-proxy по умолчанию выполняет сквозное проксирование TCP, поэтому IP-адреса теряются.

Если вместо этого вы активируете прокси на основе IP-таблиц:

https://github.com/kubernetes/contrib/tree/master/scale-demo#activate-iptables-proxying