作者信息:https://home.cnblogs.com/u/huangjiabobk

在运维工作中,k8s中service和ingress的有什么区别?

在 Kubernetes(K8S)集群中,ServiceIngress 都是用于管理网络流量和提供服务暴露的资源,但它们在功能、用途和实现方式上有显著的区别。以下是详细对比:

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

posted @ 2025-04-13 12:20  黄嘉波  阅读(246)  评论(0)    收藏  举报
版权声明:原创作品,谢绝转载!否则将追究法律责任。--作者 黄嘉波