跳到主要内容

应用路由

在k8s中,服务的暴露主要是通过node-port方式,通过绑定宿主机的某个端口,然后进行Pod的请求转发和负载均衡。这种方式的缺陷如下所示。

Service可能有很多个,每个都绑定一个port,需要开放很多主机IP,每个主机还需要开放很多外围端口,造成管理混乱,无法适用很多公司的防火墙规则等。

解决方案是通过一个外部的网络代理服务(Nginx或HAproxy或网关等),绑定固定的IP,开放一定范围的端口,然后根据域名向后面ServiceIP转发。PaaS容器服务提供了两种网络代理方式:服务代理和负载均衡。

优势如下所示
  • 服务代理:服务代理是基于HAproxy开发的一个网络代理服务,单纯代理性能上更加强大,负载速度和并发处理更优秀。
  • 负载均衡:负载均衡是基于Ingress开发的一个负载均衡服务,工作在OSI第7层,可以针对HTTP应用做一些分流的策略,支持多种调度算法,Header、Query等路由策略,可以实现灰度发布等。

基于服务代理创建路由

服务代理是基于HAproxy开发的一个网络代理服务,单纯代理性能上更加强大,负载速度和并发处理更优秀。

用户登录PaaS平台,点击[所有产品/容器服务/容器应用]菜单项,进入应用列表页面。选择对应的集群项目。

切换至[网络管理/应用路由/服务代理],单击左上角+添加路由规则,进入路由规则配置页面,用户根据业务需要配置对应的参数,页面如下图所示。

前提条件
  • 用户在[集群管理/详情/网络出口]已创建负载均衡出口,且运行正常。
  • 平台已配置对应可选的服务。
test

路由规则参数的具体说明如下所示。

信息
  • 规则名称:规则名称长度限制为3~128个字符。
  • 选择出口:选择一个代理服务,此代理服务由基础设施管理员在集群创建并授权租户。
  • 选择服务:选择当前项目需要设置路由规则的服务。
  • 协议端口:配置服务到服务代理的端口映射关系,代理协议支持HTTP、HTTPS和TCP。HTTP和HTTPS需要配置域名,HTTPS还需要配置SSL证书。
  • 服务域名:可以选择自定义域名或集群分配域名。自定义域名就是用户自行填写域名;集群分配域名是指管理员在集群服务代理配置二级域名,例如abc.com,系统按照“项目名-服务名-端口.abc.com”这样的规则自动生成一个子域名作为服务域名。访问服务需要保证域名可以解析到服务代理对应的IP地址。
  • 证书内容:当选择代理端口为“HTTPS”时,需要配置证书内容来实现服务的正常访问。
  • 证书秘钥:当选择代理端口为“HTTPS”时,需要配置证书对应的秘钥来实现服务的正常访问。

以上参数配置完成后,路由规则添加完成。

基于负载均衡创建路由

用户登录PaaS平台,点击[所有产品/容器服务/容器应用]菜单项,进入应用列表页面。选择对应的集群项目。

切换至[网络管理/应用路由/负载均衡],单击左上角+添加路由规则按钮,进入规则创建页面,配置对应的参数,参数说明如下所示。

前提条件
  • 用户在[集群管理/详情/网络出口]已创建负载均衡出口,且运行正常。
  • 平台已配置对应可选的服务。

配置灰度发布策略时,平台已配置对应可选的替换服务。

信息
  • 规则名称:规则名称长度限制为3~128个字符。

  • 选择出口:选择一个负载均衡器,此负载均衡器由基础设施管理员在集群创建并授权租户使用。

  • 监听协议端口:可以选择HTTP、HTTPS、TCP和UDP协议,不同协议设置参数和功能会有差异。如果是HTTP,具体的调度算法适用场景说明如下所示。

    • 加权轮询算法:每个请求所占用的后端时间基本相同,负载情况最好。常用于短连接服务,例如HTTP等服务。
    • 最小连接数:每个请求所占用的后端时间相差较大的场景。常用于长连接服务。
    • 源地址散列调度算法IP_HASH:不支持会话保持的场景可以使用IP_HASH进行调度。
  • 服务域名:自定义服务域名,可支持添加多个域名,当添加多个域名时需要用“,”隔开。访问服务需要保证服务域名可以解析到负载均衡器IP。

  • 匹配规则:对应Nginx的location,设置哪些访问地址可以匹配到当前监听规则。可以填“path”或正则,兼容Nginx的location语法。

  • 绑定服务:给路由规则绑定后端服务,每个规则可绑定一个后端服务。如果用户需要配置对应的高级配置参数,可展开“高级配置”配置以下的参数。

  • 上传限制:限制服务上传数据大小,例如代理上传图片服务,可以限制上传大小。

  • 会话保持:设置会话保持时间,开启会话保持机制的意义是将某些请求转发至同一台服务器进行处理。

  • 日志设置:访问日志启用后会记录客户端向Nginx发起的每一次请求,关闭后将不再记录;重写日志启用后会记录rewrite相关信息,关闭后将不再记录。

  • 访问路径:服务实际的访问路径,“/”开头,根目录可不填。路由规则对应的参数设置完成后,单击“创建”按钮,路由规则配置成功。

创建完成后可编辑yaml修改负载均衡路由规则参数。基于负载均衡创建的路由规则配置完成后,点击路由规则名称链接进入路由规则详情页面,如下图所示。

test

test
信息
  • 路由规则:用户可查看当前路由规则已配置的参数信息,例如:调度算法、匹配规则、绑定服务,上传限制、会话保持、日志设置、访问路径等参数。
  • 灰度发布:在项目敏捷开发的过程中,不可避免需要快速、安全的更新应用,在此前提下衍生除了多种应用发布方式,其中灰度发布可以实现平滑过渡的发布,在实际的生产应用中有比较广泛的应用,灰度发布支持“按权重”、“按内容”进行配置。
  • 主/监控服务:当前ingress绑定的服务。
  • 替换服务:用于灰度发布使用的替换服务。
  • 按权重:配置主服务、替换服务的流量比例(设置范围 0 ~ 100 %)。
  • 白名单:白名单中的IP可以访问当前的服务,配置相应的IP或者和IP段,单击“保存”即可。

用户按内容配置灰度发布的页面如下图所示。

test

按照服务内容配置路由规则的具体内容是:根据用户绑定后端服务域名的Header、Query、Cookie配置路由匹配规则,其中Header/Cookie匹配方式支持完全匹配、正则匹配对应的键值,使得满足规则的请求可以转发到相应的服务;Cookie规则方式需要用户配置具体的Cookie。

匹配路由规则的请求将转发到相应的服务中,不匹配规则的请求将转发到该路由规则绑定的其他服务中(按原有权重比例)。

信息

如果当前服务加入了安全组,那么必须在安全组Ingress白名单中放行对应负载均衡,否则配置不放行的负载均衡白名单后该IP依然会被安全组拦截。