我想在Azure Kubernetes群集上公开MQTT服务器的默认端口(1883)和WS端口(9001)。
无论如何,这是我当前编写的部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: mqtt-server
spec:
replicas: 1
selector:
matchLabels:
app: mqtt-server
template:
metadata:
labels:
app: mqtt-server
type: backend
spec:
containers:
- name: mqtt-server
image: eclipse-mosquitto:1.5.4
resources:
requests:
cpu: 250m
memory: 256Mi
ports:
- name: mqtt-dflt-port
containerPort: 1883
- name: mqtt-ws-port
containerPort: 9001
---
apiVersion: v1
kind: Service
metadata:
name: mqtt-server-service
spec:
selector:
app: mqtt-server
type: LoadBalancer
ports:
- name: mqtt-dflt-port
protocol: TCP
port: 1883
targetPort: 1883
- name: mqtt-ws-port
protocol: TCP
port: 1884
targetPort: 9001
当我部署它时,一切都很好,但是MQTT代理无法访问,并且我的服务描述如下:
mqtt-server-service LoadBalancer 10.0.163.167 51.143.170.64 1883:32384/TCP,1884:31326/TCP 21m
为什么1883/9001端口未按预期转发?
答案 0 :(得分:2)
首先,请确保您从以下位置连接到服务的群集IP: 集群,而不是从外部。 不要打扰对服务IP进行查询,以判断该服务是否可访问 (请记住,服务的群集IP是虚拟IP,对其执行ping操作将永远无法进行)。 如果您已经定义了准备情况调查,请确保其成功;否则
pod将不包含在服务中。 要确认广告连播是服务的一部分,请检查相应的End- 用kubectl指向对象获取端点。 如果您尝试通过FQDN或FQDN的一部分访问该服务(例如, ple,myservice.mynamespace.svc.cluster.local或myservice.mynamespace)和 它不起作用,请查看是否可以使用其群集IP(而不是FQDN)访问它。 检查您是否连接到服务公开的端口,而不是 目标端口。 尝试直接连接到Pod IP,以确认您的Pod正在接受连接。 正确端口上的位置。 如果您甚至无法通过广告连播的IP访问您的应用,请确保您的应用没有 仅绑定到本地主机。
答案 1 :(得分:1)
我没有发现任何错误,您请求的端口已转发到。并且服务在节点上创建了临时端口以使流量通过(它总是这样做)。服务有端点,一切正常。
仅仅提供更多的上下文,它总是这样做,因为它需要将流量路由到某个端口,但是由于可能被占用,因此它不能依赖于此确切的端口,因此它使用30.000范围内的随机端口(默认情况下) )。
https://kubernetes.io/docs/concepts/services-networking/service/#nodeport
如果必须指定已知的静态端口分配,则可以在服务的端口定义中添加nodePort: some-number
。默认情况下,节点端口在30000-32767中分配。