k8s大总结

1. ingress

不用ingress, 用nodeport的话,得确保每个节点上的那个端口都没有被占用。用loadbalancer ,每个服务都需要一个独立的公网 ip
但用ingress,用户访问 www.yourwebsite.com 就可以看到用户界面,访问 www.yourwebsite.com/catalog 就可以看到商品目录,访问 www.yourwebsite.com/cart 就可以看到购物车
service是四层 TCP/UDP(传输层),ingress是七层http,https(应用层),ip是在第三层(网络层)

  1. 不同的网络域名path 对应不同的 后端svc的功能
  2. ingress 定下规则,ingress-controller 根据这个规则,配置了负载均衡器(比如 nginx),让它知道访问 www.test.com的时候,将流量转发到 web-service
  3. ingress http就是对应svc 的80端口
    https 需要 openssl 生成 key pem, 做成secret,ingress指明secret, svc指明端口 443
  4. svc 默认是ClusterIP 类型的,如果指明是 nodePort,那么ingress能访问,通过端口也能访问
  5. Kubernetes Ingress:主要处理基本的 HTTP/HTTPS 流量路由。

2. Traefik

Kubernetes 中的 Ingress 本身就是用于定义外部访问集群内服务的规则,而具体的Ingress Controller(如 Traefik、Nginx、HAProxy 等)则负责实现这些规则。也就是说,Ingress 资源定义了路由规则,而 Ingress Controller 实现了这些规则的实际转发

那么,Traefik 的优势在哪里?

  1. 动态配置

    • Traefik 能够实时检测服务的变化,例如服务实例 pod 数的增减,无需重新加载配置,负载均衡池会自动增减
    • 许多其他 Ingress Controller(如 Nginx)需要手动重新加载配置,或者借助额外的工具实现动态性。
  2. 丰富的集成支持:不懂,不关心

    • Traefik 支持多种服务发现和配置方式,如 Kubernetes Ingress、Docker、Consul、Etcd 等。
    • 这使得 Traefik 在混合环境或迁移场景下更加灵活。
  3. 内置的 Let’s Encrypt 支持

    • Traefik 能够自动获取和续订 SSL/TLS 证书( SSL/TLS 证书通常用于 HTTPS 协议 ),简化了 HTTPS 的配置和管理。
      Traefik 集成了 Let’s Encrypt(一个免费证书颁发机构),可以自动向 Let’s Encrypt 申请证书。配置了 Traefik 后,当你为服务启用 HTTPS 时,Traefik 会自动生成并申请证书
  4. 中间件支持

    • Traefik 提供了强大的中间件机制,可以方便地实现身份验证(需要用户名和密码)、速率限制(每分钟最多允许 1000 个请求)、重写请求(将请求的路径 /oldpath 重写为 /newpath)等功能。
    • 这些中间件可以通过简单的配置进行组合和复用,提高了配置的可维护性。
  5. 监控和可视化

    • Traefik 自带一个直观的仪表板,可以实时查看路由、服务和中间件的状态。
    • 还支持多种监控工具的集成,如 Prometheus、Datadog 等,便于运维监控。
  6. 性能和资源消耗

    • Traefik 使用 Go 语言编写,性能优秀,启动速度快,资源占用相对较低。
    • 在高并发和高可用性要求的场景下表现出色。

举个具体的比较例子

假设场景:你有一个 Kubernetes 集群,需要实现以下功能:

  • 根据 URL 路径将请求路由到不同的服务。
  • 自动为每个服务配置和管理 SSL 证书。
  • 对某些敏感服务添加基本的身份验证。
  • 实时监控服务的健康状态和流量情况。

使用 Nginx Ingress Controller

  • 需要手动配置和集成 Cert-Manager 或其他工具来管理 SSL 证书。
  • 身份验证需要配置额外的插件或自定义配置。
  • 监控需要集成 Prometheus 等工具,且缺少直观的仪表板。

使用 Traefik

  • 内置支持 Let’s Encrypt,无需额外配置即可自动管理 SSL 证书。
  • 通过中间件简单配置即可实现身份验证等功能。
  • 自带的仪表板和监控集成使得运维更加方便。

在 Istio 中,Ingress 也是用于管理外部流量进入集群的机制,但 Istio 提供了一个更强大的替代方案,称为 Istio Ingress Gateway

istio ingress gateway v.s. traefik

Traefik 和 Istio Ingress Gateway 都是用于管理外部流量进入集群的工具,但它们的设计目标和功能侧重点有所不同。虽然在某些功能上有重叠,但它们的定位和功能集并不完全相同

Traefik 和 Istio Ingress Gateway 的功能对比

1. 基本路由和负载均衡

对比:在基本路由和负载均衡方面,两者功能类似,但 Istio Ingress Gateway 更专注于与服务网格深度集成的复杂流量管理。

2. 自动服务发现

对比:Traefik 在服务发现上更加独立和直接,而 Istio Ingress Gateway 更依赖于整个 Istio 生态系统。

3. 安全
  • Traefik:支持 TLS 加密和自动生成 Let’s Encrypt 证书,可以实现基本的身份验证和基于 IP 的访问控制。
  • Istio Ingress Gateway:集成了 Istio 的 mTLS(双向 TLS),提供服务间的零信任安全模型,并支持细粒度的访问控制、身份验证和授权。
  • 在集群中,所有的服务通信都必须经过双向认证,确保通信双方都被验证。
    Istio 提供了细粒度的访问控制策略,可以定义哪些用户或服务可以访问特定的资源。(比如 只有标记为 special-service-account 的服务帐户可以访问 my-app。)
    还可以基于 JWT(JSON Web Token)进行身份验证
    对比:Istio Ingress Gateway 在安全性方面提供了更强大的企业级功能,如 mTLS 和更复杂的身份验证和授权机制。
4. 流量管理
  • Traefik:支持基本的流量管理功能,如重试、超时、限流等。通过中间件扩展,可以实现更多流量管理功能。
  • Istio Ingress Gateway:通过 VirtualServiceDestinationRule 等资源,可以实现高级的流量管理功能,如流量镜像、金丝雀发布、分阶段发布、熔断等。

对比:Istio Ingress Gateway 提供了更丰富的流量管理策略,特别是在微服务架构和 CI/CD 场景下。

5. 监控和可视化
  • Traefik:自带仪表板,集成 Prometheus 和 Grafana,提供基础的监控和可视化功能。
  • Istio Ingress Gateway:通过 Istio 的监控体系(如 Envoy Proxy 集成、Prometheus、Grafana、Kiali 等),提供更细致的流量监控、分布式追踪和服务拓扑可视化。

对比:Istio Ingress Gateway 提供的监控和可视化功能更加全面,尤其在分布式追踪和服务依赖图方面。

6. 扩展性和生态系统
  • Traefik:支持通过插件扩展功能,并与多个云平台和服务编排工具集成良好。
  • Istio Ingress Gateway:是 Istio 服务网格的一部分,与 Istio 的其他组件无缝集成,生态系统丰富,但扩展性主要通过 Istio 的资源配置来实现。

对比:Traefik 更加灵活独立,适用于多种环境,而 Istio Ingress Gateway 更适合与 Istio 集成的环境。

总结

换句话说,Istio Ingress Gateway 包含了 Traefik 的许多功能,但在许多关键领域提供了更丰富的功能和集成。如果你已经在使用 Istio 服务网格,Istio Ingress Gateway 可能是更好的选择,因为它能够充分利用 Istio 的所有功能。如果你不需要服务网格功能,或希望保持轻量级部署,Traefik 可能是更简洁的选择

traefik 白名单功能

作用说明

假设你有一个 Web 服务只希望被内部员工访问,而不希望公开到互联网。你可以配置 Traefik 的白名单中间件,指定公司内部网络的 IP 范围(例如 192.168.1.0/24),只有来自这个范围的请求才会被允许通过,其他的请求将被拒绝。这在保护敏感信息、防止外部攻击方面非常有用。

流量链条

  1. 客户端请求:客户端发出一个请求,目标是通过 Traefik 访问某个后端服务。
  2. Traefik 路由:Traefik 接收到请求后,首先根据配置的路由规则确定该请求应被转发到哪个服务。
  3. 中间件处理
    • 请求经过配置的白名单中间件。
    • 中间件检查客户端的 IP 地址是否在允许的范围内。
  4. 白名单判断
    • 如果 IP 地址在白名单中,Traefik 将继续处理请求并将其转发到目标服务。
    • 如果 IP 地址不在白名单中,Traefik 将拒绝请求,并返回 403 Forbidden 错误。
  5. 服务响应:如果请求被允许,后端服务处理请求并返回响应,Traefik 再将响应返回给客户端。

istio 使用 kind: AuthorizationPolicy ipBlocks: [“192.168.1.0/24”, “10.0.0.0/8”] 来实现白名单功能。Envoy 代理检查请求的来源 IP 地址是否匹配策略中的允许范围。

2.2 traefik中的ingressroute和 traefikservice还有gateway API,gatewayclass,还有httproute 分别解决了什么问题

1. IngressRoute

  • 举例:
    apiVersion: traefik.containo.us/v1alpha1
    kind: IngressRoute
    metadata:
      name: example-ingressroute
      namespace: default
    spec:
      entryPoints:
        - web
      routes:
      - match: Host(`example.com`) && PathPrefix(`/api`)
        kind: Rule
        services:
        - name: api-service
          port: 80
    
    示例说明: 上述 IngressRoute 将匹配 example.com 域下 /api 开头的请求,并将流量路由到名为 api-service 的服务。

2. TraefikService

  • 举例:
    apiVersion: traefik.containo.us/v1alpha1
    kind: TraefikService
    metadata:
      name: my-service
      namespace: default
    spec:
      weighted:
        services:
          - name: app-v1
            weight: 80
          - name: app-v2
            weight: 20
    
    示例说明: 这个 TraefikService 定义了一个权重分配规则,80% 的流量将被发送到 app-v1 服务,20% 的流量将被发送到 app-v2

3. Gateway API (Kubernetes)

下面的例子展示了和traefik ingressRoute相同的功能 /api 到 某个service. 但是gateway api还有其他功能

  • GatewayClass:
    • 作用: 定义一个网关的类,描述网关的实现方式(例如使用 Traefik、Istio 等)。它为多租户环境中的网关选择提供了标准化的方式。
    • 举例:
      apiVersion: gateway.networking.k8s.io/v1beta1
      kind: GatewayClass
      metadata:
        name: traefik-gateway-class
      spec:
        controllerName: traefik.io/gateway-controller
      
      示例说明: 这个 GatewayClass 定义了一个由 Traefik 控制器管理的网关类。
  • Gateway:
    • 作用: 定义一个网关实例,绑定到一个 GatewayClass,并配置监听端口、协议等。
    • 举例:
      apiVersion: gateway.networking.k8s.io/v1beta1
      kind: Gateway
      metadata:
        name: my-gateway
        namespace: default
      spec:
        gatewayClassName: traefik-gateway-class
        listeners:
        - name: http
          protocol: HTTP
          port: 80
      
      示例说明: 这个 Gateway 绑定到 traefik-gateway-class,并监听 80 端口的 HTTP 流量。
  • HTTPRoute
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值