mosquito Broker语言 - MQTT客户机使用的DNS名称而不是IP地址



我能够让eclipse mosquito代理启动并运行,MQTT客户机能够使用broker的IP地址与代理通信。然而,当我在kubernetes上运行这些时,代理IP在重新启动时不断变化。我想为代理启用DNS名称服务,这样客户端就可以使用broker-name而不是IP。coreDNS在kubernetes中默认运行。

有什么建议吗?

$ nslookup kubernetes.default
Server:     10.43.0.10
Address:    10.43.0.10:53
** server can't find kubernetes.default: NXDOMAIN
** server can't find kubernetes.default: NXDOMAIN

您可以使用无头服务来实现。您可以将服务规范中的clusterIP字段设置为None来创建它。一旦你这样做,DNS服务器将返回pod IP而不是单个服务,而不是返回单个DNS a记录,DNS服务器将返回多个服务a记录,每个记录都指向当前支持该服务的单个pod的IP。

有了这个,你的客户端可以执行一个单一的DNS a记录查找来获取作为服务一部分的所有pod的IP。无头服务也常被用作服务发现系统。

apiVersion: v1
kind: Service
metadata:
name: your-headless-service
spec:
clusterIP: None # <-- This makes the service hadless! 
selector:
app: your-mosquito-broker-pod
ports:
- protocol: TCP
port: 80
targetPort: 3000 

您还可以使用常规服务解析dns名称。不同之处在于,使用无头服务,您可以直接与pod通信,而不是使用服务作为负载平衡器或代理。

通过dns解析服务很容易,您可以使用以下模式:

backend-broker.default.svc.cluster.local

其中backend-broker对应服务名称,default代表定义服务的命名空间,svc.cluster.local是可配置的集群域名后缀,用于所有集群本地服务名称。

注意,如果您的客户机和代理位于相同的名称空间中,则可以省略svc.cluster.local后缀和名称空间。然后将服务引用为:

backend-broker

我强烈建议你阅读更多关于kubernetes中Dns的内容。

All,

感谢您的回答,特别是托马斯的代码指针。根据您的建议,一旦我为POD创建了一个服务,我就能够让DNS工作,因为核心DNS已经在运行。在此之后,我也能够在MQTT代理中使用主机名了。

opts.AddBroker(fmt.Sprintf("tcp://mqtt-broker:1883"))
apiVersion: v1
kind: Service
metadata:
creationTimestamp: "2021-02-01T19:08:46Z"
labels:
app: ipc
name: mqtt-broker
namespace: default

顺便说一句,我无法让无头服务工作,得到这个错误,所以继续使用ClusterIP本身+ 1883暴露的MQTT端口。有什么建议吗?

`services "mqtt-broker" was not valid:`
`spec.clusterIPs[0]: Invalid value: []string{"None"}: may not change once set`

相关内容

  • 没有找到相关文章

最新更新