【问题标题】:Kubernetes Service does not map the right portKubernetes Service 没有映射正确的端口
【发布时间】:2019-04-04 00:20:58
【问题描述】:

我想在 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 端口没有按应有的方式转发?

【问题讨论】:

    标签: azure kubernetes port kubernetes-service


    【解决方案1】:

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

    pod 不会成为服务的一部分。 要确认 pod 是服务的一部分,请检查相应的 End- 使用 kubectl 获取端点的点对象。 如果您尝试通过其 FQDN 或其一部分访问该服务(例如, ple,myservice.mynamespace.svc.cluster.local 或 myservice.mynamespace)和 它不起作用,看看你是否可以使用它的集群 IP 而不是 FQDN 来访问它。 检查您是否连接到服务公开的端口而不是 目标端口。 尝试直接连接到 pod IP 以确认您的 pod 正在接受连接 在正确的端口上执行。 如果您甚至无法通过 pod 的 IP 访问您的应用程序,请确保您的应用程序不是 只绑定到本地主机。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2016-06-04
        • 1970-01-01
        • 1970-01-01
        • 2017-01-29
        • 2020-01-08
        • 2018-05-09
        • 1970-01-01
        • 2017-07-13
        • 1970-01-01
        相关资源
        最近更新 更多