Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes Can';无法连接公共域上的MOSQUITO代理_Kubernetes_Mosquitto - Fatal编程技术网

Kubernetes Can';无法连接公共域上的MOSQUITO代理

Kubernetes Can';无法连接公共域上的MOSQUITO代理,kubernetes,mosquitto,Kubernetes,Mosquitto,我的库伯内特有一个莫斯奎托经纪人。我可以在专用网络中连接到Mosquitto代理。它工作得很好。 但是当我们使用公共域(我们使用Sophos UTM 9)时,客户端无法连接到Mosquitto代理 我是库伯内特斯的新人。这是mosquitcho.yaml文件: apiVersion: apps/v1 kind: Deployment metadata: name: mosquitto spec: selector: matchLabels: app: mosquitt

我的库伯内特有一个莫斯奎托经纪人。我可以在专用网络中连接到Mosquitto代理。它工作得很好。 但是当我们使用公共域(我们使用Sophos UTM 9)时,客户端无法连接到Mosquitto代理

我是库伯内特斯的新人。这是mosquitcho.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连接公共域。该节点代码为:

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有什么问题。我错过什么了吗

我该怎么做才能让库伯内特斯的莫斯奎托使用公共领域


非常感谢。

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

  • 您正在使用的映像不存在。您可以检查所有可用的标签
因此,最可能的问题是,您的pod可能没有运行。您可以通过运行下面的命令并检查列
STATUS
来检查它

$ kubectl get pods -l=app=mosquitto
NAME                        READY   STATUS    RESTARTS   AGE
mosquitto-c9dc57d59-98l8r   1/1     Running   0          5m53s
这是为我工作的yaml注意:出于测试目的,我已从服务和部署中删除了
externalIP
资源限制
,并替换了
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容器进行了测试(您可以找到规范):

检查MOSQUITO 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.
如果要在测试前查看消息,请打开第二个终端并运行此命令以查看MOSQUITO服务器接收到的消息:

$ kubectl exec mosquitto-xxxxx -- mosquitto_sub -v -t 'test/topic'
test/topic upvoteIt

其中mosquitto-xxxxx是pod的名称。

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

  • 您正在使用的映像不存在。您可以检查所有可用的标签
因此,最可能的问题是,您的pod可能没有运行。您可以通过运行下面的命令并检查列
STATUS
来检查它

$ kubectl get pods -l=app=mosquitto
NAME                        READY   STATUS    RESTARTS   AGE
mosquitto-c9dc57d59-98l8r   1/1     Running   0          5m53s
这是为我工作的yaml注意:出于测试目的,我已从服务和部署中删除了
externalIP
资源限制
,并替换了
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容器进行了测试(您可以找到规范):

检查MOSQUITO 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.
如果要在测试前查看消息,请打开第二个终端并运行此命令以查看MOSQUITO服务器接收到的消息:

$ kubectl exec mosquitto-xxxxx -- mosquitto_sub -v -t 'test/topic'
test/topic upvoteIt

其中mosquitto-xxxxx是您的pod的名称。

如果您不分享您尝试连接的具体方式,则很难给出建议。您如何尝试联系mosquitto?您使用的是服务类型
ClusterIP
,这意味着它只能在内部访问。为了公开服务,您需要使用NodePort,或者如果您在云提供商中运行,则使用类型为
LoadBalancer
。看见请举例说明您是如何尝试获得服务的。@KoopaKiller感谢您的帮助。当我使用相同的yaml部署我的Rest API或网站时,域适用于Rest API和网站,但不适用于MOSQUITO。我不知道发生了什么事。我更新了我的NodeJS代码来连接Mosquitto。如果你不分享你到底是如何连接的,你很难给出建议。你是如何联系Mosquitto的?您使用的是服务类型
ClusterIP
,这意味着它只能在内部访问。为了公开服务,您需要使用NodePort,或者如果您在云提供商中运行,则使用类型为
LoadBalancer
。看见请举例说明您是如何尝试获得服务的。@KoopaKiller感谢您的帮助。当我使用相同的yaml部署我的Rest API或网站时,域适用于Rest API和网站,但不适用于MOSQUITO。我不知道发生了什么事。我更新了我的NodeJS代码来连接Mosquitto。非常感谢你的帮助。图为EclipseMosquitto:1.6.10。我打这个问题是我的错。你的回答向我提出了解决办法。我找到了NAT的解决方案。非常感谢你的帮助。图为EclipseMosquitto:1.6.10。我打这个问题是我的错。你的回答向我提出了解决办法。我找到了NAT的解决方案。