为Kubernetes NodePort指定端口范围

在Kubernetes环境中,Service NodePort模式默认的端口范围为30000-65535随机端口。例如我们的机器可能运行了很多应用,不太希望端口占用率这么大。我们可以给NodePort指定一个范围

环境信息

本次集群版本

安装方式为kubeadm,实际上参数添加方法大同小异,如果有问题可以联系我!

[root@k8s-01 test]# kubectl  get node
NAME     STATUS   ROLES    AGE    VERSION
k8s-01   Ready    master   181d   v1.18.3
k8s-02   Ready    master   181d   v1.18.3
k8s-03   Ready    master   181d   v1.18.3
k8s-04   Ready       181d   v1.18.3
k8s-05   Ready       181d   v1.18.3

这里我的k8s-01 k8s-02 k8s-03为master节点,同时master节点运行Node节点 测试前我们创建的nginx默认指定的端口为30000往上,效果如下

[root@k8s-01 test]# kubectl  apply -f test.yaml
deployment.apps/nginx-svc-test created
service/nginx-svc-test created
[root@k8s-01 test]# kubectl  get svc
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes       ClusterIP   10.96.0.1                443/TCP        181d
nginx-svc-test   NodePort    10.111.249.101           80:32549/TCP   3s

并且我们是无法指定30000以下的端口

[root@k8s-01 test]# kubectl  apply -f test.yaml
deployment.apps/nginx-svc-test created
The Service "nginx-svc-test" is invalid: spec.ports[0].nodePort: Invalid value: 20001: provided port is not in the valid range. The range of valid ports is 30000-32767

nginx测试文件

cat >>test.yaml<

解决办法

接下来我们需要修改三台kube-apiserver节点 版本基于下面文章安装

    <img src="https://img.mryunwei.com/uploads/2023/05/20230504085107708.jpg" alt>

        <img src="https://img.mryunwei.com/uploads/2023/05/20230504085107708.jpg" alt>

            <h2>kubeadm 搭建Kubernetes 1.18集群</h2>

                <img src="https://img.mryunwei.com/uploads/2023/05/20230504085110705.gif">新闻联播老司机
                <li>
                        20年6月3日</li>
                    <li>
                        喜欢:1
                    </li>
                    <li>
                        浏览:6.2k
                    </li>

修改配置文件

[root@k8s-01 ~]# vim /etc/kubernetes/manifests/kube-apiserver.yaml

添加参数

    - --service-node-port-range=20000-21998

端口范围根据我们实际上情况修改,不建议端口设置20000以下

1647251961874.png

为了保证不出问题,我们先修改一台kube-apiserver。启动没有问题在修改其它节点

[root@k8s-01 ~]# kubectl  get pod -n kube-system |grep apiserver
kube-apiserver-k8s-01            1/1     Running   0          9s
kube-apiserver-k8s-02            1/1     Running   22         181d
kube-apiserver-k8s-03            1/1     Running   28         181d

#修改完成后kube-apiserver是会自动重启,静态pod是实时生效

修改完成后,集群恢复正常

[root@k8s-01 test]# kubectl  get pod -n kube-system |grep api
kube-apiserver-k8s-01            1/1     Running   0          5m11s
kube-apiserver-k8s-02            1/1     Running   0          35s
kube-apiserver-k8s-03            1/1     Running   0          13s

[root@k8s-01 test]# kubectl  get node
NAME     STATUS   ROLES    AGE    VERSION
k8s-01   Ready    master   181d   v1.18.3
k8s-02   Ready    master   181d   v1.18.3
k8s-03   Ready    master   181d   v1.18.3
k8s-04   Ready       181d   v1.18.3
k8s-05   Ready       181d   v1.18.3

接下来我们继续创建nginx

#文件复制上面的nginx测试文件
[root@k8s-01 test]# kubectl  apply -f test.yaml
deployment.apps/nginx-svc-test created
service/nginx-svc-test created
[root@k8s-01 test]# kubectl  get svc
NAME             TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes       ClusterIP   10.96.0.1              443/TCP        181d
nginx-svc-test   NodePort    10.100.43.24           80:21831/TCP   3s

访问测试1647252522609.png 接下来我们手动指定2000-21998中间的端口测试

[root@k8s-01 test]# kubectl  delete -f test.yaml   #删除原来的文件
deployment.apps "nginx-svc-test" deleted
service "nginx-svc-test" deleted

添加nodePort = 200011647252613115.png

1647252653957.png

访问测试1647252694617.png

相关文章:

  1. Kubernetes 1.14 二进制集群安装
  2. Kuerbernetes 1.11 集群二进制安装
  3. Kubenetes 1.13.5 集群二进制安装
  4. CentOS 7 ETCD集群配置大全