0

I'd like to expose default port (1883) and WS port (9001) of MQTT server on an Azure Kubernetes Cluster.

Anyway here is the deployement I currently wrote :

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

And when I deploy it, everything is fine but the MQTT broker is unreachable and my service is described like that :

mqtt-server-service   LoadBalancer   10.0.163.167   51.143.170.64   1883:32384/TCP,1884:31326/TCP   21m

Why is the 1883/9001 port aren't forwarded like it should be ?

4

2 回答 2

2

首先,确保您从集群内部而不是外部连接到服务的集群 IP。不要费心 ping 服务 IP 来确定服务是否可访问(请记住,服务的集群 IP 是虚拟 IP,ping 它永远不会起作用)。如果您已经定义了一个就绪探测,请确保它成功;否则

pod 不会成为服务的一部分。要确认 pod 是服务的一部分,请使用 kubectl get endpoints 检查相应的 Endpoints 对象。如果您尝试通过其 FQDN 或其中的一部分(例如,myservice.mynamespace.svc.cluster.local 或 myservice.mynamespace)访问该服务并且它不起作用,请查看您是否可以访问它使用其集群 IP 而不是 FQDN。检查您是否连接到服务公开的端口而不是目标端口。尝试直接连接到 pod IP 以确认您的 pod 正在接受正确端口上的连接。如果您甚至无法通过 pod 的 IP 访问您的应用程序,请确保您的应用程序不仅绑定到 localhost。

于 2019-04-03T16:20:58.023 回答
1

我没有发现任何问题,您请求的端口正在被转发到。并且服务在节点上创建了临时端口以供流量流动(它总是这样做)。服务有端点,一切正常。

只是为了提供更多上下文,它总是这样做,因为它需要将流量路由到某个端口,但它不能依赖于这个确切的端口,因为它可能被占用,所以它使用 30.000 范围内的随机端口(默认情况下)。

https://kubernetes.io/docs/concepts/services-networking/service/#nodeport

如果您必须指定一个已知的静态端口分配,您可以添加nodePort: some-number到您的服务中的端口定义。默认情况下,节点端口分配在 30000-32767 中。

于 2019-04-03T15:18:37.277 回答