A NodePort
alocă un IP care este intern cluster-ului, de unde este nevoie de port forward.
Pentru a trece acel port intern la un port extern, trebuie să schimbați spec.tip
la Echilibrarea greutății
.
Mi s-a părut că termenul „LoadBalancer” este confuz, deoarece intră în conflict cu termenul folosit de servicii precum AWS pentru propriile balansoare de încărcare (de exemplu, ELB în Amazon). În Kubernetes a Echilibrarea greutății
serviciul va încărca echilibrul între toate podurile care corespund criteriilor pe care le specificați sau, în acest caz, doar aceluia.
Trucul este că, dacă vă aflați într-un mediu cu echilibrare de încărcare reale, atunci serviciul se va mapa automat la un echilibrator de încărcare extern, astfel încât să puteți accesa serviciul cu o IP reală.
Acest lucru se poate face și cu un Intrare
dar poate fi folosit doar pentru serviciile http și https cu un controler de intrare, de exemplu NGINX. Deoarece MQTT este un protocol diferit, serviciul este folosit pentru a trece conexiunea.
În cazul meu, nu sunt pe un serviciu cloud, așa că nu există un echilibrator de încărcare precum ELB furnizat implicit - trebuie să-l adăugați pe al dvs. (vedeți ce vreau să spun despre confuzie). Am instalat un echilibrator de încărcare MetalLB local în cluster și portul a apărut ca magic într-unul dintre pool-urile de IP-uri locale pe care le-am alocat.
De acolo trebuie doar să configurați DNS (în router poate), astfel încât numele dorit să corespundă cu IP-ul alocat. Brokerul meu apare acum pe mqtt.local
pe portul 1883
Iată yaml-ul care a funcționat pentru mine:
apiVersion: apps/v1
fel: Desfăşurare
metadate:
nume: tantar
spatiu de nume: tantar
specificație:
replici: 1
selector:
matchLabels:
nume: tantar
șablon:
metadate:
etichete:
nume: tantar
specificație:
containere:
- nume: tantar
imagine: eclipse-mosquitto:2.0.12
porturi:
- containerPort: 1883
volumMonturi:
- nume: mosquitto-config
mountPath: /mosquitto/config/mosquitto.conf
subCale: mosquitto.conf
volume:
- nume: mosquitto-config
configMap:
nume: mosquitto-configmap
---
apiVersion: v1
fel: ConfigMap
metadate:
nume: mosquitto-configmap
spatiu de nume: tantar
date:
mosquitto.conf: |-
ascultător 1883
permit_anonymous adevărat
---
apiVersion: v1
fel: Serviciu
metadate:
denumire: service-tantari
spatiu de nume: tantar
adnotări: # <-- Ce grup de IP să utilizați
metallb.universe.tf/address-pool: lb-static-ips
specificație:
tip: LoadBalancer # <-- Modificat
selector:
nume: tantar
porturi:
- nume: tantar
protocol: TCP
port: 1883
targetPort: 1883
# nodePort: 30007 <--- LoadBalancer va înțelege acest lucru
...și acesta este YAML pentru metalLB:
apiVersion: v1
fel: ConfigMap
metadate:
spatiu de nume: metallb-system
nume: config
date:
config: |
pool-uri de adrese:
- nume: http # o adresă IP pentru gazde http virtuale
protocol: layer2
adrese:
- 10.3.3.152/32
- nume: lb-static-ips # adrese IP pentru servicii
protocol: layer2
adrese:
- 10.3.3.153-10.3.3.160