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-адресов» , который я мог бы объявить для металла.
Проделанные шаги:
- создайте один файл .yaml для балансировщика нагрузки, kindservicetypeloadbalancer.yaml
- создайте один файл .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