# NodePort

当创建了NodePort类型的Service后，其会在集群内的每一个Node上都保留一个端口（所有Node都使用相同的端口），该端口是由Service创建的一个协程监听的。

## 创建NodePort类型的Service

下面展示一个创建NodePort类型的Service，即`spec.type=NodePort`。例如创建一个名为`kubia-nodePort`的Service，其匹配标签为`app=kubia`的Pod，并且这些Pod的端口号为`8080`，该Service在集群内的端口号为`80`，在Node上监听的端口号为`30123`。

```yaml
apiVersion: v1
kind: Service
metadata:
  name: kubia-nodeport
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 8080
    nodePort: 30123
  selector:
    app: kubia
```

{% hint style="info" %}
🧨 30123 这个 `nodePort` 是真实存在于 Node 上的，但是上述的 80 端口号是虚拟的，是由 iptables 生成的；
{% endhint %}

外部客户端访问Service的架构图如下：

![外部客户端通过NodePort类型Service访问内部Pod](https://2906552408-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M6Ub8CloS5kJszh6xSR%2Fsync%2Ffc466019d4a427d0af31b527edbb21afb7c0b6f0.png?generation=1588594612261962\&alt=media)
