Puncte:0

Accesarea Mosquitto MQTT din afara clusterului meu kubernetes

drapel us

Am următoarea configurație Mosquitto pe minikube:

Implementare:

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  

ConfigMap:

apiVersion: v1
fel: ConfigMap
metadate:
  nume: mosquitto-configmap
  spatiu de nume: tantar
date:
  mosquitto.conf: |-
    ascultător 1883
    permit_anonymous adevărat  

Serviciu:

apiVersion: v1
fel: Serviciu
metadate:
  denumire: service-tantari
specificație:
  tip: NodePort
  selector:
    nume: tantar
  porturi:
    - protocol: TCP
      port: 1883
      targetPort: 1883
      nodePort: 30007  

Acum aș dori să accesez implementarea mea din LAN. Testare cu MQTT-Explorer de pe mașina mea gazdă Windows. Utilizarea mqtt://localhost:30007 nu funcționează. Se știe că configurația funcționează cu redirecționarea portului, totuși.

$ k port-forward țânțari-66d69df7c9-zrvgt 1111:1883
Redirecționare de la 127.0.0.1:1111 -> 1883
Redirecționare de la [::1]:1111 -> 1883
Conexiune de manipulare pentru 1111

Cred că am înțeles greșit partea de service. În cele din urmă, serviciul ar trebui să fie accesibil din LAN-ul meu fie cu:

Întrebare bonus: Cum pot direcționa serviciul către ceva de genul mqtt.local? Nici Kubernetes Ingress nu funcționează pentru mine, presupun că este folosit doar pentru HTTP

Puncte:0
drapel pl

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

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.