使用nodePort模式,官方默认范围为30000-32767,详见Service官方文档

NodePort 类型
如果将 type 字段设置为 NodePort,则 Kubernetes 控制平面将在 –service-node-port-range 标志指定的范围内分配端口(默认值:30000-32767)。 每个节点将那个端口(每个节点上的相同端口号)代理到您的服务中。 您的服务在其 .spec.ports[*].nodePort 字段中要求分配的端口。

在使用nodePort模式后,一个很显著的问题就是,域名后面必须带端口,这就很致命了,很显然没有哪个公司的网站是需要你输入域名+端口模式的,所以可以采取这种方式进行规避:

更改端口


调整默认端口为1-65535,可根据需求自行调整:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@node-1 manifests]# vim /etc/kubernetes/manifests/kube-apiserver.yaml 
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
component: kube-apiserver
tier: control-plane
name: kube-apiserver
namespace: kube-system
spec:
containers:
- command:
- kube-apiserver
- --advertise-address=192.168.235.21
- --allow-privileged=true
- --authorization-mode=Node,RBAC
- --client-ca-file=/etc/kubernetes/pki/ca.crt
- --enable-admission-plugins=NodeRestriction
- --enable-admission-plugins=PodPreset
- --runtime-config=settings.k8s.io/v1alpha1=true
- --service-node-port-range=1-65535 # 需增加的配置
...

调整完毕后会等待大概10s,因为更改kube-apiserver.yaml配置文件后会进行重启操作,重新加载配置文件,期间可执行kubectl get pod命令进行查看,如果可正常查看pod信息即说明重启完毕。但是此时端口范围可能仍然不会生效,需要继续进行以下操作:

1
2
[root@node-0 manifests]# systemctl daemon-reload
[root@node-0 manifests]# systemctl restart kubelet

然后重新进行新的service的生成,即可成功创建指定nodePort的service。