【问题标题】:How to know which nodeport can be allocated from Kubernetes API Server?如何知道可以从 Kubernetes API Server 分配哪个 nodeport?
【发布时间】:2020-10-23 02:38:14
【问题描述】:

我想知道在创建具有如下节点端口类型的新服务时,kubernetes 是如何知道可以分配哪个节点端口的:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: NodePort
  selector:
    app: MyApp
  ports:
    - port: 80
      targetPort: 80

我搜索了谷歌并找到了这些 kubernetes 源代码,但我不明白它是如何工作的。 https://github.com/kubernetes/kubernetes/blob/master/pkg/registry/core/service/portallocator/allocator.go

【问题讨论】:

    标签: go kubernetes service-node-port-range


    【解决方案1】:

    Nodeport 在 30000-32767 之间随机选择。您可以在服务定义中进行设置。

    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      type: NodePort
      selector:
        app: MyApp
      ports:
          # By default and for convenience, the `targetPort` is set to the same value as the `port` field.
        - port: 80
          targetPort: 80
          # Optional field
          # By default and for convenience, the Kubernetes control plane will allocate a port from a range (default: 30000-32767)
          nodePort: 30007
    

    来自文档:https://kubernetes.io/docs/concepts/services-networking/service/#nodeport

    更新

    kubernetes/pkg/registry/core/service/portallocator 包中的类负责为服务分配节点端口。

    此测试记录了行为:https://github.com/kubernetes/kubernetes/blob/master/pkg/registry/core/service/portallocator/operation_test.go

    Kubernetes 只占用一个随机端口,如果那个端口不是空闲的,它会占用下一个。

    如果您可以阅读该包中的其他类,则可以很好地了解该行为。

    【讨论】:

    • 嗨,我的意思是控制器如何知道可以使用哪个节点端口以及已经分配了哪个端口?
    • 我更新了我的答案。如果我有帮助,请考虑支持/接受。
    • 非常感谢,kubernetes 只占用一个随机端口,如果那个端口不是空闲的,它会占用下一个端口。
    猜你喜欢
    • 2018-11-14
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    相关资源
    最近更新 更多