集群上的 Kubernetes NodePort (Default_range + user_defined_range) 或者它可以只是一个范围

Kubernetes NodePort (Default_range + user_defined_range) on a cluster Or it can be just one range only

是否可以在 kubernetes 集群上使用 NodePort Default_range + user_defined_range 或者它只能是一个范围

Can we configure to have say default range plus a range of user defined values ? Like default range is 30000-32767 can we have additional range from 40000-41000 as well ?

希望为集群中的其他应用程序保留默认范围,但构建一个特定于我的应用程序的范围。

我已经测试过在范围之外分配端口,但显然失败了,所以范围是很难定义的。我想了解是否有任何方法可以有两个范围,或者用户需要使用默认范围或自定义范围(即两个不同的范围)不支持单个集群中的范围)

ubuntu@cluster-master:~$ kubectl expose deployment nginx --type=NodePort --port=80 --dry-run -o yaml

apiVersion: v1

kind: Service

metadata:

  creationTimestamp: null

  labels:

    run: nginx

  name: nginx

spec:

  ports:

  - port: 80

    protocol: TCP

    targetPort: 80

    nodePort: 40000

  selector:

    run: nginx

  type: NodePort

status:

  loadBalancer: {}
ubuntu@cluster-master:~$ kubectl create -f service.yaml

The Service "nginx" is invalid: spec.ports[0].nodePort: Invalid value: 40000: provided port is not in the valid range. The range of valid ports is 30000-32767

不幸的是,那样做是不可能的。

默认范围确实是 30000-32767 但可以通过设置 --service-node-port-range 更新文件 /etc/kubernetes/manifests/kube-apiserver.yaml 并添加行 --service-node-port-range=xxxxx-yyyyy

但是要小心,不要在选择范围时产生任何配置问题,以避免与主机网络上的任何其他内容发生冲突。

我认为对您来说最好的解决方案是设置一个单一但更宽的范围。

希望对您有所帮助。

将以上答案作为输入并进行以下测试,我得出结论,这不是受支持的功能,每个集群必须使用一个 NodePort 范围。

我能够通过更新 kube-apiserver 的清单文件来尝试跟随。

在添加具有多个范围值的标志 --service-node-port-range 后,我注意到 kube-apiserv 仅支持一个标志(列表中的最后一个),因此我无法将其设置为两个不同的范围。

尝试按照文件中的两种语法进行操作。

使用以下语法,文件中的最后一个标志将覆盖所有前面标志的值,范围仅变为 40000 到 41000

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    component: kube-apiserver
    tier: control-plane
  name: kube-apiserver
  namespace: kube-system
spec:
  containers:
  - command:
  .
  .
  .
    - --service-node-port-range=30000-32000
    - --service-node-port-range=38000-39000
    - --service-node-port-range=40000-41000
  .
  .
  .

通过在端口范围 40000-41000 上成功创建服务进行测试

$ kubectl get service nginx
NAME    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
nginx   NodePort   10.98.125.217   <none>        80:40000/TCP   75m

尝试的第二个 sysntax 如下(但 kube-apiserv 不支持范围内的这种格式,因此无法启动,所以这不好)

    - --service-node-port-range=3000-32000,40000-41000