Единая точка входа Kubernetes / Metallb

Я строю кластер K8 для школьного проекта. Это чистый металл и в качестве балансировщика нагрузки используется металл. Каждая служба работает в отдельном модуле:

  • Nginx
  • Wordpress
  • Phpmyadmin
  • MySQL (mariadb)

В файле phpmyadmin мне нужно связать мой сервер mysql примерно так:

$cfg['Servers'][$i]['host'] = "mysql-server-name";

Я пробовал использовать IP-адрес узла:

kubectl get node -o=custom-columns='DATA:status.addresses[0].address' | sed -n 2p

добавив порт: 3306, но я понял, что ни одна из моих служб не может быть доступна через браузер с помощью этого метода. Например, IP: 5050 узла должен перенаправить меня на мой wordpress, но это не так. Есть ли способ получить единый IP-адрес, который я могу использовать для обмена данными между модулями? Я должен добавить, что каждая служба работает сразу, когда я использую svc IP вместо узлов.

Вот конфигурационная карта, которую я использую для Metallb:

kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.99.100-192.168.99.200

person Ajvar    schedule 03.12.2020    source источник
comment
дважды проверяя тег bc, вы используете Google Cloud Kubernetes или кубернеты с открытым исходным кодом на голом железе? (спрашиваю, так как вы также можете использовать Google Cloud Anthos с голыми железными кубернетами AFAIK)   -  person Frank    schedule 03.12.2020
comment
Открытый исходный код на голом железе. Я использую minikube для управления и Metallb для балансировки нагрузки.   -  person Ajvar    schedule 04.12.2020
comment
Вы создали отдельные службы для каждого приложения? Вы можете использовать имя службы в строке подключения для доступа к модулям mysql. Служба wordpress предоставляется с использованием типа ?service?   -  person Mr.KoopaKiller    schedule 10.12.2020


Ответы (1)


Причина, по которой IP-адрес узла не предоставляет доступ к вашему приложению другим приложениям, заключается в том, что модули в кластере kubernetes по умолчанию не прослушивают запросы, поступающие на узел. Другими словами, порт модуля не подключен к порту узла.
Ресурс service - это то, что вам нужно для этого подключения.
Службы бывают разных типов. Служба типа cluster IP назначит приложению внутренний IP-адрес кластера. Если вы не хотите получать доступ к базе данных mysql непосредственно из Интернета, это то, что вам нужно.
Вот пример службы типа IP-адрес кластера для вашего проекта.

apiVersion: v1
kind: Service
metadata:
  name: mysql-service
  namespace: metallb-system
spec:
  selector:
    app: Mysql
  ports:
    - protocol: TCP
      port: 80
      targetPort: 3306

Selector выбирает модули с меткой app=mysql.
Port - это порт, который будет прослушивать служба.
TargetPort - это порт, который прослушивает mysql.
При создании службы вы можете найти это IP, выполнив эту команду

kubectl get services -n metallb-system

В столбце CLUSTER-IP запишите IP-адрес созданной вами службы.
Итак, в этом случае, если mysql прослушивает 3306, вы можете связаться с ним через эту службу по IP-адресу службы на порту 80.
Если вы хотите опубликовать свое приложение Wordpress в Интернете, используйте типы служб NodePort или LoadBalancer. Здесь приведены ссылки на типы услуг. .

person Newsha    schedule 12.02.2021