K8S重要概念区分:Ingress 和 Service 的异同点

在 Kubernetes 中,Ingress 和 Service 都是用于管理和暴露应用流量的重要组件。下面从多个维度详细分析它们的异同点、特性、使用场景和配置方法。

1. 概念与作用

1.1 Ingress
Ingress 是什么?
Ingress主要负责七层负载,将外部 HTTP/HTTPS 请求路由到集群内部的服务。它可以基于域名和路径定义规则,从而将外部请求分配到不同的服务。

在这里插入图片描述

ingress作用

  • 提供 基于 HTTP/HTTPS 的路由。
  • 支持 TLS 终止(HTTPS)。
  • 为集群内部多个服务提供一个 统一的访问入口。
  • 提供高级功能,如 路径重写、反向代理、负载均衡。

1.2 Service
Service 是什么?
Service主要是面向四层负载,基于TCP传输,用于将流量分发到一组 Pod。Service 抽象出 Pod 的网络访问,提供稳定的网络接口,即使 Pod 动态变化,其访问方式仍保持不变。

在这里插入图片描述

Service作用:

  • 提供 Pod 的 服务发现 和 负载均衡。
  • 允许集群内外部流量访问特- 定的 Pod。
  • 支持多种访问类型,包括 ClusterIP、NodePort、LoadBalancer 和 ExternalName。

2. 使用场景

3. 关键特性对比

3.1 Ingress 特性
协议支持
仅支持 HTTP 和 HTTPS。

路由规则
基于 域名 和 路径 进行路由。

例如,根据路径 /app1 路由到 Service A,路径 /app2 路由到 Service B。

TLS 支持
支持 HTTPS,TLS 终止直接在 Ingress 层进行。配置 TLS 后,用户访问时自动升级为 HTTPS。

负载均衡
在 Ingress 层负载均衡到不同的 Service。每个 Service 内部 Pod 之间的负载均衡由 Service 实现。

3.2 Service 特性
协议支持:
支持 HTTP、HTTPS、TCP、UDP 等多种协议。

Service类型

  • ClusterIP(默认):仅在集群内部可访问。
  • NodePort:通过每个节点上的特定端口暴露服务。
  • LoadBalancer:通过云提供商的负载均衡器暴露服务。
  • ExternalName:将请求重定向到外部 DNS 名称。

负载均衡
Service 将流量分发到其关联的多个 Pod,实现 Pod 级别的负载均衡。

服务发现
Kubernetes 自动为每个 Service 创建一个 DNS 入口,集群内其他服务可以通过 服务名 访问。

4. 两者的关系

4. 1 Ingress 依赖于 Service
Ingress 本身并不直接与 Pod 通信,它将请求转发到 Service,而 Service 再将流量分发到具体的 Pod。

4.2 典型的流量路径:

  • 用户请求 通过域名或 IP 访问 Ingress。
  • Ingress 根据配置规则,将流量转发到对应的 Service。
  • Service 负责将流量分配到 Pod。
    在这里插入图片描述

4.3 Service 可以独立于 Ingress
Service 可以单独使用,而不需要依赖 Ingress。

例如,NodePort 和 LoadBalancer 类型的 Service 可以直接暴露服务给外部。

5. 配置示例

5.1 Service 示例

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80          # Service 暴露的端口
      targetPort: 8080   # Pod 的应用监听端口
  type: LoadBalancer     # 暴露为外部负载均衡

类型:LoadBalancer,会向外部分配一个云提供商的负载均衡 IP。

流量转发:将端口 80 的请求转发到目标 Pod 的 8080 端口。

5.2 Ingress 示例

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: example.com                # 域名
    http:
      paths:
      - path: /app1                 # 路径匹配
        pathType: Prefix
        backend:
          service:
            name: service-app1       # 目标 Service
            port:
              number: 80
      - path: /app2
        pathType: Prefix
        backend:
          service:
            name: service-app2       # 另一个 Service
            port:
              number: 80

路由规则:

  • 访问 example.com/app1 时流量会路由到 service-app1。

  • 访问 example.com/app2 时流量会路由到 service-app2。

  • 高级功能:通过 Annotations 配置路径重写。

6 主要区别总结

在这里插入图片描述

7 使用场景

使用 Ingress 的场景:

  • 当需要路由 HTTP/HTTPS 流量到多个服务时。

  • 需要域名管理、路径重写、TLS 等高级功能。

  • 希望通过一个入口点管理多个 HTTP 应用的外部访问。

使用 Service 的场景:

  • 当只需暴露一个服务时,可以直接使用 NodePort 或 LoadBalancer。

  • 在集群内服务之间通信时,使用 ClusterIP。

  • 需要暴露非 HTTP/HTTPS 服务(如数据库、消息队列)时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小马不敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值