云原生的崛起
2013 年春,Docker 技术开源宣告了云原生计算的序幕,Docker 公司创新提出应用打包规范 Docker 镜像,将应用及其所有依赖项打包,从而使应用可以在不同的计算环境之间快速、可靠地运行,容器镜像迅速成为了应用分发的行业标准。 随后 Google 开源的 Kubernetes 因为其优秀的开放性、可扩展性和活跃的社区,在容器编排之战中脱颖而出。 Kubernetes 屏蔽了底层基础架构的差异,提供了良好的可移植性,可以帮助应用一致地运行在不同的环境,包括数据中心、云、边缘计算等。容器技术的标准化促进生态的分工和协同,基于 Kubernetes,社区开始构建上层的业务抽象,比如:服务网格 Istio、机器学习平台 Kubeflow 以及无服务器应用框架 Knative 等等。作为云原生技术的演进,无服务器计算(Serverless)进一步释放了云计算的能力,将弹性伸缩、高可用、安全等需求由基础设施实现。
云原生的定义

云原生(CloudNative)最初用来描述云上应用的典型架构与特性,随着容器、kubernetes、Serverless、FaaS技术的演进, 云原生计算基金会(CNCF)将云原生的概念更广泛地定义为“让应用更有弹性、容错性、观测性的基础技术,让应用更容易部署、管理的基础软件,让应用更容易编写、编排的运行框架等”。 相较于传统IT架构,云原生的最大价值和愿景,就是认为未来的软件会从诞生起就生长在云上,并且遵循一种新的软件开发、发布和运维模式,从而使得软件能够最大化地发挥云的能力。

云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。 云原生的代表技术包括容器(Containers)、微服务(Microservices)、DevOps、服务网格(Service Mesh)、无服务(Serverless)、声明式API(Declarative APIs)、不可变基础设施(Immutable Infrastructure)等。 这些技术能够构建容错性好、易于管理和便于观察的松耦合系统,结合可靠的自动化手段,轻松地对系统作出频繁和可预测的重大变更。

云原生安全

面对快速开发和部署的迫切需要,基于边界的传统安全保障显得力不从心。为适应云原生应用的规模扩展以及快速变化,要求使用面向安全的架构设计, 云原生安全构建在云原生应用开发、发布、部署、运行的整个生命周期中,涉及云(Cloud)、集群(Cluster)、容器(Container)和代码(Code)等不同层级的安全性建设。

PKI技术及数字证书应用能够提供身份证明、数字签名、数据加解密等安全能力,为云原生应用实现机密性、完整性、真实性、抗抵赖性等安全特性。

证书应用

容器编排系统组件通信安全、服务网格数据传输加密、微服务架构下的认证管理等都需要涉及证书应用。 以Kubernetes为例,Kubernetes(也被称为K8s)是Google于2014年6月开源出来的容器编排调度引擎,用于管理云平台中多个主机上的容器化的应用, 让部署容器化的应用简单并且高效。Kubernetes中包含多个以独立进程形式运行的组件, 这些组件之间通过 HTTP/gRPC 相互通信,在进行网络通信时,通信双方需要验证对方的身份,以避免恶意第三方伪造身份窃取信息或者对系统进行攻击。 因此,Kubernetes 需要 PKI 证书才能通过 TLS 进行身份验证。

Kubernetes 如何使用证书

Kubernetes 控制平面中包含 etcd,kube-api-server,kube-scheduler,kube-controller-manager 等组件,这些组件会相互进行远程调用,Kubernetes 需要以下 PKI 证书进行操作:

  • kubelet 用于向 API 服务器进行身份验证的客户端证书
  • 供 API 服务器与kubelet 通信的Kubelet服务器证书
  • API 服务器端点的服务器证书
  • 集群管理员用于向 API 服务器进行身份验证的客户端证书
  • API 服务器与 kubelet 通信的客户端证书
  • API 服务器与 etcd 通信的客户端证书
  • 用于controller manager与 API 服务器通信的客户端证书/kubeconfig
  • scheduler与 API 服务器通信的客户端证书/kubeconfig
  • 前端代理的客户端和服务器证书

上述证书应用,建议采用统一的CA 来颁发 kubernetes 集群中的所有证书,采用一个集群根 CA 比采用多个CA的方式更容易管理。 安全证书颁发机构(CA)可以是默认的编排系统CA,也可以是外部 CA。

KMS应用
容器镜像加密

对容器镜像进行加密,从而保证镜像内容的机密性。加密后,以确保它们从构建到运行前都是密文态。当加密镜像分发后受到破解,制品库中存储的镜像仍然是加密的,这有助于保护商业机密或其他保密材料等。 当镜像加密、密钥管理与授权、认证发布等相结合时,可以要求容器镜像只能在特定平台上运行。容器镜像授权也适合保证合规性,例如地理限制、出口管控和数字版权媒体管理。

容器编排系统加密

利用密钥管理系统(KMS)是保护编排系统数据秘密的一种安全方式。在容器编排或部署时,可以使用外部密钥管理系统来管理密钥,也可以直接使用编排系统本地的密钥。 外部的 KMS 将对数据加密密钥(DEK)进行加密,然后使用 DEK 对保存在 etcd 中的数据进行加密。使用外部密钥管理系统可以降低使用明文的风险,并降低密钥管理的复杂性。

存储加密

存储系统可以通过数据加密的方法来确保数据的保密性。在许多系统中,传输中的数据是用 TLS 保护。 静止状态下的数据通常使用标准的对称加密算法(如 AES )进行保护,并可部署特定的加密模式,如用于块设备的 XTS 。加密功能往往依赖于密钥管理系统(KMS)的集成。