我在Kubernetes上有一个Mosquitto经纪人。我可以连接到专用网络中的Mosquitto Broker。它运作良好。
但是,当我们使用公共(public)域(我们使用Sophos UTM 9)时,客户端无法连接到Mosquitto Broker。
我是Kubernetes的新手。这是mosquitto.yaml文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mosquitto
spec:
  selector:
    matchLabels:
      app: mosquitto
  replicas: 1
  template:
    metadata:
      labels:
        app: mosquitto
    spec:
      containers:
      - name: mosquitto
        image: eclipse-mosquitto:v1.16.10
        resources:
          limits:
            cpu: "1"
            memory: 2Gi
          requests:
            cpu: "1"
            memory: 2Gi
        imagePullPolicy: Always
        ports:
        - containerPort: 1883
---

apiVersion: v1
kind: Service
metadata:
  name: mosquitto
spec:
  externalIPs:
  - xxx.xxx.xxx.xxx
  type: ClusterIP
  ports:
    - name: mqtt
      port: 1883
      targetPort: 1883
      protocol: TCP
  selector:
    app: mosquitto
我使用NodeJS来连接公共(public) Realm 。此NodeJS代码为:
var mqtt = require('mqtt');
var client = mqtt.connect('mqtt://mydomain.com:1883');

client.on('connect', function () {
    client.subscribe(topic)
    console.log("Subscribed topic " + topic);
})
我想知道kubernetes或Sophos UTM 9是什么问题。我会错过任何事情吗?
我必须为Kubernetes上的Mosquitto使用公共(public) Realm 做什么?
我非常感谢。

最佳答案

在测试了yaml文件后,我得出的结论是您的配置几乎正确,这是因为:

  • 您正在使用eclipse-mosquitto:v1.16.10的图像不存在。您可以检查所有可用的here标签。

  • 因此,最可能的问题是您的Pod可能没有运行。您可以通过运行以下命令并检查STATUS列来进行检查。
    $ kubectl get pods -l=app=mosquitto
    NAME                        READY   STATUS    RESTARTS   AGE
    mosquitto-c9dc57d59-98l8r   1/1     Running   0          5m53s
    
    在这里为我工作的Yaml。 注意:出于测试目的,我已经从服务和部署中删除了externalIPresource limits,并将图像替换为eclipse-mosquitto:1.6.10:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mosquitto
    spec:
      selector:
        matchLabels:
          app: mosquitto
      replicas: 1
      template:
        metadata:
          labels:
            app: mosquitto
        spec:
          containers:
          - name: mosquitto
            image: eclipse-mosquitto:1.6.10
            imagePullPolicy: Always
            ports:
            - containerPort: 1883
    ---
    
    apiVersion: v1
    kind: Service
    metadata:
      name: mosquitto
    spec:
      type: ClusterIP
      ports:
        - name: mqtt
          port: 1883
          targetPort: 1883
          protocol: TCP
      selector:
        app: mosquitto
    
    部署后,我使用dnsutil容器进行了测试(您可以找到规范here):
    kubectl exec dnsutils -- sh -c 'apk update && apk add mosquitto-clients'
    kubectl exec dnsutils -- mosquitto_pub -h mosquitto -t 'test/topic' -m 'upvoteIt'
    
    检查mosquitto pod中的日志:
    kubectl logs mosquitto-xxxxx
    
    1597829622: New client connected from 172.17.0.4 as mosqpub|88-dnsutils (p1, c1, k60).
    1597829622: Client mosqpub|88-dnsutils disconnected.
    
    如果要在测试前查看消息,请打开第二个终端,然后运行以下命令以查看mosquitto服务器正在接收的消息:
    $ kubectl exec mosquitto-xxxxx -- mosquitto_sub -v -t 'test/topic'
    test/topic upvoteIt
    
    其中mosquitto-xxxxx是您的广告连播的名称。

    关于kubernetes - 无法在公共(public)域上连接Mosquitto Broker,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63462019/

    10-11 08:33