使用SLB访问K8s上的EDAS应用-阿里云(云淘科技)
企业级分布式应用服务EDAS(Enterprise Distributed Application Service)是一个应用托管和微服务管理的云原生PaaS平台,提供应用开发、部署、监控、运维等全栈式解决方案,同时支持Spring Cloud和Apache Dubbo(以下简称Dubbo)等微服务运行环境,助力您的应用轻松上云。使用EDAS进行应用托管,并为应用绑定SLB不但能为应用提供对外稳定ip、负载均衡、高可用、高并发等特性,还能够使用EDAS平台提供的从创建到运行的应用全生命周期管理服务。
方案介绍
背景介绍
在进行应用部署时通常需要考虑应用的高可用及性能吞吐。多机部署应用并结合负载均衡器SLB,能够避免应用单点故障,降低对后端单台服务器的性能要求,提高应用整体服务性能。SLB具有可扩展性,根据应用业务流量的需要,支持随时增删SLB的后端应用服务器,扩展应用服务能力。SLB为提供应用对外稳定IP,并根据转发规则,将来自客户端的请求分发给应用所在的ECS服务器池中的实例。一个多机部署的应用能够结合SLB以保证应用的高可用,降低单台服务器的负载,实现流量的分发。SLB能够配置调度后端服务器的算法,如轮询、加权轮询。若开启会话保持功能,来自同一台客户端请求将转发到同一台应用服务器后端,以提高访问性能。公网SLB和私网SLB的结合使用,能够提供Web应用的外部公网访问能力。后端服务器通过私网SLB进行通信,能够实现前端Web应用和后端应用分离,根据前后端服务性能需求的不同,各自进行后端服务器扩展。SLB基于端口创建监听,通过规划应用后端服务器组,支持多个应用复用一个SLB。此外,七层负载均衡支持基于域名和URL配置转发规则。应用跨区域部署并结合SLB能够支持应用跨区域冗灾。在不同地域下部署负载均衡实例,并分别挂载相应地域内不同可用区的ECS服务器。上层利用云解析做智能DNS,将域名解析到不同地域的负载均衡实例服务地址下,可实现全局负载均衡。当某个地域出现不可用时,暂停对应解析即可实现所有用户访问不受影响。SLB能够为用户提供SSL卸载功能,充当SSL代理服务器置于应用前端,卸除了后台应用ECS服务器对SSL加密数据处理的性能损耗,能够更加灵活地在云上进行应用流量转发,同时保证用户数据在对外公网传输的安全性。此外,SLB还能支持对DDoS、SYN Flood、UDP Flood、ACK Flood、ICMP Flood、DNS Flood等攻击防护,七层负载均衡还能额外支持一键集成WAF(Web Application Firewall),让应用层更加可靠。使用SLB实现应用的多机负载均衡并提供应用的流量入口是云上应用的普遍实践,SLB直接与ECS服务器进行关联,为了保证实例启停期间流量无损,当应用发生了变更需要人工介入调整应用的后端服务器组。一个活跃的应用具有易变性,需要时常进行版本升级或弹性扩缩,此时需要人工维护SLB中应用对应的监听及其后端服务器组;若应用绑定了七层负载均衡器,还需要维护其转发规则;当使用SLB进行HTTPS类型监听多域名转发配置时,证书的维护也给SLB的管理增加了复杂度;在需要考虑应用的跨区域冗灾时,维护成本成倍增加;且人工操作会使应用存在混乱的风险。
使用EDAS进行应用托管
使用EDAS应用管理平台进行应用托管能够支持用户以应用为最小单元进行应用的SLB管理,无需关注应用的后端服务器副本,EDAS自动为SLB添加监听及后端服务器组。在应用上线或下线时,用户在EDAS控制台即可完成将一个应用绑定或解绑SLB,用户无需关注应用的后端副本,无需人工维护SLB监听及其后端服务器组。在应用伸缩完成后,托管到EDAS上的应用能自动调整其SLB后端,能够极大的减少人工维护的成本,降低应用异常的风险。结合EDAS提供的应用自动部署能力和SLB后端自动更新功能,能够减少服务不可用的时间,缩短应用发布的周期。在EDAS中支持两种应用类型:
- 部署在K8s上的应用:用户无需理解容器服务底层细节,最大化地利用资源并完成应用在容器里的全生命周期管理,以及监控、运维等服务。
- 部署在ECS集群上的应用:EDAS为托管的应用提供了生命周期管理、CI/CD、监控、运维等一系列功能。
目标读者
- 使用SLB进行应用访问的用户
- 希望减少应用上下线的服务访问异常风险和应用维护成本的用户
- 使用应用管理平台EDAS进行全栈式应用托管的用户
适用场景
使用SLB访问K8s上的EDAS应用。
方案架构
方案优势
EDAS平台完美对接微服务引擎MSE,应用实时监控服务ARMS,日志服务,为EDAS上托管的应用提供微服务治理能力、应用监控与日志服务。使用EDAS托管应用并绑定SLB即可提供应用对外稳定ip、负载均衡、高可用、高并发等特性,同时EDAS能够维护SLB的后端监听,在应用上下线时能够自动维护监听后端的服务器实例,减少应用不可用的时间,降低手工操作异常风险。
方案实施
EDAS支持以容器的方式托管应用,EDAS代为构建镜像并部署到Kubernetes集群,有效简化流程降低使用门槛。阿里云上K8s集群中部署的CCM(Cloud Controller Manager)组件已支持将集群内一个应用的多个容器副本无缝对接到SLB后端,并支持应用进行弹性扩缩容时,自动将应用副本添加到SLB监听后端或从后端移除。使用SLB的两种方式:
重要
- 禁止从负载均衡控制台直接修改EDAS代购的SLB实例的监听配置(含监听+证书),可能导致SLB控制台修改的配置回退,引发应用入口相关的故障。
若复用SLB来暴露K8s上EDAS应用,则创建的SLB要和K8s集群在同一个VPC内。新建SLB或复用SLB的使用限制及配额,请参考负载均衡使用限制。使用SLB暴露出EDAS应用后,在K8s集群内部节点存在无法通过SLB地址访问EDAS应用问题,详细信息参考Kubernetes集群中访问LoadBalancer暴露出去的SLB地址不通。
前提条件
您已成功在EDAS控制台导入Kubernetes集群并部署了一个EDAS应用。
- 使用JAR包或WAR包部署应用。具体操作,请参见在容器服务K8s集群中使用JAR包或WAR包部署应用。
- 使用镜像部署应用。具体操作,请参见在容器服务K8s集群中使用镜像方式部署Java应用。
- 将K8s中Deployment转化为EDAS应用。具体操作,请参见使用控制台转化Deployment为EDAS应用。
使用SLB访问应用
使用SLB可以为一个应用的多个后端副本提供一个稳定的对外访问地址,并进行流量负载均衡。可以使用不同SLB来提供一个应用不同程序端口的对外访问,且不同的SLB可以配置不同的实例规格,以支持不同服务的不同业务流量需求。也可以使用多个SLB绑定同一组后端副本,以扩展单个SLB的规格限制,分担流量压力。K8s上EDAS应用支持使用公网SLB和私网SLB组合方式提供应用访问。能够使用公网SLB提供Web应用公网访问,使用私网SLB提供后端其他应用间内网访问。能够支持各个应用根据业务实际需求配置各自的应用扩缩及负载均衡。
操作步骤
- 为应用绑定公网SLB时,在访问方式配置区域,单击负载均衡(公网)右侧的图标。具体操作,请参见添加负载均衡SLB。
- 为应用绑定私网SLB时,在访问方式配置区域,单击负载均衡(私网)右侧的图标。具体操作与添加公网SLB一致,请参考添加负载均衡SLB。
复用SLB
为了降低成本,减少CLB的实例数,EDAS允许为多个应用共享一个SLB来支持对外服务访问,以支持多个应用通过配置不同的监听端口使用一个SLB对外访问。在EDAS中,找到需要使用SLB的应用,在进行访问配置时,选择同一个SLB并配置不同的监听端口及程序端口映射,即可支持多个应用使应用用同一个SLB。
前提条件
- 您持有一个或多个处于运行中状态的SLB实例。具体操作,请参见创建实例。
- 如果需要使用公网SLB绑定应用,则需CLB网络类型为公网;如果需要使用私网CLB绑定应用,则需要CLB网络类型为私网。
- SLB实例和K8s集群位于同一地域。
- 如果SLB实例和K8s集群实例的网络类型均为专有网络,则必须位于同一专有网络。
操作步骤
- 为应用绑定公网SLB时,在访问方式配置区域,单击负载均衡(公网)右侧的图标。具体操作,请参见复用负载均衡SLB。
- 为应用绑定私网SLB时,在访问方式配置区域,单击负载均衡(私网)右侧的图标。具体操作与添加公网SLB一致,请参考复用负载均衡SLB。
在EDAS上更新SLB配置
前提条件
- 您持有一个绑定了SLB的EDAS应用。具体操作,请参见添加负载均衡SLB。
注意事项
- 在EDAS中支持更改SLB的实例规格、调度算法、监听端口映射,对于EDAS新建SLB和监听的默认配置参考“EDAS新建SLB和监听配置默认值”模块。
- 对于EDAS代购的SLB禁止通过SLB控制台进行配置更改,以避免多入口更改配置导致的数据不一致问题,防止变更的配置回退;非EDAS代购的SLB支持在SLB控制台进行配置更改。
操作步骤
K8s中EDAS应用的转发规则配置
重要 通过EDAS平台代购的SLB禁止通过SLB控制台进行路由规则配置更改,非EDAS代购的SLB支持在SLB控制台进行路由规则配置。 在K8s上部署的EDAS应用,能够使用应用路由实现根据域名和URL进行流量分发,以实现七层负载均衡路由转发功能。应用路由中使用的SLB无需用户额外购买及配置,本文不进行详细说明,具体请参考添加应用路由Ingress。
K8s中EDAS应用的健康检查
重要 通过EDAS平台代购的SLB禁止通过SLB控制台进行健康检查配置更改,非EDAS代购的SLB支持在SLB控制台进行健康检查配置。 在K8s上部署的EDAS应用,可以通过配置应用生命周期的钩子和探针来替代SLB中监听的健康检查配置,如下图。使用这种方式可以根据应用中副本的健康状态动态的更新SLB中对应监听的后端,此外还支持更多的健康检查方式。请参考如何配置应用生命周期管理。
EDAS新建SLB和监听配置默认值
配置 | 默认值 | 说明 |
负载均衡带宽 | 5120 Mbps | |
负载均衡的IP版本 | ipv4 | |
负载均衡删除保护 | 打开 | |
负载均衡配置修改保护 | 打开 | |
会话保持时间 | 0s | |
会话保持开关 | 关闭 | |
健康检查开关 |
|
|
健康检查协议 | TCP | |
健康检查健康阈值 | 3 | 健康检查连续成功多少次后,将后端服务器的健康检查状态由fail判定为success。 |
健康检查不健康阈值 | 3 | 健康检查连续失败多少次后,将后端服务器的健康检查状态由success判定为fail。 |
健康检查间隔时间 | 2s | |
健康检查响应超时时间 | 5s | 接收来自运行状况检查的响应需要等待的时间,适用于TCP模式。如果后端ECS在指定的时间内没有正确响应,则判定为健康检查失败。 |
健康检查正常状态码 | http_2xx | |
访问控制功能开关 | 关闭 | |
TCP监听连接超时时间 | 900s | 配置TCP连接超时,连接空闲时间超过该时长后,负载均衡会主动断开该连接 |
HTTPS监听连接空闲超时时间 | 15s | |
HTTPS监听HTTP2特性 | 打开 |
发表评论