Kubernetes中servie类型有几种
在 Kubernetes (k8s) 中,Service(服务)是用来定义一组 Pod 的网络访问方式的资源。Service 的类型通过 spec.type 字段指定,目前 Kubernetes 支持以下几种 Service 类型。
1. ClusterIP(默认类型)
- 描述: 这是 Kubernetes 的默认 Service 类型。Service 会被分配一个集群内部的虚拟 IP(ClusterIP),只能在集群内部访问。
- 用途: 用于集群内部 Pod 之间的通信。
- 特点:
- 不暴露到集群外部。
- 通过 ClusterIP 和端口访问。
- 示例:
1
2
3
4
5
6
7
8
9
10
11
12apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP
2. NodePort
- 描述: 在每个节点的特定端口上暴露服务,外部流量可以通过
<NodeIP>:<NodePort>访问。 - 用途: 适合需要从集群外部访问服务,但不想使用负载均衡器的场景。
- 特点:
- 自动分配一个端口(默认范围 30000-32767),也可以手动指定。
- ClusterIP 仍然存在,内部也可以通过 ClusterIP 访问。
- 示例:
1
2
3
4
5
6
7
8
9
10
11
12
13apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
nodePort: 30007
type: NodePort
3. LoadBalancer
- 描述: 将服务暴露到外部,通过云提供商的负载均衡器(如 AWS ELB、GCP Load Balancer)分配一个外部 IP。
- 用途: 适用于需要高可用性和外部访问的生产环境。
- 特点:
- 需要运行在支持负载均衡器的云平台上。
- 自动创建 ClusterIP 和 NodePort。
- 外部 IP 由云提供商分配。
- 示例:
1
2
3
4
5
6
7
8
9
10
11
12apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: LoadBalancer
4. ExternalName
- 描述: 不创建代理,而是将 Service 映射到外部 DNS 名称,流量直接转发到外部服务。
- 用途: 用于集成集群外部的服务,而无需在集群内创建代理。
- 特点:
- 不分配 ClusterIP、NodePort 或 LoadBalancer。
- 通过 DNS 返回外部名称的 CNAME 记录。
- 示例:
1
2
3
4
5
6
7apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: ExternalName
externalName: example.com
5. Headless Service(特殊情况)
- 描述: 严格来说,Headless Service 不是一种独立的
type,而是通过将spec.clusterIP设置为None实现的特殊 ClusterIP 服务。它不分配虚拟 IP,而是直接返回后端 Pod 的 IP。 - 用途: 适用于需要直接访问具体 Pod 的场景(如 StatefulSet)。
- 特点:
- 不进行负载均衡。
- DNS 返回所有匹配 Pod 的 IP。
- 示例:
1
2
3
4
5
6
7
8
9
10
11
12apiVersion: v1
kind: Service
metadata:
name: headless-service
spec:
clusterIP: None
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
总结
Kubernetes Service 类型共有以下几种:
- ClusterIP(默认,集群内部访问)
- NodePort(节点端口暴露)
- LoadBalancer(外部负载均衡器)
- ExternalName(映射外部服务)
- Headless Service(无 ClusterIP,特殊用法)