我想弄清楚 kubernetes 在创建节点端口类型的新服务时如何知道可以分配哪个节点端口,如下所示:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: NodePort
selector:
app: MyApp
ports:
- port: 80
targetPort: 80
我搜索了谷歌并找到了这些 kubernetes soure 代码,但我不明白它是如何工作的。 https://github.com/kubernetes/kubernetes/blob/master/pkg/registry/core/service/portallocator/allocator.go
节点端口在 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,那么该包中的其他类是理解行为的良好起点。