
前言
2021年,“十四五规划纲要草案”提出“加快数字发展,建设数字中国”,云计算不仅是“新基建”中的新型基础设施,更是数字化场景的重要基座,为上层智能应用加速落地提供了重要保障。因此,积极采用云上数字化战略已成为越来越多企业转型的核心。云上数字化转型往往涉及到多个方面,如架构现代化、应用现代化、云原生安全等诸多领域。今天就让我们通过安畅SmartOps混合云管理平台自身的架构现代化实践,来了解企业如何规划并构建云上现代化架构。
关于SmartOps:
安畅SmartOps是一款SaaS模式的云管理平台,通过统一视角实现多云资源纳管,权限分配、通过监控、费用分析帮你更合理的管控费用支出,加上强大的审计、工单、运维自动化等功能帮助你更高效的管理云资源。
一、SmartOps如何从微服务架构演进到云原生架构
云时代企业需要更完善的技术架构帮助自身应用获得更好的敏捷性、用户体验与更低的成本,而这些正好就是云原生架构专注解决的技术点。
SmartOps随着平台支撑客户的增长,在安全、性能、稳定性等方面都提出了更高的要求。为适应业务发展诉求,架构也需进行迭代升级。原始基于Spring Cloud全家桶的微服务架构,也在逐渐演进为基础设施下沉的云原生架构,充分让应用生于云、长于云,削减技术债务并且专注业务创新。
下图为SmartOps架构全景:
接入层:通过WAF/SLB,配合NAT网关治理出方向流量,部署堡垒机进行运维等,或使用其他辅助业务进行支撑;
应用层:采用腾讯TKE进行业务容器部署,配合K8s原生服务注册发现/配置中心/分布式调度中心/日志/监控/告警/链路追踪/DevOps等构筑完整应用体系;
数据层:存储使用有云硬盘/对象存储/CFS,数据库有MongoDB分片集群/MySQL/Redis/ElasticSearch
/RabbitMQ进行各类业务数据计算和存储。
二、SmartOps流量管控全景
2.1 南北流量
业务流量:业务流量入口最外层经过WAF进行安全防护,之后进入到公有云公网负载均衡,然后到TKE集群的NodePort实现流量接入;出口通过NAT网关实现流量分发。其他服务:其他支撑服务,如堡垒机,日志、监控等其他应用web通过堡垒机配合弹性公网IP/NAT网关实现流量接入与分发。
2.2 东西流量
在容器集群内,服务通过Kubernetes API-Server获取后端一组Service Pod真实IP,业务POD通过Calico网络进行POD与POD直接流量通讯。
三、SmartOps安全管控全景
3.1 SmartOps安全全景

全场景的安全架构规划:从网络边界、内部网络、各类基础设施、数据、业务应用到后期监控响应,在各层面均进行安全管控设计,实现全方位立体式防护;
云安全产品防护:借助SaaS安全产品实现安全体检(漏洞扫描、挂马检测、网站后门检测、端口安全检测等)与安全防御(DDoS 防护、入侵检测、访问控制来保证数据安全与用户隐私)以及安全监控与审计,形成事前、事中、事后的全过程防护;
业界主流安全工具平台赋能,如:
KubeLinter/Kubescape/Nessus/Sonarqube/AppScan等,严格把控平台从设计、开发、测试、部署、上线、运维等各流程安全,将SecDevOps贯彻在平台生命周期中,确保平台的安全性;
安全认证可信:SmartOps已获得三级等保认证,并且通过MSS服务(Managed Security Service,安全托管服务)持续对SmartOps进行日常安全运维。
3.2 SmartOps分层安全架构

接入层:守护边界网络安全,对业务流量及运维支持流量进行安全防护;
应用层:平台采用安全框架,并严格遵守SDLC,将SecDevOps安全最佳实践应用在全生命周期;
运维层:进行MSS持续性运维,对应用无论从外部探测到分布式链路,均进行安全可观测性实施;
云平台层:利用云平台提供安全产品及能力,践行云平台安全最佳实践,保护云上资源及运维安全;
K8s层:利用K8s内置安全机制,配合业界主流安全工具平台进行安全检测,及时快速反馈;
容器层:凭借公有云镜像安全能力,同时配合业界镜像安全扫描工具,确保镜像分层可信;
数据层:通过业务逻辑数据加密及各云基础设施高可用部署,同时进行业务数据备份恢复和安全审计;
系统层:通过对云服务器进行系统安全加固、漏洞补丁管理,确保系统安全。
四、从DevOps到SecDevOps的演进
4.1 DevOps V1.0
起初DevOps使用Gitlab CI进行管控。
CI/CD:各业务代码仓库保护.gitlab.yml,利用Gitlab CI进行CI和CD过程;
镜像管理:构建出来的镜像使用镜像仓库Harbor进行管理;
容器编排:在CD过程中,利用kubectl set image进行容器编排部署,自建Kubernetes集群进行业务容器编排管理;
高可用:当某个节点出现故障时,Kubernetes 会自动创建一个新的GitLab-Runner 容器,并挂载同样的Runner 配置,使服务达到高可用;
弹性伸缩:触发式任务执行会最大程度利用资源,每次运行脚本任务时Gitlab-Runner会自动创建一个或多个新的临时 Runner来运行Job;
资源最大化利用:动态创建Pod运行Job,资源自动释放,而且 Kubernetes 会根据每个节点资源的使用情况,动态分配临时Runner 到空闲的节点上创建,降低出现因某节点资源利用率高还排队等待在该节点的情况;
扩展性好:当 Kubernetes 集群的资源严重不足而导致临时Runner 排队等待时,可以很容易的添加一个 Kubernetes Node到集群中,从而实现横向扩展。
利用Gitlab CI 共享模块库,可最大程度实现CI代码复用性。
4.2 DevOps V1.1
在原始CI/CD流程中缺乏安全方面全场景检测,在代码、镜像、环境配置等场景均存在各类安全风险,因此必须实行安全左移。主要从以下五个阶段实现在安全全场景建设:
第一阶段:威胁建模(场景分析)梳理并绘制软件生命周期可能引发安全问题的场景;梳理平台架构存在安全风险的部件以及敏感数据的流向,帮助全员建立安全模型并提升团队安全意识;
第二阶段:通过安全扫描(DevOps集成安全)评估代码安全风险,确保不存在安全漏洞。此处包括手动和自动代码审查。在此步骤中,使用了 lint 和 scan 等AppSec 工具。由于处于软件开发生命周期的早期,此阶段允许工程师解决大多数安全漏洞和缺陷;
第三阶段:针对工具检测出来的安全风险问题以可视化的方式呈现并进行周期性通知,让全员知道安全问题;
第四阶段:进入补救修复阶段,通过sonarqueb代码管理工具可以针对发现的漏洞、缺陷提出修复建议,这样的操作是为了在出现安全问题时更容易处理它们;
第五阶段:进入监控阶段,跟踪监控发现的漏洞,努力减轻或消除他们,并对应用程序进行安全评估。通过跟踪和管理风险,在软件生命周期中作出决策对安全风险进行持续性安全实施。
4.3 SecDevOps V1.2
开发阶段:从安全意识培训、安全编码、代码静态扫描到最后进行提交代码Code Review,将安全左移到研发全流程中(安全性已成为软件生命周期不可分割的一部分,所以进一步向左转移安全性,SecDevOps而非DevSecOps);
CI/CD:通过Gitlab+Drone CI+Argo CD进行持续集成持续部署,其中代码单元测试可以利用代码及配置检测工具进行代码扫描,实现合规检测;
制品管理:利用镜像安全工具对制品镜像进行分层安全分析及漏洞安全扫描,确保镜像layer安全可控;
容器管理:利用kube-bench/kubeEye/kube-eventer等对容器集群、业务容器进行合规检测与异常事件告警;
业务管理:进行持续性MSS运维,利用Nessus/Acunetix/AppScan等业务系统进行安全漏洞扫描以及持续性安全运维。
上图为CI/CD WorkFlow,在CI最后一步通过Trigger触发CD Action,进行配置部署仓库修改、Argo CD检测到配置的修改以及最新资源的部署。
利用基于 Kubernetes 的声明式 Gitops 持续部署工具Drone CI + Argo CD,可以更便捷地进行应用定义、环境配置和变量管理。代码及配置资源声明清单也都存储在代码仓库受版本管理,使得应用发布及生命周期管理实现自动化且具备可审计性。
在SecDevOps中没有永远的安全。我们只需专注于解决核心安全问题,预测安全风险,尽可能降低安全隐患,并且在流程中贯彻安全意识,借助安全工具尽可能降低安全风险并持续优化。
安全是为了业务保驾护航及降低后期安全技术债务,而不是阻碍研发效能的提升,因此开发团队应遵守安全措施集成到开发过程中,不是完成开发后再去检测修复。安全与效能应该紧密结合,同进发展。
温馨提示
下周的专栏中,我们会与大家分享SmartOps混合云管理平台在云原生架构、可观测性建设方面的迭代与升级。感兴趣的同学可以持续关注本公众号的专栏推送。


