APP下载

定制Kubernetes 密码资源及金融机构应用实践*

2020-07-19周恒磊

通信技术 2020年6期
关键词:容器集群密码

周恒磊

(中国银联信息总中心,上海 201201)

0 引言

(1)课题背景及研究意义

云计算是一种融合了多项计算机技术,以数据和处理能力为中心的密集型计算模式,近十年云计算技术已经从发展培育期步入快速成长期,越来越多的企业开始使用云计算服务。但传统的云计算及虚拟化技术存在两个主要的问题,一方面虚拟化管理软件(Hypervisor)本身的资源消耗与磁盘IO 性能降低,另一方面虚拟机仍然还是一个独立的操作系统,而操作系统的运行仍会消耗系统资源,对很多类型的业务应用来说都显得太重。Docker 作为一种新兴的容器技术有效解决了传统云计算与虚拟机技术存在的资源利用率低、软件堆栈环境不一致等问题,相比传统虚拟化方案,具有更轻量、易于移植、环境一致性等优势。将Docker 应用于具体业务实现时面临的编排、管理和调度等各方面困难,迫切需要一套容器管理系统,Kubernetes 作为一种容器集群管理系统的佼佼者,在业界得到广泛应用。容器虚拟化技术以其轻便、灵活和快速部署等特性对传统的基于虚拟机的虚拟化技术带来了颠覆性的挑战,正在改变着基础设施即服务(IaaS)平台和平台即服务(PaaS)平台的架构和实现[1]。

本文中云密码机被部署到Kubernetes 容器集群系统中,在将云密码机部署到Kubernetes 集群架构的过程中,scheduler 组件进行资源调度主要以CPU、内存、磁盘作为调度指标,并未考虑密码资源,导致集群系统负载不均衡,运行效率受到影响,本文将研究怎么把密码资源作为定制资源扩展到Kubernetes 系统中以实现密码资源的动态分配与负载均衡,提高系统运行效率。

(2)金融机构业务系统发展现状

云计算是IT 基础设施的新型交付与使用模式,它以虚拟化技术为基础,具备弹性扩展、动态分配、资源共享、随时获取等新型特点,与金融机构业务互联网模式转型契合。国内金融机构在过去几年中跟踪国内外云计算发展趋势,开展相应前瞻性技术研究,时至今日已经规模化建设应用,有效提升了金融业务部署上线效率,大大简化了IT 运维人员的操作,也为金融业务的开展与扩大提供了强大的技术支撑。发展金融云业务,有以下几点优势:

成本投入降低,使用云计算服务,比购买专用的物理硬件要便宜得多,同时降低了IT 的硬件和运维成本,比如原来硬件的高可用性,通过软件和运维工作来弥补。

业务比较灵活,云计算给企业带来更大的灵活性,企业根据自身的状况来决定是否需要增加服务,根据自己的发展状况,选择性地增加服务,使资源的利用性最大化。

便于运维管理,传统的企业IT 架构,需要大量技术人员运行、维护,还有应对网络安全的威胁,这些日常成本是非常高的。云技术自身的特性使得技术人员不必再为每台终端设备安装解决方案,服务项目也将自动获得更新。

随着云计算进入Cloud 2.0 阶段,在ABC(AI人工智能、Big Data 大数据、Cloud Computing 云计算)与产业深度融合的大趋势下,金融业务体系的日趋多元化、终端智能化,对服务云化的需求迫在眉睫。对银行业金融机构来说,金融安全的意义十分重大,银行卡密码、账户密码、网站密码……是与每个人生活息息相关的事情。对个人而言,密码的重要性不言喻。而对企业而言,密码不仅仅是简单的一串数字,或者一个U 盾,一张密码卡,几台密码设备那么简单。密码安全的背后,可能是一系列复杂的软硬件基础设施建设与服务。传统密码机为保证金融业务安全提供服务,但已不能满足金融服务云化的需求,云密码机应运而生,云密码服务将密码服务与云计算平台进行结合,通过调度加密机集群,根据密码资源饱和度进行动态资源分配,使密码运算速度大大提高,Kubernetes 集群系统也使得密码服务的稳定性与容错性得到极大提升,更好的为用户提供集中化、虚拟化、透明化的密码运算服务。

(3)本文研究思路及主要内容

本文的主要研究目标是将云密码机作为定制资源添加到Kubernetes 集群系统中,以实现密码资源的按需分配与动态调整,最后和某金融机构业务结合提升金融云服务质量。因此,研究内容主要包括以下几个方面:

首先分析Kubernetes 架构,各组件的功能,及云密码机关键技术与特点,接着说明Kubernetes 定制资源(Custom Resource)以及怎么定制、使用密码资源,最后展示在某金融机构的应用示例。

第一章介绍Kubernetes 与云密码机核心概念,包括Kubernetes 架构与云密码机关键技术。

第二章说明Kubernetes 定制资源及密码资源的定制和使用。

第三章展示密码资源在某金融机构业务中的应用。

第四章进行总结与展望。

1 Kubernetes 与云密码机

1.1 Kubernetes 核心概念与系统架构

1.1.1 Kubernetes 介绍与基本架构

Kubernetes 是谷歌公司开源的容器集群管理系统,其前身为谷歌内部的Borg 系统。Kubernetes 是一个全新的分布式架构领先方案,构建在以Docker为代表的容器技术之上,实现自动部署、扩展和管理容器化的应用程序以及资源利用率的最大化。Kubernetes 发展总共只有短短几年,但由于其吸收了Borg 多年来的经验与教训,凭借其优秀的设计理念、强大的管理功能已经迅速成为云计算领域主流的容器集群管理系统,甚至也能容纳进OpenStack生态圈。

Kubernetes 基于Docker 容器技术,但同时也支持其他底层容器技术,实现了跨节点Docker 容器的管理,并为容器化应用开发测试、部署、运维等各个环节提供完备的支持。Kubernetes 作为一个开放的平台,不受编程语言的限制,任何语言编写的应用都能非常方便地映射为Kubernetes 的Service,并通过标准TCP 通信协议进行交互。

Kubernetes 对现有的编程语言、编程框架、中间件没有任何入侵性,因此现有系统可以方便地迁移到Kubernetes 平台上。构建在Kubernetes 的系统不仅可以独立运行在物理机、虚拟机集群或者托管在公有云中,同时也能部署在企业的私有云上。

Kubernetes 基本架构如图1 所示。

图1 Kubernetes 基本架构Kubernetes 核心概念

为了方便管理容器化应用,Kubernetes 在Docker容器的基础上抽象出一些概念,这些概念在Kubernetes 中以资源对象的形式存在。Kubernetes使用资源对象描述集群的期望状态。它提供了很多默认资源类型,如Pod、Deployment、Service、Volume 等一系列资源,能够满足大多数日常系统部署和管理需求。几乎所有的资源对象都可以通过Kubernetes 提供的Kubectl 工具控制。

同时,在一些特殊的需求场景下,这些现有资源类型满足不了应用需求,需要使用Kubernetes的可扩展资源特性,将容器化应用所需的其他资源抽象为Kubernetes 的自定义扩展资源(Custom Resource Definition)。

(1)Master

Master 是Kubernetes 中最关键的集群控制节点,用来负责整个集群的管理和控制,基本上所有的控制命令都发送给它,是整个集群的核心。通常需要单独的服务器部署,生产环境中通常会部署多个。Master 节点上运行着API Server、Controller Manager、Scheduler 等重要进程。

(2)Node

除了Master,Kubernetes 集群中其他机器都为Node 节点,每个Node 上可运行多个Pod,同时Node节点支持动态扩容,可以在运行期间增加到集群中,实现负载均衡。Node 节点上运行着Kubelet、Kubeproxy、Docker Engine 等关键进程。

(3)Pod

Pod 是Kubernetes 中最基本也是最重要的概念,一个Pod 包含一个或多个紧密相关的用户业务容器,是Kubernetes 集群中调度的最小单位。每个Pod 具有一个特殊的根容器Pause 容器,Pause 容器的镜像属于Kubernetes 平台,它的状态代表整个容器组的状态。

(4)Label

Label 用于识别对象,是一种(key,value)类型的键值对。用户在定义任何资源对象时都可以为其指定一个或多个Label,通过给指定的对象捆绑一个或多个Label实现多维度的资源分组管理功能,从而灵活、方便地进行资源分配、调度、配置、部署等工作。

(5)Replication Controller

Replication Controller (RC)由三部分组成:期望副本数、筛选Pod 所需的Label Selector 以及创建新副本需要的模板,用于控制Pod 副本数量始终达到期望值。定义一个RC 并提交到Kubernetes 集群后,系统会定期检查目标Pod 当前的存活数量。通过RC,Kubernetes 实现了用户应用集群的高可用性,并且大大减少了手工运维工作。

(6)Service

Service 相当于微服务架构中的一个“微服务”,是Kubernetes 中最核心的资源对象,它是一组Pod提供服务的抽象。Service 代表一个服务的访问入口,用户或其他服务可通过这个入口访问其抽象的Pod,与其后端的Pod 之间通过Label 实现连接,而Replication Controller 控制Pod 副本数以保障服务的质量达到期望标准。

1.1.2 Kubernetes 特性与功能

(1)自动伸缩

集群中节点和运行中Pod 的数量能够动态调整负载,可自动解决业务高峰与闲暇时服务性能问题,在必要时根据不同情形自动地扩容集群,并在不需要时缩容,实现集群动态的弹性伸缩[2]。

(2)负载均衡

支持通过负载均衡器动态为每个Node 分配工作负载,当某个Node 负载较高时,其上的工作负载会自动分配转移到其他节点,并通过proxy 配合cloud provider 来适应不同的应用场景[3]。

(3)资源监控和日志记录

Master 节点会获知每个Node 的资源使用情况,根据现有资源实现高效均衡的资源调度策略。同时,Kubernetes 提供给用户各个级别的资源详细使用信息,使用户深入地了解应用的执行情况。

(4)快速部署、扩展应用

容器占用资源少、部署快,每个应用可以被打包成一个容器镜像,不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境。同时容器比虚机更轻量、更“透明”,更便于监控和管理。

1.2 云密码机特点及关键技术

1.2.1 云密码机介绍与产品特点

云密码机是以现代密码技术为核心,具有物理安全保护措施,具备完善密钥管理机制的硬件设备。该密码机采用虚拟化技术,在一台密码机中按需生成多台虚拟密码机Virtual Security Module(以下简称VSM),多台VSM 可组成集群,VSM 或VSM 集群对外提供与传统密码机一致的密钥管理和密码运算服务[4],同时,云密码机采用安全隔离技术,保障各VSM 之间密钥的安全隔离属性。

云密码机可按需将VSM分配给业务系统使用,并可弹性调整VSM 的性能,从而实现密码计算资源的集约利用、动态伸缩,以及密码设备的有效管理和维护,满足云计算环境、传统计算环境中数据加密保护、金融支付、密钥管理及身份认证等安全需求。

云密码机可广泛应用于各级党政单位,以及互联网、金融、能源等行业,可在云计算环境、传统计算环境中为用户提供密钥安全管理、安全密码运算等功能。云密码机特色主要有:

(1)高可用性与智能化集群

支持VSM 集群、负载均衡,提供高可用性的密码服务,保障用户业务的连续性。VSM 集群内部实现了智能化配置,只需在创建VSM时设置集群名,VSM 即可自动组成集群。

(2)安全合规性

云密码机采用国家密码管理局批准的硬件密码芯片实现密码算法,采用多路物理噪声源产生高质量的随机数。采用防拆、防撬结构设计,利用全密封机壳、物理锁控制开启面板等技术为密钥的管理提供了强有力的保护。采用安全隔离技术实现各VSM 密钥在存储和使用过程中的安全,并支持管理通道和业务通道的安全保护,全方位保护用户在云计算环境中的密钥和密码运算安全。

(3)弹性密码计算

云密码机也可根据应用的需求动态伸缩、按需调配资源,同时应用所需的密码功能也应能按需动态加载,主要体现在资源集群伸缩与访问控制自动配置方面。通过智能云监控技术,对密码服务次数、加密服务器CPU/内存硬件性能等指标进行统计,结合智能决策算法确认当前云密码机集群与服务的繁忙程度。当业务繁忙程度过高时,通知云密码机管理程序,自动调度空闲云密码机池资源。相反,当业务繁忙程度降低后,也将根据智能算法自动回收过剩资源。

(4)全业务支持

支持数字签名、数据加密、身份认证等应用安全功能,可满足多种安全需求。云密码机的重要特点之一就是“软件定义”,内部可运行多种类型不同版本的VSM,从而适应不同业务需求的、随应用变化的、用户自定义的扩展密码服务,无需密码机软硬件升级换代,即可满足不同业务、不同用户的差异化特色化需求和应用业务扩展。

1.2.2 云密码机关键技术

云密码机是一台硬件服务器,对外提供VSM,VSM 以集群的形态存在,由Kubernetes 的Kubeproxy 实现VSM 集群的负载均衡,由Kubernetes 的Service 对外提供密码服务。其关键技术包括集群技术、自治系统技术等。

(1)集群技术

多个VSM 可组成集群,为业务系统提供可横向扩展的高性能密码服务,同时也保证了密码服务的高可用性。VSM 集群中自动实现密钥和配置数据同步,对任何一台VSM 进行密钥操作或配置操作,均会实时同步到集群中的其他VSM 中,大大简化VSM 集群的管理功能[5]。

(2)自治系统技术

VSM 集群内部实现了自治系统技术,通过该技术,无需用户介入配置,VSM 集群内部能自动发现各个VSM 节点,并自动组成集群。

2 定制密码资源

2.1 Kubernetes 定制资源

2.1.1 定制资源(Custom Resources)

定制资源不是Kubernetes 的内置资源,而是基于Kubernetes API 扩展的资源。为满足不同应用业务环境下对平台的一些特殊需求,Kubernetes 允许用户创建定制资源。通过动态注册,定制资源可在处于运行状态的群集中显示和消失,集群管理员也可独立于集群本身来更新定制资源。添加定制资源后,用户可使用Kubectl 创建和访问其对象,就像使用Pods 之类的内置资源一样。

2.1.2 定制控制器(Custom controllers)

定制资源只是通过json 或yaml 描述语句存储和检索结构化数据,只有在与定制控制器结合后才能成为真正的声明性API。声明性API 可以声明或指定所需的资源状态,并保持Kubernetes 对象的当前状态与所需状态同步。简单来说,定制控制器将定制资源的结构化数据解释为用户期望状态的记录,并不断采取行动来实现和维持该状态。

定制控制器的使用方便,用户可在运行的集群上部署和更新定制控制器,这与集群自身的生命周期无关。定制控制器也可用于内置资源,不过与定制资源结合使用时更有效。

2.1.3 定制资源添加方法

Kubernetes 提供了两种方式添加定制资源:

(1)Custom Resource Definitions (CRDs):更易用,无需编码,但缺乏灵活性。

(2)API Aggregation:需要编码,允许通过聚合层的方式提供更定制化的实现。

2.1.4 访问定制资源

Kubernetes 提供了4 种访问定制资源的方式:

(1)Kubectl;

(2)Kubernetes 动态客户端;

(3)资源定制者编写的REST 客户端;

(4)使用Kubernetes 客户端生成工具生成的客户端。

2.2 工作原理

client-go 是一个调用Kubernetes 集群资源对象API 的客户端,可通过client-go 实现对Kubernetes集群中资源对象的增删改查等操作。大部分对Kubernetes 进行前置API 封装的二次开发都通过client-go 第三方包来实现。

图2 展示了client-go 库各组件如何工作以及同Custom Controller 的交互。

从图2 中可以看到几个核心组件以及交互流程,上面是client-go 组件,下面是定制控制器组件,各组件作用介绍如表1 所示。

图2 client-go 库与Custom Controller 交互过程

表1 client-go 库与Custom Controller 组件说明

2.3 定制和使用密码资源

在Kubernetes 中通过CRDs 添加定制密码资源。首先创建一个定制密码资源的CRD,Kubernetes API 服务器会为CRD 的每个版本创建一个新的RESTful 资源路径。然后创建一个新的命名空间(底层依赖于同一个物理集群的虚拟集群)的RESTful API 端点,使用该端点的URL 可以创建和管理定制密码资源对象,这些对象会受到创建CRD 时编写的规则的定时监管。

通过client-go 库,编写定制密码资源的实现chsm-ext 库。chsm-ext 库有以下的信息:

API Server 的地址以及连接API Server 的认证信息。

Kubernetes API resource 的group 和version,以及结构体的定义。

控制序列化与反序列化API Server 的结果的序列化器(serializer)。

部署chsm-ext 库到Kubernetes,在Kubernetes中根据CRD 对象资源创建出来的RESTful API 创建密码资源对象。

用chsm-ext 库提供的信息去API Server Watch/List 定制密码资源。Reflector 通过检测Kubernetes API 来跟踪该定制密码资源的变化,一旦发现有变化,就将该对象存储到Delta Fifo queue 队列中。Informer 循环取出该对象,Indexer 为此对象创建索引,将对象以及它的Key 存入安全区域,同时触发Callback 回调函数,并将变更的对象Key 信息放入到工作队列中,此时定制控制器的Process Item 会获取工作队列里的Key,并从Indexer 中获取Key 对应的对象,从而进行相关的业务处理。

在云密码机部署kubelet 组件和kube-proxy 组件,Master 审批Node 加入集群。在kubelet 创建时就已经创建了节点状态的收集方法,通过pkg/kubelet/kubelet_node_status.go 里 的tryUpdateNodeStatus 方 法实现密码资源信息的定期上报。

在Kubernetes 中,在创建VSM deployment 时,声明对密码资源的要求。Kubernetes 调度器根据声明中密码资源及其他资源的需求调度VSM POD 到密码资源能够满足需求的云密码机中。云密码机会定期上报密码资源的使用情况,Kubernetes 调度器能根据最新的资源使用情况限制新VSM 的部署或者删除多余的VSM。

3 定制密码资源在某金融机构的应用

定制后的密码资源可用于金融机构现有的私有云环境中,为多个业务系统提供高性能、高可靠、按需分配的密码服务。同时,云密码机统一接入云管理平台,实现密码资源的云化管理,简化管理过程。

云密码机被部署到Kubernetes 集群中,用户根据每个业务系统的业务需求,使用密码资源数量作为度量指标,为其建立相应的VSM Deployment,Deployment 中多副本VSM POD 自动组成集群,为业务系统提供自动化、高可用的密码服务,其应用场景如图3 所示。

云密码机会监控在其上运行的每个VSM POD的状态并定制上报Kubernetes,当VSM POD 出现不可恢复故障时,Kubernetes 会阻断到该VSM POD 的交易,然后重新创建一台VSM POD,新创建的VSM POD 可自动加入集群并为业务系统提供交易服务。

图3 定制密码资源在某金融机构的应用场景

针对一些需弹性密码服务的业务系统,例如高峰时段的交易是平时交易数倍的业务,用户为这些业务系统的VSM deployment 建立HPA(Horizontal Pod Autoscaler,水平POD 自动伸缩器),该HPA根据云密码机上报的VSM POD 密码资源的使用情况,自动对VSM deployment 进行伸缩。当VSM deployment 中所有VSM POD 的密码资源占用超过一定阈值后,HPA 会自动在VSM deployment 增加副本数;当VSM deployment 中所有VSM POD 的密码资源占用低于一定阀值后,HPA 会自动在VSM deployment 减少副本数。通过该机制,既保证了高峰时段的高性能密码需求,也能在低峰时段减少密码资源占用,将更多密码资源交给其他业务系统。

通过在Kubernetes 中定制密码资源并使用密码资源作为度量调度云密码机,具有以下几点优势。

响应速度更快:相比传统密码服务,云密码机部署在分布式环境下,业务处理速度明显加快,这也是云服务的优势所在。

高可用:当集群中的某个 VSM 发生故障时,系统可以将其上的业务自动进行迁移,相比与传统密码服务具有更高的容错性。

按需分配:系统可根据需要分配 VSM 集群,以达到资源利用性最大化。

动态调整:系统可根据密码资源的使用情况,动态的增加或减少 VSM 数量,既满足高峰时段需求,又能节约密码资源使用,节能减排。

4 总结与展望

服务云化和提高网络安全性是大势所趋,云密码机是顺应潮流诞生的产品,它不仅能接下传统密码机承担的安全任务,还能进一步扩展提升,有广阔的市场前景。以目前云计算热门的 Kubernetes 平台为例,Kubernetes 可通过定制密码资源实现密码服务云化和集群化,提供良好的弹性密码服务。未来,可基于此方法将云化业务推广到更多传统金融业务中,进一步满足金融云计算网络体系架构未来的发展需求。

猜你喜欢

容器集群密码
密码里的爱
容器倒置后压力压强如何变
难以置信的事情
海上小型无人机集群的反制装备需求与应对之策研究
培育世界级汽车产业集群
密码抗倭立奇功
一种无人机集群发射回收装置的控制系统设计
勤快又呆萌的集群机器人
密码藏在何处
取米