侧边栏壁纸
博主头像
一揽芳华 博主等级

行动起来,活在当下

  • 累计撰写 265 篇文章
  • 累计创建 24 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

十、kubernetes服务暴露基础

芳华是个男孩!
2024-10-15 / 0 评论 / 0 点赞 / 11 阅读 / 0 字
广告 广告

一、IngressNginxController

1、ingress控制器

1.1、ingress控制器作用

ingress controller可以为kubernetes 集群外用户访问Kubernetes集群内部pod提供代理服务(就是个7层负载均衡)。你创建的ingress controller会监控你自己创建的ingress对象(例如apply了个ingress.yaml文件),根据你描述的内容进行流量路由等功能,如下图。

  • 提供全局访问代理
  • 访问流程
    • 用户-->ingress controller-->service-->pod

invalid image(图片无法加载)

invalid image(图片无法加载)

2、ingress控制器种类

ingress产品有非常多种,例如k8s ingress controller、kong ingress、 treafik ingress、istio Ingress 等等,每个产品都需要单独学习,目前比较流行的是istio(能力最强但学习难度较大)、treafik、k8s(学习难度小、但功能性和扩展较差)下面放张图让大家粗略了解下特点。

invalid image(图片无法加载)

2.1、Kubernetes Ingress Controller

  • 参考链接:http://github.com/nginxinc/kubernetes-ingress
  • 实现:Go/Lua(nginx是用C写的)
  • 许可证:Apache 2.0
  • Kubernetes 的”官方”控制器(之所以称为官方,是想把它区别于 NGINX 公司的控制器)。这是社区开发的控制器,它基于 nginx Web 服务器,并补充了一组用于实现额外功能的 Lua 插件。
  • 由于 NGINX 十分流行,再加上把它用作控制器时所需的修改较少,它对于K8s 普通工程师来说,可能是最简单和最直接的选择

2.2、NGINX Ingress Controller 😁

  • 参考链接:http://github.com/kubernetes/ingress-nginx
  • 实现:Go
  • 许可证:Apache 2.0
  • 这是 NGINX公司开发的官方产品,它也有一个基于 NGINX Plus的商业版。NGINX 的控制器具有很高的稳定性、持续的向后兼容性,且没有任何第三方模块。
  • 由于消除了 Lua 代码,和官方控制器相比,它保证了较高的速度,但也因此受到较大限制。相较之下,它的付费版本有更广泛的附加功能,如实时指标、IWT验证、主动健康检查等。
  • NGINX Ingress 重要的优势是对 TCP/UDP 流量的全面支持,最主要缺点是缺乏流量分配功能。

2.3、Kong Ingress 😁

  • 参考链接:http://github.com/Kong/kubernetes-ingress-controller
  • 实现:Go
  • 许可证:Apache 2.0
  • KongIngress 由 Konginc开发,有两个版本:商业版和免费版。它基于 NGINX 构建,并增加了扩展其功能的 Lua 模块。
  • 最初,Konglngress 主要用作 API网关,用于 API请求的处理和路由。现在,它已经成为成熟的|ngress 控制器, **主要优点是拥有大量易于安装和配置的附加模块、插件(包括第三方插件) **。它开启了控制器具备大量附加功能的先河,其内置函数也提供了许多可能性。KongIngress 配置是用 CRD 执行的。
  • Konglngress 的一个重要特性是它只能在一个环境中运行(而不支持跨命名空间)。这是一个颇有争议的话题:有些人认为这是一个缺点,因为必须为每个环境生成实例;而另一些人认为这是一个特殊特性,因为它是更高级别的隔离,控制器故障的影响仅限于其所在的环埼

2.4、Traefik

  • 参考链接:http://github.com/containous/traefik
  • 实现:Go
  • 许可证:MIT
  • 最初,这个代理是为微服务请求及其动态环境的路由而创建的,因此具有许多有用的功能:连续更新配置(不重新启动)、支持多种负载均衡算法、Web UI、指标导出、对各种服务的支持协议、REST API、Canary 版本等。
  • 支持开箱即用的 Let's Encypt 是它的另一个不错的功能,但它的主要缺点也很明显,就是为了控制器的高可用性,你必须安装并连接其Key-value store.
  • 在 2019年9月发布的 Traefikv2.0中,虽然它增加许多不错的新功能,如带有SNI的 TCP/SSL、金丝雀部署、流量镜像/shadowing和经过改进的 Web U,但一些功能(如 WAF 支持)还在策划讨论中。与新版本同期推出的还有一个名叫 Mesh 的服务网格,它建在 Traefik 之上,对kubernetes内部服务访问做到受控及被监控。

2.5、HAProxy Ingress

  • 参考链接:http://github,com/jcmoraisjr/haproxy-ingress
  • 实现:Go(HAProxy是用C写的)
  • 许可证:Apache 2.0
  • HAProxy是众所周知的代理服务器和负载均衡器。作为 Kubernetes 集群的一部分,它提供了“软“配置更新(无流量损失)、基于 DNS 的服务发现和通过 API进行动态配置。 HAProxy 还支持完全自定义配置文件模板(通过替换 ConfigMap)以及在其中使用 Spring Boot 函数。
  • 通常,工程师会把重点放在已消耗资源的高速、优化和效率上。而 HAProxy的优点之一正是支持大量负载均衡算法。值得一提的是,在2020年6月发布的 v2.0中,HAProxy增加了许多新功能,其即将推出的v2.1有望带来更多新功能(包括OpenTracing 支持)。

2.6、Voyager

  • 参考链接:http://github.com/appscode/voyager
  • 实现:Go
  • 许可证:Apache 2.0
  • Voyager 基于 HAProxy,并作为一个通用的解决方案提供给大量供应商。它最具代表性的功能包括 L7和L4 上的流量负载均衡,其中TCP L4 流量负载均衡称得上是该解决方案最关键的功能之一
  • 在2020年早些时候,尽管 Voyager 在 v9.0.0 中推出了对 HTTP/2和gRPC协议的全面支持,但总的来看,对证书管理(Lets Encrypt 证书)的支持仍是 Voyager 集成的最突出的新功能。

2.7、Contour

  • 参考链接:http://github.com/heptio/contour
  • 实现:Go
  • 许可证:Apache 2.0
  • Contour和 Envoy由同一个作者开发,它基于Envoy。它最特别的功能是可以通过CRD(IngressRoute)管理lIngress 资源,对于多团队需要同时使用一个集群的组织来说,这有助于保护相邻环境中的流量,使它们免受 Ingress 资源更改的影响。
  • 它还提供了一组扩展的负载均衡算法(镜像、自动重复、限制请求率等),以及详细的流量和故障监控。对某些工程师而言,它不支持粘滞会话可能是一个严重缺陷。

2.8、Istio Ingress 😁

  • 参考链接:http://istiomanagement/ingress
  • 实现:Go
  • 许可证:Apache 2.0
  • Isti0是IBM、Google 和Lyft 的联合开发项目,它是一个全面的服务网格解决方案--不仅可以管理所有传入的外部流量(作为 Ingress控制器),还可以控制集群内部的所有流量。
  • lstio 将 Envoy 用作每种服务的辅助代理。从本质上讲,它是一个可以执行几乎所有操作的大型处理器,其中心思想是最大程度的控制、可扩展性、安全性和透明性。
  • 通过 lstio Ingress,你可以对流量路由、服务之间的访问授权、均衡、监控、金丝雀发布等进行优化。

2.9、Ambassador

  • 参考链接:http://github.com/datawire/ambassador
  • 实现:Python
  • 许可证:Apache 2.0
  • Ambassador 也是一个基于 Envoy 的解决方案,它有免费版和商业版两个版本Ambassador 被称为"Kubernetes 原生 AP!微服务网关",它与K8s 原语紧密集成,拥有你所期望的从Ingress controller 获得的功能包它还可以与各种服务网格解决方案,如 Linkerd、lstio 等一起使用。
  • 顺便提一下,Ambassador 博客日前发布了一份基准测试结果,比较了 Envoy、HAProxy和 NGINX 的基础性能。

2.10、Gloo

  • 参考链接:http://github.com/solo-io/gloo
  • 实现:Go
  • 许可证:Apache 2.0
  • Gloo 是在 Envoy之上构建的新软件(于 2018年3月发布),由于它的作者坚持认为“网关应该从功能而不是服务中构建 AP!",它也被称为“功能网关”。其“功能级路由”的意思是它可以为后端实现是微服务、无服务器功能和遗留应用的混合应用路由流量。
  • 由于拥有可插拔的体系结构,Gloo 提供了工程师期望的大部分功能,但是其中一些功能仅在其商业版本(Gloo Enterprise)中可用。

2.11、Skipper

  • 参考链接:http://github.com/zalando/skipper
  • 实现:Go
  • 许可证:Apache 2.0
  • Skipper是 HTTP路由器和反向代理,因此不支持各种协议。从技术上讲,它使用 EndpointsAP!(而不是 Kubernetes services)将流量路由到 Pod。它的优点在于其丰富的过滤器集所提供的高级 HTTP 路由功能,工程师可以借此创建、更新和删除所有 HTTP 数据。
  • skipper 的路由规则可以在不停机的情况下更新。正如它的作者所述,skipper 可以很好地与其他解决方案一起使用,比如 AWS ELB.

二、traefixte简介与特性


1、什么是Traefik

官方文档

https://doc.traefik.io/traefik/

简介

Traefik是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理、负载均衡工具。 它支持多种后台 (Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, Zookeeper, BoltDB, Rest API, file…) 来自动化、动态的应用它的配置文件设置。

流量示意图

在这里插入图片描述

在这里插入图片描述

2、Traefik特性

  • 非常快
  • 无需安装其他依赖,通过Go语言编写的单一可执行文件支持 Rest API
  • 多种后台支持:Docker,Swarm,Kubernetes,Marathon,Mesos,Consul, Etcd,并且还会更多
  • 后台监控,可以监听后台变化进而自动化应用新的配置文件设置
  • 配置文件热更新。无需重启进程
  • 正常结束http连接
  • 后端断路器
  • 轮询,rebalancer负载均衡
  • Rest Metrics
  • 支持最小化官方docker 镜像
  • 前、后台支持SSL
  • 清爽的Angularjs前端页面
  • 支持Websocket
  • 支持HTTP/2
  • 网络错误重试
  • 支持Let's Encrypt(自动更新HTTPS证书)
  • 高可用集群模式

3、traefik组件与nginx类比

invalid image(图片无法加载)

组件名称功能nginx相同概念
Providers监听路由信息变化,更新路由修改nginx配置,reload服务。
Entrypoints网络入口,监听传入的流量配置文件listen指定监听端口
Routers分析传入的请求,匹配规则配置文件server_name+location
Middlewares中间件,修改请求或响应location配置段中添加的缓存、压缩、请求头等配置
Service请求转发http配置段中的upstream

Nginx和Traefik横向对比

Nginx IngressTraefik ingress
协议http/https、http2、grpc、tcp/udphttp/https、http2、grpc、tcp、tcp+tls
路由匹配host、pathhost、path、headers、query、path prefix、method
命名空间支持-共用或指定命名空间
部署策略-金丝雀部署、蓝绿部署、灰度部署
upstream探测重试、超时、心跳探测重试、超时、心跳探测、熔断
负载均衡算法RR、会话保持、最小连接、最短时间、一致性hashWRR、动态RR、会话保持
优点简单易用,易接入Golang编写,部署容易,支持众多的后端,内置WebUI
缺点没有解决nginx reload,插件多,但是扩展性能查差性能略逊于NGINX,但强于HAProxy

4、核心概念

当请求Traefik时,请求首先到entrypoints,然后分析传入的请求,查看他们是否与定义的Routers匹配。如果匹配,则会通过一系列middlewares处理,再到traefikServices上做流量转发,最后请求到kubernetes的services上
在这里插入图片描述

以下几个重要的核心组件

  • Providers用来自动发现平台上的服务,可以是编排工具、容器引擎云提供商或者键值存储。Traefik通过查询Providers的API来查询路由的相关信息,一旦检测到变化,就会动态的更新路由。
  • Entrypoints监听传入的流量,是网络的入口点,定义了接受请求的端口(HTTP或者TCP)
  • Routers分析请求(host,path,headers,SSL等),负责将传入的请求连接到可以处理这些请求的服务上去。
  • Middlewares中间件,用来修改请求或者根据请求来做出判断,中间件被附件到路由上,是一种在请求发送到服务之前调整请求的一种方法。
  • Service将请求转发给应用,负责配置如何最终将处理传入请求的实际服务,Traefik的Service介于Middlewares与KubernetesService之间,可以实现加权负载、流量复制等功能。

traefik优点

  • 不需要安装其他依赖,使用 GO 语言编译可执行文件
  • 支持多种后台,如 Docker, Swarm mode, Kubernetes, Marathon, Consul, Etcd, Rancher, Amazon ECS 等等
  • 支持 REST API
  • 配置文件热重载,可自动监听配置改动、发现新服务,并自动更新无需人工重启
  • 支持熔断、限流功能
  • 支持轮训、负载均衡
  • 提供简洁的 UI 界面
  • 支持 Websocket, HTTP/2, GRPC
  • 自动更新 HTTPS 证书
  • 支持高可用集群模式
0
广告 广告

评论区