kubernetes - 无法在公共域上连接 Mosquitto Broker
问题描述
我的 Kubernetes 上有一个 Mosquitto Broker。我可以连接到专用网络中的 Mosquitto Broker。它运作良好。但是当我们使用公共域(我们使用 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 连接公共领域。这个 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 使用公共域,我需要做什么?
我非常感激。
解决方案
在测试了你的 yaml 文件后,我得出的结论是你的配置几乎是正确的,我的意思是因为:
- 您使用的图像
eclipse-mosquitto:v1.16.10
不存在。您可以在此处查看所有可用的标签。
因此,最可能的问题是您的 pod 可能没有运行。您可以通过运行以下命令并检查列来检查它STATUS
。
$ kubectl get pods -l=app=mosquitto
NAME READY STATUS RESTARTS AGE
mosquitto-c9dc57d59-98l8r 1/1 Running 0 5m53s
这是对我有用的 yaml。注意:出于测试目的,我已从服务和部署中删除了externalIP
andresource 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 容器进行了测试(您可以在此处找到规范):
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 是您的 pod 的名称。
推荐阅读
- javascript - 使用 eq() 使用 jQuery 获取特定的父元素
- php - 在 laravel nova 中创建动态数量的卡片
- r - plm 固定效应错误 - R 中的空模型 - 不平衡数据
- xquery - Xquery 模块根据输入参数将十进制转换为十六进制/八进制或任何其他基数
- java - 如何在 Spring Boot 中创建不同的 ThreadPoolTaskExecutor?
- ruby-on-rails - bundler gem 悲观语义版本字符串 ~>1.7.15
- django - Django调用模型保存两次产生索引错误
- c - 为什么我的浮点值打印不正确?
- scala - 运行时需要哪些 Scala 库?
- reactjs - 对话框 PaperProps 背景 url 不适用于本地路径