对于采用DevOps实践和现代云能力来加速创新和获得竞争优势的组织来说,其中一个最大的挑战是,在应用程序从开发到部署的整个生命周期中维护通用、一致的环境。容器解决了将所有必要的依赖项打包成离散镜像的应用程序可移植性问题,而Kubernetes已经成为编排和部署这些容器事实上的标准。
通过采用容器和Kubernetes,IT和业务线用户可以将精力集中在应用程序开发上,而不是基础设施和“管道”上。因为Kubernetes无处不在,所以可以根据业务需求选择运行应用程序的最佳位置。对于某些应用程序,公有云的规模和覆盖范围以及其提供的数量巨大的服务,将成为决定因素。对于其他应用程序,数据局部性、安全性或其他考虑则要求在本地部署。
当前的解决方案可能很复杂,需要组织横跨隔离或独立的环境开展工作,并迫使团队以时间和金钱为代价将所有部分“粘合”在一起。这可能会迫使组织在本地部署和公有云之间做出选择,或者受限于“全有或全无”的技术栈,从而导致选择较少。
思科为了帮助客户应对这一挑战,于11月8日宣布与AWS合作,开发思科Kubernetes on AWS混合解决方案。新的解决方案结合了思科、AWS和开源技术,简化了复杂性,消除了客户转向Kubernetes的挑战,使他们能够以安全、一致的方式横跨本地和AWS云部署应用程序。它提供了一个经过测试、验证的简单解决方案,在本地和云端提供了一致的Kubernetes集群,并结合了两者的优势。这减少了不同团队在人员、流程和技能方面的负担,缩短了应用程序部署周期,可以加速创新。客户可以将本地功能和资源扩展到AWS云上,也可以在本地利用AWS云提供的服务和资源。
解决方案概述
思科Kubernetes on AWS混合解决方案的核心组件是Cisco Container Platform和Amazon Elastic Container Service for Kubernetes(EKS)的独特集成,这样,通过一个CCP管理界面,客户就可以配置本地集群和云端EKS集群。CCP使用AWS IAM身份验证创建VPC,向EKS发送指令创建一个新的集群,然后配置该集群中的工作节点。
借助思科Kubernetes on AWS混合解决方案,除了本地环境外,客户还可以使用CCP UI在Amazon AWS上启动Kubernetes集群。他们只要简单地声明他们的Kubernetes集群规范,并引用思科托管的操作系统镜像作为工作节点镜像,就可以在任意一个环境中部署集群。AWS身份和访问管理(IAM)被集成进来,作为通用的身份验证机制。这样,集群管理员就可以自由地在两个环境中应用相同的基于角色的访问控制(RBAC)策略。这两个环境都集成了Amazon Elastic Container Registry(ECR),为所有的容器镜像提供了统一安全的存储库。为了提供一致的日志记录和度量指标,一套标准的开源监控和日志工具被部署到集群中。这些工具是基于Prometheus和ElasticSearch/FluentD/Kibana(EFK) 技术栈的。最后,思科的站点到站点VPN解决方案,如CSR 1000v,被用来在云托管服务和本地服务之间提供一系列安全连接选项。
思科为解决方案的所有组件(包括AWS组件—EKS、IAM和ECR)提供了单点支持,用户不必为每个组件单独从不同的供应商寻求支持。
使用思科容器平台在Amazon EKS中和本地配置Kubernetes集群
为了了解实际使用的情况,让我们来看看管理员如何使用思科容器平台(CCP)仪表板创建一个EKS集群。
配置一个EKS集群非常简单,只需要点击几个按钮。首先,将AWS定义为基础设施提供商。这包括提供商名称和AWS帐户凭证。
注意:这里指定的AWS帐户凭证将是具有EKS集群管理权限的AWS IAM身份标识。
接下来,指定Amazon EKS集群的基本信息。这包括你希望部署EKS集群的AWS区域、一个可选的IAM用户或角色(你希望使该用户可以管理EKS集群)、集群名称和集群的Kubernetes版本。
最后,配置EKS工作节点的信息。这包括实例类型、机器镜像、工作节点数量和公共SSH密钥。
这样就行了。在后台,CCP会使用Amazon API配置下列资源:
- 按照AWS最佳实践在你的账户下配置一个新的VPC(包括子网、安全组、路由表等),并按照思科的建议配置安全的私有和公有子网,用于VPN互连;
- 一个用于EKS的服务角色;
- 一个用于EKS工作节点的节点实例配置文件;
- 一个EKS集群;
- 一个EKS工作节点自动缩放组;
- 在你的集群上创建configMap,使工作节点可以连接到主节点。
集群部署完成后,就可以下载预生成的Kubernetes集群配置文件(~/.kube/config
)。CCP使用了开源的kubectl插件aws-iam-authenticator。该插件使用本地文件~/.aws/credentials
中的凭证通过EKS集群对AWS IAM用户进行身份验证。
对于由CCP部署和管理的Kubernetes本地集群,该解决方案提供了与Amazon Cloud的集成。作为与AWS集成的一部分,你现在可以选择“启用AWS IAM”选项,它将在新创建的Kubernetes本地集群中安装AWS IAM身份验证组件。这使你可以使用同一套AWS IAM凭据来访问Kubernetes集群(既包括本地集群,也包括EKS集群)。
借助在云环境和本地环境中配置的集群,让我们更深入地了解下思科Kubernetes on AWS混合解决方案中的每一项AWS集成。
具有通用RBAC授权策略的通用IAM身份验证标识
CCP使用了开源的AWS IAM身份验证程序,使用一个通用的AWS IAM用户/角色在云环境和本地环境中进行集群身份验证。用户/角色通过集群验证后,一个可配置的通用RBAC策略就会定义在各自集群中可以授予用户/角色的特定权限。因此,你必须使用一种通用的“kubectl” CLI工具简单地切换上下文来访问这两个环境。
默认情况下,在创建Amazon EKS集群时指定的AWS凭证会映射到Kubernetes集群角色’cluster-admin’ (“system:managers”组集群角色绑定)。这个IAM身份可以管理控制EKS集群。如前所述,你可以选择将另外的AWS IAM角色或IAM用户指定为Amazon资源名(ARN)。当你指定时,CCP:
1 ) 在EKS集群的configMap中映射另外一个相关联的角色,如下图所示:
2) 向kube config中添加关联角色,以便AWS IAM身份验证程序可以使用那个角色进行EKS集群验证,如下所示:
对于本地集群,你可以启用AWS IAM集成,使用相同的IAM身份进行集群身份验证。这可以通过在本地集群创建过程中指定AWS IAM用户的ARN来实现。类似地,CCP会将该用户映射到本地集群configMap中的Kubernetes集群角色’ cluster-admin '。它还更新了本地集群的kubeconfig,这反过来使得AWS IAM身份验证程序客户端可以使用相同的IAM身份进行本地集群身份验证。
通过如上所述的IAM配置,就可以把一个通用的RBAC策略应用于Kubernetes本地/EKS集群,实现对资源的访问控制。
通用Amazon ECR
CCP与ECR集成,为所有容器镜像提供了一个统一安全的存储库。
对于Amazon EKS工作节点,CCP会自动分配一个实例角色,该角色具有读/写ECR存储库的权限。
由于本地节点没有这种角色,因此需要执行额外的步骤——凭证必须保存在Kubernetes secret中,而后者会被pod清单引用(参见下图)。像下面这样的脚本将为你完成这项工作(根据需要替换[]中的项)。
这个脚本从AWS获取授权令牌,并将其存储在一个Kubernetes secret对象中,pod部署期间会读取它。注意,这个令牌需要定期刷新。默认情况下,令牌12小时后到期。
在执行完上面的脚本之后,就像往常一样,你可以通过kubectl部署一个Kubernetes清单指定ECR库的相关细节。下面的pod清单示例说明了如何在image属性中指定应用程序使用的ECR库。
要从ECR中获取镜像,必须提供凭据。亚马逊的ECR文档对此进行了描述。对于运行Docker的用户,它看起来是下面这个样子(需要ecr:GetAuthorizationToken权限),而Kubernetes将使用存储在Kubernetes secret中的凭据,就像前面所描述的那样,在pod清单的“imagePullSecret”中指定。
借助CCP,你可以使用相同的Kubernetes版本和操作系统部署本地和Amazon EKS工作节点。
开始的时候,你可以使用Kubernetes v1.10与Ubuntu 18.04部署工作节点,使用思科提供的镜像。你不需要担心Kubernetes及操作系统版本在孤立的环境之间出现不一致。借助CCP控制平面软件,你可以横跨本地环境和AWS环境无缝地升级及应用安全补丁。
通用监控和日志
CCP通过由CPP在每个集群中部署的Prometheus和EFK技术栈(ElasticSearch/ FluentD/ Kibana)集成集群监控,确保每个集群符合开发数据和生产数据隔离的最佳实践,以及GDPR把信息留在本地的要求。它还确保日志和指标不依赖于可能不可用的中央服务。思科服务可以帮助实现日志转发和主要指标收集以及集成客户自己的日志和指标系统。
连接、安全和监控的增值集成
思科扩展了跨组合解决方案,提供了一系列可以从AWS市场加以利用的增值解决方案,从而完善思科Kubernetes on AWS混合解决方案。这包括:
- 应用程序部署:使用思科CloudCenter在私有和公共基础设施中安全地部署Kubernetes和基于虚拟机的工作负载。
- 连接:使用思科CSR1000v在本地环境和云环境之间建立VPN连接。
- 安全:部署思科Stealthwatch监控网络流量及应用程序流量异常,把AWS流日志用于基于云的工作负载。
- 监控:支持AppDynamics应用程序性能监控,查看应用程序性能对业务结果的实时影响。
下一步工作
思科Kubernetes on AWS混合解决方案可以作为一个包含所有思科组件的软硬件包购买,也可以通过思科或思科的合作伙伴单独购买。在购买解决方案时,只有Cisco容器平台是必须的。所有的思科软件组件都是按1年、3年和5年的订阅许可订购的,所有的思科硬件组件都是永久出售的。所有AWS组件都直接向客户的AWS帐户收费。
关于如何使用思科Kubernetes on AWS混合解决方案部署思科扩展组合解决方案的详细说明,可以查看它们的多重云设计指南。
要了解思科Kubernetes on AWS混合解决方案的实践经验,请移步DevNet。
查看英文原文:https://blogs.cisco.com/cloud/simplifying-container-orchestration