为Kubernetes NodePort指定端口范围

2023年 5月 4日 75.8k 0

在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    <none>   181d   v1.18.3
k8s-05   Ready    <none>   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        <none>        443/TCP        181d
nginx-svc-test   NodePort    10.111.249.101   <none>        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<<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-svc-test
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:alpine
        name: nginx
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc-test
spec:
  selector:
    app: nginx
  type: NodePort
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
EOF

解决办法

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

kubeadm 搭建Kubernetes 1.18集群

新闻联播老司机

  • 20年6月3日
  • 喜欢:1
  • 浏览:6.2k
  • 修改配置文件

    [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    <none>   181d   v1.18.3
    k8s-05   Ready    <none>   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      <none>        443/TCP        181d
    nginx-svc-test   NodePort    10.100.43.24   <none>        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集群配置大全

    相关文章

    KubeSphere 部署向量数据库 Milvus 实战指南
    探索 Kubernetes 持久化存储之 Longhorn 初窥门径
    征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
    那些年在 Terraform 上吃到的糖和踩过的坑
    无需 Kubernetes 测试 Kubernetes 网络实现
    Kubernetes v1.31 中的移除和主要变更

    发布评论