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

У меня голый металлический кластер с 3-мя серверами, которые общедоступны, но у каждого из них совершенно разные IP-адреса. У меня есть запись DNS, указывающая на все 3 хоста, поэтому трафик может быть получен любым хостом. У меня все они связаны через VLAN. Теперь я хотел бы, чтобы трафик, поступающий из Интернета, направлялся на узел k8s, где работает служба:


browse "mysrv.mydomain.com"
             |
          .-~|~-.
  .- ~ ~-(   |   )_ _
 /           v         ~ -.
|            |              \
 \           |             .'
   ~- . _____|_______ . -~
             |
             |  request can go to any service
             |
             +----------->--------------+------------>-------------+
             v                          v                          v
             |                          |                          |
             |                          |                          |
  +---------------------+    +---------------------+    +---------------------+
  |        host01       |    |        host02       |    |        host03       |
  |      k8s master     |    |       k8s node      |    |       k8s node      |
  |                     |    |                     |    |                     |
  | Pub.Ip: x.x.x.x     |    | Pub.Ip: y.y.y.y     |    | Pub.Ip: z.z.z.z     |
  |                     |    |                     |    |                     |
  | VlanIp: 192.168.0.1 |----| VlanIp: 192.168.0.2 |----| VlanIp: 192.168.0.3 |
  +---------------------+    +---------------------+    +---------------------+

Я понимаю, что мне нужно использовать metallb, поэтому я следовал описанию установки здесь: https://kubernetes.github.io/ingress-nginx/deploy/baremetal/. Я могу успешно развернуть балансировщик нагрузки nginx, но я не пользователь, как настроить metallb.

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - x.x.x.x,y.y.y.y,z.z.z.z
    - name: internal
      protocol: layer2
      addresses:
      - 192.168.0.200-192.168.0.210

С помощью default приводит к nginx услуги, которые никогда не получают внешний IP

> kubectl get svc -n ingress-nginx ingress-nginx 
NAME            TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx   LoadBalancer   10.107.136.170   <pending>     80:30152/TCP,443:30276/TCP   43h

С помощью internal работает, но только когда я подключен к внутренней VLAN.

Любой намек был бы полезен на то, как я могу заставить мой сценарий работать.

1 ответ

Решение

Ваша среда не подходит для MetalLB - вам понадобятся IP-адреса, которые можно назначить любому узлу (плавающий IP / IP-адрес службы). Для вашей ситуации лучшим решением будет обратный прокси-сервер, который называется Ingress in Kubernetes.

Другие вопросы по тегам