go - 如何知道可以从Kubernetes API Server分配哪个节点端口?

标签 go kubernetes service-node-port-range

我想弄清楚当创建像这样的节点端口类型的新服务时,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

最佳答案

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只是随机获取一个端口,如果该端口不是免费的,它将获取下一个端口。
如果您可以阅读go,则该程序包中的其他类是理解行为的一个很好的起点。

关于go - 如何知道可以从Kubernetes API Server分配哪个节点端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62697311/

相关文章:

kubernetes - Minikube 隧道不断要求 sudo

nginx - 在Kubernetes中使用Nginx作为转发代理

spring-boot - 使用K8S IP和Nodeport访问时Springboot Swagger Ui抛出Whitelabel错误页面

kubernetes - Kubernetes NodePort 上的低端口

docker - 使用带有 --driver=docker 的 minikube 无法从本地主机转发到 minikube 内部地址

function - Context struct 在 golang gin 框架中如何工作?

go - GRPC:什么时候有新客户?

testing - 与内容重复的 kubernetes 命名空间

windows - 戈朗 : run default application for a pdf file on windows

go - gin-gonic 是否并行处理请求?