Điểm:0

Truy cập Mosquitto MQTT từ bên ngoài cụm kubernetes của tôi

lá cờ us

Tôi có thiết lập Mosquitto sau trên minikube của mình:

Triển khai:

apiVersion: ứng dụng/v1
loại: Triển khai
metadata:
  tên: muỗi
  không gian tên: mosquitto
thông số kỹ thuật:
  bản sao: 1
  bộ chọn:
    trận đấuNhãn:
      tên: muỗi
  mẫu:
    metadata:
      nhãn:
        tên: muỗi
    thông số kỹ thuật:
      hộp đựng:
        - tên: con muỗi
          hình ảnh: nhật thực-mosquitto:2.0.12
          cổng:
          - cảng container: 1883
          khối lượngMount:
          - tên: mosquitto-config
            mountPath: /mosquitto/config/mosquitto.conf
            Đường dẫn con: mosquitto.conf
      khối lượng:
      - tên: mosquitto-config
        bản đồ cấu hình:
          tên: mosquitto-configmap  

Bản đồ cấu hình:

phiên bản api: v1
loại: Bản đồ cấu hình
metadata:
  tên: mosquitto-configmap
  không gian tên: mosquitto
dữ liệu:
  mosquitto.conf: |-
    người nghe 1883
    allow_anonymous đúng  

Dịch vụ:

phiên bản api: v1
loại: Dịch vụ
metadata:
  tên: dịch vụ mosquitto
thông số kỹ thuật:
  loại: NútPort
  bộ chọn:
    tên: muỗi
  cổng:
    - giao thức: TCP
      cảng: 1883
      cổng mục tiêu: 1883
      nútPort: 30007  

Bây giờ tôi muốn truy cập triển khai của mình từ mạng LAN của mình. Thử nghiệm với MQTT-Explorer từ máy chủ Windows của tôi. Sử dụng mqtt://localhost:30007 không hoạt động. Thiết lập được biết là đang hoạt động với chuyển tiếp cổng, tho.

$ k chuyển tiếp cổng mosquitto-66d69df7c9-zrvgt 1111:1883
Chuyển tiếp từ 127.0.0.1:1111 -> 1883
Chuyển tiếp từ [::1]:1111 -> 1883
Xử lý kết nối cho 1111

Tôi nghĩ rằng tôi đang hiểu nhầm phần dịch vụ. Cuối cùng, dịch vụ có thể truy cập được từ trong mạng LAN của tôi bằng:

Câu hỏi bổ sung: Làm cách nào tôi có thể định tuyến dịch vụ đến thứ gì đó như mqtt.local? Kubernetes Ingress cũng không hoạt động với tôi, tôi đoán vậy vì nó chỉ được sử dụng cho HTTP

Điểm:0
lá cờ pl

Một Nút Cổng phân bổ một IP bên trong cụm, do đó cần phải chuyển tiếp.

Để chuyển cổng nội bộ đó sang cổng bên ngoài, bạn cần thay đổi spec.type đến Cân bằng tải.

Tôi thấy thuật ngữ "LoadBalancer" gây nhầm lẫn vì nó xung đột với thuật ngữ được sử dụng bởi các dịch vụ như AWS cho các bộ cân bằng tải của riêng họ (ví dụ: ELB ở Amazon). Trong Kubernetes một Cân bằng tải dịch vụ sẽ cân bằng tải giữa bất kỳ nhóm nào phù hợp với tiêu chí bạn chỉ định hoặc trong trường hợp này chỉ là tiêu chí.

Mẹo nhỏ là nếu bạn đang ở trong môi trường có bộ cân bằng tải thực thì dịch vụ sẽ tự động ánh xạ tới bộ cân bằng tải bên ngoài để bạn có thể truy cập dịch vụ bằng IP thực.

Điều này cũng có thể được thực hiện với một xâm nhập nhưng điều đó chỉ có thể được sử dụng cho các dịch vụ http và https với bộ điều khiển xâm nhập, ví dụ như NGINX. Vì MQTT là một giao thức khác nên dịch vụ được sử dụng để truyền kết nối.

Trong trường hợp của tôi, tôi không sử dụng dịch vụ đám mây nên không có bộ cân bằng tải như ELB được cung cấp theo mặc định - bạn phải thêm bộ cân bằng tải của riêng mình (xem ý tôi muốn nói về sự khó hiểu). Tôi đã cài đặt bộ cân bằng tải MetalLB cục bộ trong cụm và cổng xuất hiện một cách kỳ diệu ở một trong các nhóm IP cục bộ mà tôi đã phân bổ.

Từ đó, bạn chỉ cần thiết lập DNS (có lẽ trong bộ định tuyến của bạn) sao cho tên bạn muốn tương ứng với IP được phân bổ. Nhà môi giới của tôi bây giờ xuất hiện trên mqtt.local trên cảng 1883

Đây là yaml phù hợp với tôi:

apiVersion: ứng dụng/v1
loại: Triển khai
metadata:
  tên: muỗi
  không gian tên: mosquitto
thông số kỹ thuật:
  bản sao: 1
  bộ chọn:
    trận đấuNhãn:
      tên: muỗi
  mẫu:
    metadata:
      nhãn:
        tên: muỗi
    thông số kỹ thuật:
      hộp đựng:
        - tên: con muỗi
          hình ảnh: nhật thực-mosquitto:2.0.12
          cổng:
          - cảng container: 1883
          khối lượngMount:
          - tên: mosquitto-config
            mountPath: /mosquitto/config/mosquitto.conf
            Đường dẫn con: mosquitto.conf
      khối lượng:
      - tên: mosquitto-config
        bản đồ cấu hình:
          tên: mosquitto-configmap  
---
phiên bản api: v1
loại: Bản đồ cấu hình
metadata:
  tên: mosquitto-configmap
  không gian tên: mosquitto
dữ liệu:
  mosquitto.conf: |-
    người nghe 1883
    allow_anonymous đúng 
---
phiên bản api: v1
loại: Dịch vụ
metadata:
  tên: dịch vụ mosquitto
  không gian tên: mosquitto
  chú thích: # <- Sử dụng nhóm IP nào
    metallb.universe.tf/address-pool: lb-static-ips
thông số kỹ thuật:
  gõ: LoadBalancer # <- Đã thay đổi
  bộ chọn:
    tên: muỗi
  cổng:
    - tên: con muỗi
      giao thức: TCP
      cảng: 1883
      cổng mục tiêu: 1883
      # nodePort: 30007 <--- LoadBalancer sẽ tìm ra điều này

...và đây là YAML cho metalLB:

phiên bản api: v1
loại: Bản đồ cấu hình
metadata:
  không gian tên: metallb-system
  tên: cấu hình
dữ liệu:
  cấu hình: |
    nhóm địa chỉ:
    - tên: http # một địa chỉ IP cho máy ảo http
      giao thức: lớp2
      địa chỉ:
      - 10.3.3.152/32

    - tên: lb-static-ips # địa chỉ IP cho dịch vụ
      giao thức: lớp2
      địa chỉ:
      - 10.3.3.153-10.3.3.160

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.