Files
k8s-note/k8s知识笔记/三、service/3、NodePort类型.conf
2025-10-16 23:18:49 +08:00

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端口