修改NodePort的范围
1、修改kube-apiserver.yaml文件
2、重启apiserver
3、验证结果
前提:

在 Kubernetes 集群中,NodePort 默认范围是 30000-32767,某些情况下,因为您所在公司的网络策略限制,您可能需要修改 NodePort 的端口范围,本文描述了具体的操作方法。
下面的配置是基于 kubeadm 安装的集群
1、修改kube-apiserver.yaml文件
使用 kubeadm 安装 K8S 集群的情况下,您的 Master 节点上会有一个文件 /etc/kubernetes/manifests/kube-apiserver.yaml,修改此文件,向其中添加 --service-node-port-range=20000-22767 (请使用您自己需要的端口范围),如下所示:

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=172.17.216.80
    • –allow-privileged=true
    • –authorization-mode=Node,RBAC
    • –client-ca-file=/etc/kubernetes/pki/ca.crt
    • –enable-admission-plugins=NodeRestriction
    • –enable-bootstrap-token-auth=true
    • –etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
    • –etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt
    • –etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key
    • –etcd-servers=https://127.0.0.1:2379
    • –insecure-port=0
    • –kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt
    • –kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key
    • –kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
    • –proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt
    • –proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key
    • –requestheader-allowed-names=front-proxy-client
    • –requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
    • –requestheader-extra-headers-prefix=X-Remote-Extra-
    • –requestheader-group-headers=X-Remote-Group
    • –requestheader-username-headers=X-Remote-User
    • –secure-port=6443
    • –service-account-key-file=/etc/kubernetes/pki/sa.pub
    • –service-cluster-ip-range=10.96.0.0/12
    • –service-node-port-range=20000-22767
    • –tls-cert-file=/etc/kubernetes/pki/apiserver.crt
    • –tls-private-key-file=/etc/kubernetes/pki/apiserver.key
      image: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.16.0
      imagePullPolicy: IfNotPresent
      livenessProbe:
      failureThreshold: 8
      httpGet:
      host: 172.17.216.80
      path: /healthz
      port: 6443
      scheme: HTTPS
      initialDelaySeconds: 15
      timeoutSeconds: 15

2、重启apiserver
执行以下命令,重启 apiser

获得 apiserver 的 pod 名字

export apiserver_pods=$(kubectl get pods --selector=component=kube-apiserver -n kube-system --output=jsonpath={
.items…metadata.name})

删除 apiserver 的 pod

kubectl delete pod $apiserver_pods -n kube-system
3、验证结果
执行以下命令,验证修改是否生效:

kubectl describe pod $apiserver_pods -n kube-system
输出结果如下所示:(此时,我们可以看到,apiserver 已经使用新的命令行参数启动)


Host Port:
Command:
kube-apiserver
–advertise-address=172.17.216.80
……
–service-node-port-range=20000-22767
State: Running
Started: Mon, 11 Nov 2019 21:31:39 +0800
Ready: True
Restart Count: 0
Requests:
cpu: 250m

注意

对于已经创建的NodePort类型的Service,您需要删除重新创建
如果您的集群有多个 Master 节点,您需要逐个修改每个节点上的 /etc/kubernetes/manifests/kube-apiserver.yaml 文件,并重启 apiserver

Logo

开源、云原生的融合云平台

更多推荐