在运维工作中,k8s中service和ingress的有什么区别?
在 Kubernetes(K8S)集群中,Service 和 Ingress 都是用于管理网络流量和提供服务暴露的资源,但它们在功能、用途和实现方式上有显著的区别。以下是详细对比:
1. Service(服务)
1.1 定义
Service 是 Kubernetes 中的一个抽象资源,用于定义一组 Pod 的逻辑集合和一个外部可访问的网络接口。它通过一个虚拟 IP(ClusterIP)和端口将流量转发到后端的 Pod。
1.2 主要功能
- 负载均衡:将流量均匀分配到后端的 Pod。
- 服务发现:提供一个稳定的网络接口,Pod 的变化不会影响到客户端。
- 内部通信:主要用于集群内部的服务通信。
1.3 类型
- ClusterIP(默认):仅在集群内部可访问,提供一个虚拟 IP。
- NodePort:通过每个节点的 IP 和一个静态端口暴露服务,外部可通过
<NodeIP>:<NodePort>访问。 - LoadBalancer:在支持的云平台上,通过云提供商的负载均衡器暴露服务。
- ExternalName:将服务映射到一个外部名称,通常用于 CNAME。
1.4 使用场景
- 内部服务通信:Pod 之间通过 Service 的 ClusterIP 进行通信。
- 外部访问:通过 NodePort 或 LoadBalancer 提供外部访问。
2. Ingress(入口)
2.1 定义
Ingress 是 Kubernetes 中的一个 API 对象,用于管理外部访问集群内服务的规则。它通常与 Ingress Controller 配合使用,提供基于 HTTP 和 HTTPS 的负载均衡、SSL 终止、基于路径和域名的路由等功能。
2.2 主要功能
- 基于路径和域名的路由:根据请求的域名和路径将流量转发到不同的后端服务。
- SSL 终止:支持 HTTPS,可以管理 SSL/TLS 证书。
- 负载均衡:将外部流量负载均衡到后端服务。
- 重定向和重写:支持对请求路径的重定向和重写。
2.3 使用场景
- 外部访问:提供对外部用户的统一入口,管理多个服务的 HTTP/HTTPS 流量。
- 多域名支持:支持基于域名的路由,适用于多租户环境。
- 安全:支持 SSL 终止,确保数据传输的安全。
3. 主要区别
| 特性 | Service | Ingress |
|---|---|---|
| 功能 | 负载均衡、服务发现、内部通信 | 基于路径和域名的路由、SSL 终止、外部访问 |
| 协议支持 | TCP/UDP | HTTP/HTTPS |
| 使用场景 | 集群内部服务通信、外部访问(NodePort、LoadBalancer) | 外部访问的统一入口,支持多域名和路径路由 |
| 配置复杂度 | 相对简单 | 相对复杂,需要 Ingress Controller |
| 依赖组件 | 无额外依赖 | 需要 Ingress Controller(如 Nginx Ingress Controller) |
| 负载均衡 | 基于 IP 和端口 | 基于 HTTP/HTTPS 请求的路径和域名 |
| 安全性 | 无 SSL 终止功能 | 支持 SSL 终止,确保数据传输安全 |
4. 配置示例
4.1 Service 配置示例
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 9376
4.2 Ingress 配置示例
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /path1
pathType: Prefix
backend:
service:
name: service1
port:
number: 80
- path: /path2
pathType: Prefix
backend:
service:
name: service2
port:
number: 80
5. 我的总结
- Service 主要用于集群内部的服务通信和简单的外部访问(通过 NodePort 或 LoadBalancer),适合 TCP/UDP 协议。
- Ingress 提供更高级的外部访问管理功能,支持基于 HTTP/HTTPS 的路由、SSL 终止和多域名支持,适用于复杂的外部访问场景。
综上所述,在实际使用中,可以根据具体需求选择合适的资源类型。例如,对于简单的内部服务通信,可以使用 Service;而对于需要对外提供 HTTP/HTTPS 服务的场景,可以使用 Ingress。

浙公网安备 33010602011771号