【kubernetes】--Service
Service
- Service 是 Kubernetes 中用于暴露 Pod 的核心抽象,提供稳定的访问方式。
- ClusterIP(默认)适用于集群内通信,NodePort 适用于临时外部访问,LoadBalancer 适用于生产环境。
- Ingress 补充 Service,提供更高级的 HTTP 路由能力。
Service 的核心功能
-
服务发现
- 为动态变化的 Pod 提供固定的访问入口(DNS 名称或 ClusterIP)。
- 客户端无需关心 Pod 的具体 IP 地址。
-
负载均衡
- 自动将请求分发到后端的多个 Pod 上(默认使用轮询策略)。
-
稳定的网络访问
- Pod 的 IP 是临时的(重启或调度后会变化),而 Service 的 IP(ClusterIP)或 DNS 名称是持久的。
-
支持多种访问模式
- 支持 ClusterIP(集群内访问)、NodePort(节点端口暴露)、LoadBalancer(云厂商 LB)、ExternalName(外部服务映射)等类型。
Service 的类型
Kubernetes Service 主要有 4 种类型:
类型 | 作用 | 适用场景 |
---|---|---|
ClusterIP(默认) | 分配一个集群内部 IP,只能在集群内访问 | 内部服务通信,如微服务间调用 |
NodePort | 在每个节点上开放一个静态端口(30000-32767),外部可通过 <NodeIP>:<NodePort> 访问 | 开发测试、临时外部访问 |
LoadBalancer | 由云厂商(AWS/GCP/Azure)提供外部负载均衡器,分配公网 IP | 生产环境,对外暴露服务 |
ExternalName | 通过 CNAME 记录映射到外部 DNS(如数据库、第三方 API) | 访问集群外服务 |
Service 的工作原理
- 选择 Pod:通过
selector
匹配一组 Pod(如app: nginx
)。 - 分配 IP 和 DNS:
- ClusterIP:自动分配一个虚拟 IP(VIP),只能在集群内访问。
- NodePort/LoadBalancer:额外分配外部访问方式。
- 代理流量:
- 使用
kube-proxy
维护 IPVS/iptables 规则,将请求转发到后端 Pod。
- 使用
Service 示例
1. ClusterIP 示例(默认)
apiVersion: v1
kind: Service
metadata:name: my-service
spec:selector:app: nginx # 选择所有带有 `app: nginx` 标签的 Podports:- protocol: TCPport: 80 # Service 监听的端口targetPort: 80 # 转发到 Pod 的端口
- 集群内访问方式:
- DNS:
my-service.<namespace>.svc.cluster.local
- 或直接使用
http://my-service:80
- DNS:
2. NodePort 示例
apiVersion: v1
kind: Service
metadata:name: my-nodeport-service
spec:type: NodePortselector:app: nginxports:- port: 80targetPort: 80nodePort: 30007 # 手动指定(默认范围 30000-32767)
- 外部访问方式:
http://<NodeIP>:30007
3. LoadBalancer 示例(云厂商适用)
apiVersion: v1
kind: Service
metadata:name: my-loadbalancer-service
spec:type: LoadBalancerselector:app: nginxports:- port: 80targetPort: 80
- 云厂商(如 AWS/GCP)会自动分配一个外部负载均衡器 IP。
Service vs Ingress
特性 | Service | Ingress |
---|---|---|
作用 | 提供 L4(TCP/UDP)负载均衡 | 提供 L7(HTTP/HTTPS)路由 |
协议 | 支持 TCP/UDP | 支持 HTTP/HTTPS/GRPC |
功能 | 负载均衡、服务发现 | 基于路径/域名的路由、TLS 终止 |
依赖 | kube-proxy | 需要 Ingress Controller(如 Nginx、Traefik) |
- Service 适用于内部服务通信或简单的外部访问(NodePort/LoadBalancer)。
- Ingress 适用于 HTTP 流量管理(如多域名、路径路由、SSL 证书等)。