43 lines
2.2 KiB
Plaintext
43 lines
2.2 KiB
Plaintext
一、NodePort类型的Service
|
|
|
|
NodePort是Kubernetes中Service的另一种类型。
|
|
它为Service分配一个静态端口, 这个端口在每个节点上都是开放的, 可以通过节点的IP地址和这个端口来访问Service。
|
|
NodePort类型的Service通常用于将集群内的服务暴露给集群外部的客户端。
|
|
|
|
例如, 假设有一个名为my-nodeport-service的Service, 它的NodePort端口是30007。
|
|
集群外部的客户端可以通过访问任意一个节点的IP地址和端口30007来与my-nodeport-service通信, 而不需要知道my-nodeport-service背后的Pod的具体IP地址。
|
|
|
|
集群外 → NodeIP:NodePort → ClusterIP → Pod
|
|
|
|
1.1、NodePort的端口范围
|
|
NodePort的端口范围是30000到32767, 这是Kubernetes默认
|
|
可以通过修改kube-apiserver的--service-node-port-range参数来更改这个范围。
|
|
|
|
|
|
1.2、NodePort的工作原理
|
|
当创建一个NodePort类型的Service时, Kubernetes会在每个节点上开放一个指定的端口。
|
|
当集群外部的客户端发送请求到这个端口时, 请求会被转发到Service的ClusterIP, 然后再由ClusterIP将请求路由到后端的Pod。
|
|
这种转发和路由通常是通过kube-proxy来实现的, kube-proxy会在每个节点上运行, 负责监听NodePort端口并将请求转发到相应的ClusterIP。
|
|
|
|
1.3、externalTrafficPolicy
|
|
NodePort类型的Service有一个externalTrafficPolicy字段, 用于控制外部流量的路由策略。
|
|
该字段有两个可选值: Local和Cluster。
|
|
|
|
Local: 只将流量路由到与请求源节点相同节点上的Pod。这种策略可以减少跨节点的网络延迟, 但可能导致某些节点上的Pod过载, 而其他节点上的Pod闲置。
|
|
Cluster: 将流量路由到集群中所有匹配的Pod, 无论它们位于哪个节点上。这种策略可以实现更均匀的负载分布, 但可能增加跨节点的网络延迟。
|
|
|
|
1.4、示例配置文件
|
|
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: my-nodeport-service
|
|
namespace: default
|
|
spec:
|
|
type: NodePort
|
|
selector:
|
|
app: my-app
|
|
ports:
|
|
- port: 80 # Service暴露的端口
|
|
targetPort: 8080 # Pod监听的端口
|
|
nodePort: 30007 # NodePort端口 |