Score:0

การเข้าถึง Mosquitto MQTT จากภายนอกคลัสเตอร์ kubernetes ของฉัน

ธง us

ฉันมีการตั้งค่า Mosquitto ต่อไปนี้บน minikube ของฉัน:

การปรับใช้:

apiVersion: แอป/v1
ประเภท: การปรับใช้
ข้อมูลเมตา:
  ชื่อ: ยุง
  เนมสเปซ: mosquitto
ข้อมูลจำเพาะ:
  แบบจำลอง: 1
  ตัวเลือก:
    ป้ายกำกับการแข่งขัน:
      ชื่อ: ยุง
  แม่แบบ:
    ข้อมูลเมตา:
      ป้ายกำกับ:
        ชื่อ: ยุง
    ข้อมูลจำเพาะ:
      ตู้คอนเทนเนอร์:
        - ชื่อ: ยุง
          ภาพ: eclipse-mosquitto:2.0.12
          พอร์ต:
          - พอร์ตคอนเทนเนอร์: 1883
          ปริมาณการติดตั้ง:
          - ชื่อ: mosquitto-config
            mountPath: /mosquitto/config/mosquitto.conf
            เส้นทางย่อย: mosquitto.conf
      ปริมาณ:
      - ชื่อ: mosquitto-config
        configMap:
          ชื่อ: mosquitto-configmap  

ConfigMap:

api เวอร์ชัน: v1
ประเภท: ConfigMap
ข้อมูลเมตา:
  ชื่อ: mosquitto-configmap
  เนมสเปซ: mosquitto
ข้อมูล:
  mosquitto.conf: |-
    ผู้ฟัง 1883
    allow_anonymous จริง  

บริการ:

api เวอร์ชัน: v1
ชนิด:บริการ
ข้อมูลเมตา:
  ชื่อ: mosquitto-service
ข้อมูลจำเพาะ:
  ประเภท: NodePort
  ตัวเลือก:
    ชื่อ: ยุง
  พอร์ต:
    - โปรโตคอล: TCP
      พอร์ต: 1883
      พอร์ตเป้าหมาย: 1883
      โหนดพอร์ต: 30007  

ตอนนี้ฉันต้องการเข้าถึงการปรับใช้ของฉันจาก LAN ของฉัน ทดสอบด้วย MQTT-Explorer จากเครื่องโฮสต์ Windows ของฉัน การใช้ mqtt://localhost:30007 ไม่ทำงาน เป็นที่ทราบกันดีว่าการตั้งค่านี้ทำงานร่วมกับการส่งต่อพอร์ต

$k พอร์ตส่งต่อ mosquitto-66d69df7c9-zrvgt 1111:1883
ส่งต่อจาก 127.0.0.1:1111 -> 1883
ส่งต่อจาก [::1]:1111 -> 1883
การจัดการการเชื่อมต่อสำหรับ 1111

ฉันคิดว่าฉันเข้าใจผิดในส่วนของบริการ ในที่สุดบริการควรจะสามารถเข้าถึงได้จากภายใน LAN ของฉันด้วย:

คำถามโบนัส: ฉันจะกำหนดเส้นทางบริการไปยัง mqtt.local ได้อย่างไร Kubernetes Ingress ก็ใช้ไม่ได้สำหรับฉันเช่นกัน คาดเดาเพราะมันใช้สำหรับ HTTP เท่านั้น

Score:0
ธง pl

โหนดพอร์ต จัดสรร IP ที่อยู่ภายในคลัสเตอร์ ดังนั้นจึงจำเป็นต้องส่งต่อพอร์ต

ในการส่งพอร์ตภายในนั้นไปยังพอร์ตภายนอก คุณต้องเปลี่ยน ข้อมูลจำเพาะประเภท ถึง โหลดบาลานเซอร์.

ฉันพบว่าคำว่า "LoadBalancer" ทำให้เกิดความสับสนเนื่องจากขัดแย้งกับคำที่บริการต่างๆ เช่น AWS ใช้กับโหลดบาลานเซอร์ของตนเอง (เช่น ELB ใน Amazon) ใน Kubernetes โหลดบาลานเซอร์ บริการจะโหลดสมดุลระหว่างพ็อดใดๆ ที่ตรงกับเกณฑ์ที่คุณระบุ หรือในกรณีนี้เพียงพ็อดเดียว

เคล็ดลับคือ หากคุณอยู่ในสภาพแวดล้อมที่มีโหลดบาลานเซอร์จริง บริการจะจับคู่กับโหลดบาลานเซอร์ภายนอกโดยอัตโนมัติ เพื่อให้คุณสามารถเข้าถึงบริการด้วย IP จริง

นอกจากนี้ยังสามารถทำได้ด้วย ขาเข้า แต่สามารถใช้ได้เฉพาะกับบริการ http และ https ที่มีตัวควบคุมขาเข้า เช่น NGINX เนื่องจาก MQTT เป็นโปรโตคอลที่แตกต่างกัน บริการจึงใช้เพื่อส่งผ่านการเชื่อมต่อ

ในกรณีของฉัน ฉันไม่ได้ใช้บริการระบบคลาวด์ ดังนั้นจึงไม่มีตัวจัดสรรภาระงานเช่น ELB ให้เป็นค่าเริ่มต้น คุณต้องเพิ่มของคุณเอง (ดูที่ฉันหมายถึงเกี่ยวกับความสับสน) ฉันติดตั้งตัวจัดสรรภาระงาน MetalLB ในคลัสเตอร์และพอร์ตปรากฏขึ้นอย่างน่าอัศจรรย์ในหนึ่งในพูลของ IP ในเครื่องที่ฉันจัดสรร

จากนั้นคุณเพียงแค่ต้องตั้งค่า DNS (ในเราเตอร์ของคุณ) เพื่อให้ชื่อที่คุณต้องการสอดคล้องกับ IP ที่จัดสรร ตอนนี้โบรกเกอร์ของฉันปรากฏบน mqtt.local บนพอร์ต 1883

นี่คือ yaml ที่เหมาะกับฉัน:

apiVersion: แอป/v1
ประเภท: การปรับใช้
ข้อมูลเมตา:
  ชื่อ: ยุง
  เนมสเปซ: mosquitto
ข้อมูลจำเพาะ:
  แบบจำลอง: 1
  ตัวเลือก:
    ป้ายกำกับการแข่งขัน:
      ชื่อ: ยุง
  แม่แบบ:
    ข้อมูลเมตา:
      ป้ายกำกับ:
        ชื่อ: ยุง
    ข้อมูลจำเพาะ:
      ตู้คอนเทนเนอร์:
        - ชื่อ: ยุง
          ภาพ: eclipse-mosquitto:2.0.12
          พอร์ต:
          - พอร์ตคอนเทนเนอร์: 1883
          ปริมาณการติดตั้ง:
          - ชื่อ: mosquitto-config
            mountPath: /mosquitto/config/mosquitto.conf
            เส้นทางย่อย: mosquitto.conf
      ปริมาณ:
      - ชื่อ: mosquitto-config
        configMap:
          ชื่อ: mosquitto-configmap  
---
api เวอร์ชัน: v1
ประเภท: ConfigMap
ข้อมูลเมตา:
  ชื่อ: mosquitto-configmap
  เนมสเปซ: mosquitto
ข้อมูล:
  mosquitto.conf: |-
    ผู้ฟัง 1883
    allow_anonymous จริง 
---
api เวอร์ชัน: v1
ชนิด:บริการ
ข้อมูลเมตา:
  ชื่อ: mosquitto-service
  เนมสเปซ: mosquitto
  คำอธิบายประกอบ: # <-- พูล IP ใดที่จะใช้
    metallb.universe.tf/address-pool: lb-static-ips
ข้อมูลจำเพาะ:
  ประเภท: LoadBalancer # <-- เปลี่ยนแล้ว
  ตัวเลือก:
    ชื่อ: ยุง
  พอร์ต:
    - ชื่อ: ยุง
      โปรโตคอล: TCP
      พอร์ต: 1883
      พอร์ตเป้าหมาย: 1883
      # nodePort: 30007 <--- LoadBalancer จะเข้าใจสิ่งนี้

...และนี่คือ YAML สำหรับ metalLB:

api เวอร์ชัน: v1
ประเภท: ConfigMap
ข้อมูลเมตา:
  เนมสเปซ: ระบบโลหะ
  ชื่อ: การกำหนดค่า
ข้อมูล:
  การกำหนดค่า: |
    กลุ่มที่อยู่:
    - ชื่อ: http # หนึ่งที่อยู่ IP สำหรับโฮสต์ http เสมือน
      โปรโตคอล: Layer2
      ที่อยู่:
      - 10.3.3.152/32

    - ชื่อ: lb-static-ips # ที่อยู่ IP สำหรับบริการ
      โปรโตคอล: Layer2
      ที่อยู่:
      - 10.3.3.153-10.3.3.160

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา