Kubernetes(K8S)是当今主流的容器编排平台,它提供了一种轻松管理容器化应用程序的方式。在K8S中,NodePort是一种Service类型,它允许外部流量进入集群中的某个Pod。而在K8S 1.9版本中,NodePort服务有一定的端口范围限制,如何设置NodePort的端口范围是一项常见的配置需求。

下面我们来详细介绍如何实现“k8s 1.9 nodeport范围”,让你轻松掌握这一技能。

### 实现“k8s 1.9 nodeport范围”步骤表格

| 步骤 | 说明 |
| ---- | ------------------------------ |
| 1 | 创建 NodePort 类型的 Service |
| 2 | 设置 NodePort 的端口范围 |
| 3 | 部署 Pod,验证 NodePort 端口范围 |

### 步骤一:创建 NodePort 类型的 Service

在这一步中,我们需要创建一个 NodePort 类型的 Service,以便外部用户可以访问集群中的 Pod。

首先,我们需要创建一个示例的 Deployment,用于部署一个简单的容器应用。假设我们的 Deployment 文件名为 `app-deployment.yaml`,内容如下:

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: nginx
ports:
- containerPort: 80
```

然后,我们创建 NodePort 类型的 Service,让外部用户可以通过指定的端口访问这些 Pod。创建一个名为 `app-service.yaml` 的 Service 文件,内容如下:

```yaml
apiVersion: v1
kind: Service
metadata:
name: app-service
spec:
type: NodePort
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30000 # 设置 NodePort 的起始端口号
```

在上面的示例中,我们定义了一个名为 `app-service` 的 NodePort 类型的 Service,将外部流量的端口映射到 Pod 的端口80,并通过 `nodePort: 30000` 设置了 NodePort 的起始端口号为30000。

### 步骤二:设置 NodePort 的端口范围

K8S 1.9版本中,NodePort 的端口范围默认是30000-32767,如果你想更改这个范围,可以通过修改 `kube-apiserver` 的 `--service-node-port-range` 参数来实现。

在 Master 节点上找到 `kube-apiserver` 的配置文件,一般位于 `/etc/kubernetes/manifests/kube-apiserver.yaml`,加入 `--service-node-port-range=30000-32767` 设置参数,示例如下:

```yaml
apiVersion: v1
kind: Pod
metadata:
name: kube-apiserver
namespace: kube-system
spec:
containers:
- command:
- kube-apiserver
- --service-node-port-range=30000-32767
image: k8s.gcr.io/kube-apiserver
name: kube-apiserver
```

重启 kube-apiserver 服务使配置生效:

```bash
kubectl delete pod -n kube-system kube-apiserver-master-0
```

### 步骤三:部署 Pod,验证 NodePort 端口范围

最后,我们可以部署之前创建的 Deployment 和 Service,然后通过 NodePort 的访问端口验证配置的端口范围是否生效。可以通过以下命令查看 NodePort 的端口范围:

```bash
kubectl get svc app-service -o=jsonpath="{.spec.ports[0].nodePort}"
```

这样,你已经成功配置了 K8S 1.9 版本中 NodePort 的端口范围,并且可以在集群外访问到对应的服务了。

希望本文能帮助到你,让你更好地理解和使用 Kubernetes 中的 NodePort 服务。如果还有任何问题,欢迎随时提问。祝学习愉快!