MetalLB Внешний IP в Интернет

Я не могу получить доступ к общедоступному IP, назначенному MetalLB Load Balancer

Я создал кластер Kubernetes в Contabo. Его 1 мастер и 2 рабочих. У каждого свой публичный IP.

Я сделал это с kubeadm + фланель. Позже я установил MetalLB для использования Load Balancing.

Я использовал этот манифест для установки nginx:

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1
        ports:
        - name: http
          containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  ports:
  - name: http
    port: 8080
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer

Это работает, стручки работают. Я вижу внешний IP-адрес после:

kubectl get services

С каждого узла / хоста я могу свернуться к этому ip и порту, и я могу получить nginx:

<h1>Welcome to nginx!</h1>

Все идет нормально. НО:

Мне все еще не хватает доступа к этой службе (nginx) с моего компьютера. Я могу попытаться получить доступ к каждому узлу (master + 2 slave) по их IP:PORT, и ничего не происходит. Конечная цель состоит в том, чтобы иметь домен, который имеет доступ к этой службе, но я не могу догадаться, какой IP-адрес должен использовать.

Что мне не хватает?

Должен ли MetalLB просто выставить мои 3 возможных IP? Должен ли я добавить что-то еще на каждом сервере в качестве обратного прокси?

Я спрашиваю это здесь, потому что все статьи / учебные пособия по baremetal/VPS (non aws,GKE и т. Д.) Делают это на кубе на localhost и пропускают эту основную проблему.

Благодарю.

2 ответа

Решение

Чего вам не хватает, так это политики маршрутизации

Ваши внешние IP-адреса должны принадлежать той же сети, что и ваши узлы, или вместо этого вы можете добавить маршрут к вашему внешнему адресу на уровне шлюза по умолчанию и использовать статический NAT для каждого адреса

У меня такая же аппаратная компоновка:

  • кластер Kubernetes с 3 узлами — здесь с 3 IP-адресами:| 123.223.149.27| 22.36.211.68| 192.77.11.164 |
  • работает на (разных) VPS-провайдерах (конечно, подключенных к работающему кластеру (через JOIN)

Цель: «разоблачить» nginx через metalLB, чтобы я мог получить доступ к своему веб-приложению из-за пределов кластера через браузер через IP-адрес одного из моих VPS.

Проблема: у меня нет «диапазона IP-адресов» , который я мог бы объявить для металла.

Проделанные шаги:

  1. создайте один файл .yaml для балансировщика нагрузки, kindservicetypeloadbalancer.yaml
  2. создайте один файл .yaml для ConfigMap, содержащий IP-адреса 3 узлов, kindconfigmap.yaml

``

      ### start of the kindservicetypeloadbalancer.yaml
### for ensuring a unique name: loadbalancer name nginxloady

apiVersion: v1
kind: Service
metadata:
  name: nginxloady
  annotations:
    metallb.universe.tf/address-pool: production-public-ips
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer

``

ниже второй файл .yaml для добавления в кластер:

          # start of the kindconfigmap.yaml
    ## info: the "production-public-ips" can be found 
    ## within the annotations-sector of the kind: Service type: loadbalancer / the kindservicetypeloadbalancer.yaml 
    ## as well... ...namespace: metallb-system & protocol: layer2 
    ## note: as you can see, I added a /32 after every of my node-IPs

 
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: production-public-ips
      protocol: layer2
      addresses:
      - 123.223.149.27/32
      - 22.36.211.68/32
      - 192.77.11.164/32 

``

  • добавить LoadBalancer:

    kubectl apply -f kindservicetypeloadbalancer.yaml

  • добавьте ConfigMap:

    kubectl apply -f kindconfigmap.yaml

  • Проверяем статус пространства имен ("n") metallb-system:

    kubectl describe pods -n metallb-system

PS: собственно все это есть:https://metallb.universe.tf/installation/

и здесь:https://metallb.universe.tf/usage/#requesting-specific-ips

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