服务发现:后台服务全部接入北极星名字服务,向北极星注册实例、定期发送心跳,接入从北极星获取各类服务健康实例来分发请求。
无状态:当前系统存在状态的场景主要有两类。
文件下载:主要是防护设备的策略文件下载,无状态化改造涉及待下载文件在多个文件服务实例间同步。解决方案是选择使用 CFS 来同步文件。
策略分包下发:策略太大时应用层做了分包,同一请求哈希到同一后台策略服务实例。解决方案是请求中带上当前分包状态信息,任一策略服务实例可以处理且结果一致。
配置管理:与运行环境无关的配置,接入七彩石配置中心,保证同一类型部署的实例配置一致。
日志监控:迁移到智研日志汇、监控宝。
两大“拦路虎” 如何平滑迁移当前物理机环境稳定运行,计划逐步灰度、切量到TKE环境,因此会有一段时间是物理机+ TKE 混跑的状态。管控接入、后台服务迁移 TKE ,对于防护设备 agent 是透明的。因为防护设备 agent 只会选择一个可用接入建立连接,即 agent 只会连到物理机环境或 TKE 环境,因此后台服务与 agent 交互时,混跑状态下涉及物理机环境和 TKE 环境互访的情况。这种情况 TKE 提供了灵活的配置支持。
在 TKE 上部署服务时,提供了两种网络模块:
Global Route : VPC 内私有 IP ,无法从集群外访问,不可以注册到 CMDB 。开启随机端口映射后可从集群外访问,并可绑定 CLB 和北极星。
ENI IP :公司内可路由 IP ,可从集群外访问,可以注册 CMDB 、 CLB 和北极星。
在混跑灰度期间,接入部署选择 ENI IP 的方式,物理机后台服务访问 TKE 接入跟访问普通内网服务无异。迁移完成后,后台服务改用 Global Route 的方式,仅允许集群内互访。后台服务间通过原生的 service 访问,对外只通过 CLB 暴露服务。
不断变化的 IP由于 DDoS 攻防对抗的业务特性,我们长期跟 IP 打交道,对 IP 有一种特殊的情节。在内部交流中,我们发现大家在迁移 TKE 过程中都会遇到一些共性问题。其中,跟 IP 相关的问题就会经常被提及。
在物理机部署环境,机器 IP 是固定的且变化频率较低(几年一次的机器裁撤)。但是在 TKE 环境,重启一次服务,分配到的容器 IP 、节点就可能变了,导致系统中依赖 IP 实现的功能无法很好适应 TKE 环境。
访问鉴权比较简单的鉴权是基于源 IP 加白,如接口访问、 DB 访问。对于接口访问,我们定义了一套基于 JWT 的接口鉴权规范,所有对外接口不再使用源 IP 加白的方式。对于 DB 访问,当前是使用不限源的独立 DB 账号,并对权限做更细的划分(精确到表)。后续 DB 权限支持实时申请,当容器起来以后通过接口申请当前容器所在节点的访问权限。
服务发现原来的架构中,管控接入层实现了简单的服务注册、服务发现功能,后台服务通过 IP 配置来注册、上报心跳。如果接入层不迁移到 TKE 、继续保持相对固定,那么这套方案还是可行的。但是,接入层迁移到 TKE 后,自身的部署节点也在不断变化,因此需要一个独立与接入、相对固定的服务注册与发现模块。集群内部署的服务可以使用 K8s / TKE 原生的 service ,对于物理机和 TKE 混跑的情况则可以考虑北极星名字服务。
服务暴露这里包含两层含义,一个是该暴露给外部的服务如何保持稳定,另一个是不该暴露给外部的服务如何隐藏起来。
(1)暴露服务给外部
在物理机环境,机器裁撤导致服务IP变化就是经常出现的问题,通过域名、 VIP 都可以解决。在 TKE 上,通过 CLB 来实现。
(2)隐藏内部服务
通过 VPC 内私有 IP ,就能保证服务无法从集群外访问,实现隔离。
我们系统的最终目标是:所有对外服务通过接入层暴露出去,做好鉴权;内部的后台服务都隐藏起来,保证安全性。
上云效果防护调度平台上云之后,