托管kubernetes和OpenShift托管如何在IBM Cloud中工作。 第1部分-体系结构和安全性

可以将开发与艺术家作为主要开发人员的图片进行比较。 创建一个优雅的微服务应用程序-最好的建筑师-现代主义者的创造。 但是,要使流程顺畅进行,并留下选择的机会-艺术。 在本系列的第一篇文章中,我们要讨论如何创建和运行IBM Kubernetes服务和IBM Managed OpenShift云服务,以及如何免费在IBM云中部署和测试Kubernetes集群。


“ 1849年黑海舰队的回顾”艾瓦佐夫斯基


在过去的十年中,IBM云一直在获得功能。 一切都始于为大型企业提供服务的共享基础架构,然后是基于SoftLayer数据中心的虚拟机和物理机,然后是PaaS的五年构建(基于Cloud Foundry运行时)以及大量服务的演进。 莫斯科开发团队还参与了部分服务的创建。 但是今天,它与服务无关,而是与托管kubernetes和openshift托管有关,以及它们在IBM云中的工作方式。 由于该项目是内部项目,因此无法透露许多细节,但是有可能打开特定的帷幕。


什么是kubernetes?托管kubernetes / openshift与本地安装有何不同


Kubernetes最初定位为用于管理容器化应用程序和服务的开源平台。 kubernetes的主要任务是(我将不做翻译,以免破坏术语):


  • 服务发现和负载平衡
  • 存储编排
  • 自动部署和回滚
  • 自动垃圾箱包装
  • 自我修复
  • 机密和配置管理

总的来说,kubernetes在所有这些任务上都做得很好。 另一方面,kub​​ernetes开始定位为用于存储应用程序配置的数据库或用于管理组件的API工具(特别是在运营商发展方面具有相关性)。


kubernetes的优点之一是,您可以在计算资源和云中运行容器化的应用程序。 对于云资源,许多云提供商都提供了使用计算资源来运行应用程序和完全管理集群的能力:


  • 集群部署
  • 设置网络可用性和分布
  • 安装更新和修订包
  • 配置集群以提高容错能力和安全性(本文中有更多内容)
  • ...

如果您在任何云中使用托管kubernetes,那么当然您会受到许多限制。 例如,通常支持多个版本的kubernetes,并且不太可能将使用长时间不支持的kubernetes版本。 无疑,主要优点在于,不是您的团队来管理群集,这减少了开发应用程序所需的时间。 当然,托管的Kubernetes和托管的openshift不能在所有组织和任何类型的应用程序中使用,但是有许多任务非常适合在云中进行计算。


云架构


在公司内部,IBM Managed Kubernetes项目和IBM Managed OpenShift项目称为Armada项目。 该项目始于一个数据中心,但现在可在6个不同地区的60个云数据中心中使用。 为了描述云的扩展方式,我将使用两个术语:集线器和分支。 整个Armada项目都基于kubernetes,这意味着其集群由在kubernetes上运行的控制面板控制。 一旦控制面板没有足够的资源来管理必要的群集集,它就会部署其他分支。 这些发言人将继续负责管理特定区域中的集群。


控制面板包含1,500多个部署,位于60个kubernetes集群中。 为了管理超过15,000个客户集群(不包括部署在同一工作程序上的免费测试集群),所有这些都是必要的。


为了创建IKS和Managed OpenShift,团队内部使用了OpenSource模型。 大多数IBM员工可以访问大多数Armada存储库,并且可以创建自己的PR来集成他们的服务。 作为服务工作的一部分,还开发了大量CI / CD工具,这些工具已集成到Razee项目中。 在2019年夏天,IBM将Razee项目的所有成就上传到了OpenSource。


通常,IKS和Managed OpenShift的体系结构如下:


舰队建筑


当您使用IBM Cloud CLI并请求创建集群时,实际上您的请求是通过Armada API进行的,然后控制面板确定辐条的可用性并开始在您指定的区域中创建所需数量的工作人员。 使用IBM Cloud Infrastructure(又名Soflayer)为员工提供了整个基础架构,实际上,使用了相同的虚拟实例和裸机主机,这些实例在云服务目录的“ Compute”部分中可用。 一段时间后,您将收到一个授权令牌,您可以开始部署您的应用程序。


由于OpenShift和Kubernetes的功能和开发路线不同,因此底层技术堆栈也相应不同:


Armada软件堆栈


如何提供安全性


无论是从技术角度还是从营销角度,我们都可以在很长一段时间内谈论Armada项目。 但是首先,当选择提供托管kubernetes的云提供商时,每个人都会问一个相同的问题-提供商如何保证并确保我的应用程序的安全性和容错能力?..如果无法获得此问题的答案,就无法评估性能,便利性和服务支持水平。 作为开发经理,在任何大型项目的开发过程中,我都会绘制威胁图。 有必要在其中引入所有可能的黑客手段,并保护您的基础架构,应用程序和数据。 为了谈论kubernetes集群的安全性,您需要描述以下几点:


  • 基础架构本身和数据中心的安全性
  • 访问Kubernetes API和etcd
  • 安全主节点和工作节点
  • 网络安全
  • 持久存储安全
  • 监控和记录
  • 集装箱安全和集装箱图像

现在,首先要注意的是:


基础架构本身和数据中心的安全性


实际上,无论我们希望完全脱离硬件还是维护IT系统的硬件填充,我们都需要确保服务提供商能够完全遮盖我们的后方,并在工业和行业认证的帮助下进行确认,并在必要时借助报告提供帮助。进行审核。 IBM团队认真考虑了这一方面,并​​在一个地方收集并提供了所有必要的信息( https://www.ibm.com/cloud/compliance


访问Kubernetes API和etcd


为了访问etcd中的Kubernetes API和数据,您需要经历三个授权级别。 每个颁发的授权令牌都与身份验证令牌,群集授权数据(RBAC)和准入控制器关联(请参见下图)。


访问Kubernetes API和etcd


由于使用辐条集中配置向导,这意味着您无法更改向导配置,向导本身甚至不在您的云帐户上,并且在设备列表中不可见(与工作程序不同)。 所有配置更改只能在某些功能范围内进行。 一方面,这是一个限制,但是由于这个限制,网络罪犯也将无法访问您的向导,此外,没有人为错误因素,使用不兼容版本的kubernetes组件也没有任何风险,并且简化了整个集群管理过程。 通常,我们可以说IBM负责确保容错能力和kubernetes master的正确配置。 如果您的项目对使用某些版本的组件有严格的要求,那么在您的位置,我根本不会看托管的kubernetes,而是使用自己的安装。


安全主节点和辅助节点


为了确保工作人员和节点主服务器的安全,我们在计算节点之间使用了加密的VPN隧道,并且用户有机会订购带有加密硬盘驱动器的工作人员。 我们还使用Application Armor在操作系统级别限制应用程序对资源的访问。 Application Armor是Linux内核的扩展,可以为每个应用程序配置资源访问。


创建集群时,在选择适合您的配置后,将为您创建虚拟或裸机服务器,并在其上安装用于工作人员的组件。 用户有权访问工作人员的操作系统,但只有在通过管理VPN连接时才可以访问,这对于进行故障排除以及更新工作人员的操作系统本身很有用。 没有通过ssh的公共IP访问,为了使ssh进入容器,您需要使用kubectl exec,此连接将通过OpenVPN隧道进行。


保护主人和工人


网络安全


在托管kubernetes和openshift中,将Calico网络插件用作网络虚拟化解决方案。 网络安全是通过预先配置的Kubernetes和Calico网络策略来实现的。 您的工作人员可以与同一数据中心中的所有其他基础架构(例如普通虚拟机和裸机服务器以及网络应用程序和存储系统)位于同一VLAN中,而且由于位于群集外部的calico系统,将能够通过专用网络与您的部署进​​行通信。


创建具有公共VLAN的集群后,控制面板将为每个工作器及其外部网络接口创建一个带有ibm.role: worker_publicHostEndpoint资源。 为了保护外部网络接口,控制面板会将所有Calico缺省策略应用于所有带有ibm.role: worker_public端点。


Calico默认策略允许所有传出流量,并允许从Internet到某些组件(Kubernetes NodePort,LoadBalancer和Ingress服务)的传入流量。 所有其他流量均被阻止。 默认策略不适用于群集内的流量(pod之间的交互)


持久的存储安全性


为了实现持久性级别的安全性,使用了加密和密钥授权。 目前可用于IKS:


  • 经典NFS
  • 经典块存储(iSCSI)
  • VP块存储
  • IBM Cloud对象存储
  • 基于Porworx的SDS(使用您自己工作人员的本地驱动器)

监控和记录


您可以使用IBM Cloud Monitoring或Sysdig的解决方案来监视IKS。 自然,普罗米修斯并非没有。 托管OpenShift使用内置的监视工具。


有了日志本身,事情就更加复杂了。 有必要从完全不同的级别收集日志,我们使用了大量自己的开源解决方案。 我们收集并存储以下日志:


  • 容器本身的日志(STDOUT,STDERR)
  • 应用程序日志(如果指定了它们的路径)
  • 来自工作节点的日志
  • Kubernetes API日志
  • 入口日志
  • 所有Kubernetes系统组件的日志(kube-system名称空间)

要控制日志,可以使用单独的服务:带LogDNA的IBM Cloud Log Analysis,它允许您在通用控制台中显示所有日志,并根据费率进行追溯或实时分析。 您可以在6个区域中的每个区域分别创建一个实例,然后使用它来收集您帐户中的Kubernetes集群和其他基础架构的日志。 要将此服务连接到群集,您需要按照简单的说明放置一个装有LogDNA代理的容器,所有日志都将发送到LogDNA存储库,然后根据选择的计划,它们将可用于特定时期的进一步分析。


为了分析云服务内部的活动(包括登录等),可以使用带有LogDNA的Activity Tracker-它可以跟踪服务中的各种操作。


作为附加的监视工具,您可以在集群上设置带Sysdig的IBM Cloud Monitoring-它在所有6个区域中都可用,这将允许您实时监视集群中的许多指标并使用内置集成与容器中运行的许多常见环境。 此外,您可以配置对事件的反应,并可能通过松弛,电子邮件,PagerDuty,WebHook等进行通知。


容器和容器映像安全


该公司对DevOps中包含的内容有自己的看法。 如果有人感兴趣,可以在IBM Garage方法中阅读有关此内容的更多信息。 许多公司还形成了对DevSecOps的了解,并在实践中得到了应用。 要了解Docker映像经过什么阶段成为Docker容器,请看下图。


安全图片


在IBM云中,可以将Docker注册表用作服务。 将映像发送到此注册表时,将对docker映像进行签名。 在工作程序节点上,安装了插件,该插件负责检查完整性和是否符合安全策略-Vulnerability Advisor。 使用这些策略,例如,您可以限制注册表的范围,从那里可以下载docker映像。


 apiVersion: securityenforcement.admission.cloud.ibm.com/v1beta1 kind: ClusterImagePolicy metadata: name: ibmcloud-default-cluster-image-policy spec: repositories: # CoreOS Container Registry - name: "quay.io/*" policy: # Amazon Elastic Container Registry - name: "*amazonaws.com/*" policy: # IBM Container Registry - name: "registry*.bluemix.net/*" policy 

Vulnerability Advisor与运行中的容器一起使用,定期扫描它们并自动检测已安装的软件包。 具有潜在漏洞的Docker映像被标记为使用危险,并提供有关所发现漏洞的详细信息。


安全顾问是管理应用程序所有漏洞的中心。 它具有解决问题和修复问题的能力。 它既可以与Vulnerability Advisor的结果一起使用,也可以与群集本身一起使用,并及时警告需要更新特定组件。


Kubernetes托管集群的注册和部署示例


您可以完全免费在IBM云中部署和测试托管的Kubernetes集群:


  • 在IBM Cloud中注册: https : //ibm.biz/rucloud (您必须确认您的电子邮件地址,在此阶段不需要添加信用卡数据)
  • 要使用IKS服务,您可以将帐户转移到付费帐户(通过单击升级并输入银行卡详细信息-您将在帐户中收到200美元)。 尤其是对于Habr的读者,您可以获得一张优惠券,可将您的帐户切换为试用模式-这将使您免费部署30天的最小集群。 在此期间之后,可以再次创建集群并继续测试。 您可以通过链接https://ibm.biz/cloudcoupon索取优惠券。 在工作日内确认优惠券。
  • 您可以从服务目录-https://cloud.ibm.com/kubernetes/catalog/cluster/create创建一个免费集群(一个worker 2个vCPU 4GB RAM)。
  • 创建集群将需要5-7分钟,之后,IKS集群将可供您使用。

结论


我希望阅读本文后,读者对托管kubernetes和托管开放式班次的工作方式有更少的疑问。 本文还可以用作实现自己的kubernetes的操作说明。 IBM所使用的所有实践都适用于私有云,并且需要付出一些努力才能在任何数据中心中实施。


资源资源


IKS松弛
https://ibm-container-service.slack.com/
https://www.ibm.com/cloud/blog/announcements/ibm-cloud-activity-tracker-with-logdna-for-ibm-cloud-object-storage
https://www.ibm.com/cloud/blog/announcements/introducing-the-portworx-software-defined-storage-solution
https://cloud.ibm.com/docs/services/Monitoring-with-Sysdig?topic=Sysdig-getting-started

Source: https://habr.com/ru/post/zh-CN479664/


All Articles