为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    <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集群

修改配置文件

[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 = 20001
1647252613115.png

1647252653957.png

访问测试
1647252694617.png

给TA买糖
共{{data.count}}人
人已赞赏
DockerGrafanaKubernetesprometheus群晖

Prometheus 监控VMware_ESXI并配置AlertManager告警

2022-2-21 0:24:14

Kubernetes

Kubernetes 可视化管理工具Kuboard V3

2022-3-17 18:41:13

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索