容器化技术生态系统正在快速发展和变化,因此该领域缺乏良好的工作实践。 然而,Kubernetes 和容器的使用越来越多,既用于现代化遗留应用程序,也用于开发现代云应用程序。
团队
如何知道您的公司是否准备好在生产环境中部署容器
根据
В
尽管人们对容器的兴趣和采用不断增长,但由于技术不成熟和缺乏专业知识,将其投入生产需要一个学习曲线。 组织必须现实地对待需要应用程序容器化的业务流程。 IT 领导者应该评估他们是否具备满足快速学习需求的技能。
在生产中使用容器时最常见的错误
组织经常低估在生产中操作容器所需的工作量。
如何保证容器安全
安全问题不能“稍后”处理。 它必须内置到 DevOps 流程中,这就是为什么有一个特殊术语 - DevSecOps。 组织需要制定计划
- 将扫描应用程序映像漏洞的过程集成到持续集成/持续交付 (CI/CD) 管道中。 应用程序在软件构建和启动阶段进行扫描。 强调需要扫描和识别开源组件、库和框架。 开发人员使用旧的、易受攻击的版本是容器漏洞的主要原因之一。
- 通过互联网安全中心测试改进您的配置(
CIS ),适用于 Docker 和 Kubernetes。 - 确保执行访问控制、确保职责分离并实施秘密管理政策。 安全套接字层 (SSL) 密钥或数据库凭据等敏感信息由协调器或第三方管理服务加密并在运行时公开
- 通过管理安全策略来避免升高容器,以减少潜在的违规风险。
- 使用提供白名单、行为监控和异常检测的安全工具来防止恶意活动。
- 利用 Kubernetes 的内置功能。 使用角色为用户设置访问权限。 确保不向单个实体授予不必要的权限,即使可能需要一些时间来考虑所需的最低权限。 授予集群管理员广泛的权限可能很诱人,因为这最初可以节省时间。 然而,帐户中的任何妥协或错误都可能导致以后的灾难性后果。
- 避免重复的访问权限。 有时,不同的角色重叠可能很有用,但这可能会导致操作问题,并且在删除权限时也会产生盲点。 删除未使用和不活动的角色也很重要。
- 设置网络策略:隔离模块以限制对其的访问; 使用标签明确允许互联网访问那些需要它的模块; 明确允许那些需要相互通信的模块之间进行通信。
如何组织对容器及其中的服务的监控
安全和监控 -
- 尝试结合监视主机系统来监视容器或其中的服务的状态。
- 寻找与容器编排深度集成的供应商和工具,尤其是 Kubernetes。
- 选择使用分析和/或机器学习提供详细日志记录、自动服务发现和实时建议的工具。
- 使用工具自动发现和跟踪容器指标,关联 CPU、内存和正常运行时间等性能指标。
- 根据容器监控指标预测容量耗尽日期,确保最佳容量规划。
- 监控容器化应用程序的可用性和性能,这对于容量规划和性能问题故障排除非常有用。
- 通过为容器及其托管环境提供管理和扩展支持来实现工作流程自动化。
- 自动执行访问控制以监控您的用户群、禁用过时的帐户和来宾帐户,并删除不必要的权限。
- 确保您的工具集可以跨多个环境(云、本地或混合)监控这些容器和应用程序,以可视化和基准化跨基础设施、网络、系统和应用程序的性能。
如何存储数据并确保其安全
随着有状态工作容器的兴起,客户端需要考虑主机外部数据的存在以及保护该数据的需要。
根据
数据加密是主要的安全策略(64%),但受访者也使用运行时监控
(49%)、扫描注册表中的漏洞 (49%)、扫描 CI/CD 管道中的漏洞 (49%) 以及通过运行时保护阻止异常 (48%)。
- 选择基于原则的存储解决方案
微服务架构 。 最好关注那些满足容器服务的数据存储需求、硬件独立、API驱动、具有分布式架构、支持本地部署和公有云部署的。 - 避免专有插件和接口。 选择提供 Kubernetes 集成并支持 CSI(容器存储接口)等标准接口的供应商。
如何使用网络
在传统的企业网络模型中,IT 团队为每个项目创建网络化的开发、测试、质量保证和生产环境,但并不总是能很好地适应持续开发工作流程。 此外,容器网络跨越多个层。
В
- 调度在同一节点上的 Pod 必须能够在不使用 NAT(网络地址转换)的情况下与其他 Pod 进行通信。
- 在特定节点上运行的所有系统守护进程(kubelet 等后台进程)都可以与在同一节点上运行的 pod 进行通信。
- Pod 使用
主机网络, 必须能够在不使用 NAT 的情况下与所有其他节点上的所有其他 Pod 进行通信。 请注意,主机网络仅在 Linux 主机上受支持。
网络解决方案必须与 Kubernetes 原语和策略紧密集成。 IT领导者应该努力实现高度的网络自动化,并为开发人员提供合适的工具和足够的灵活性。
- 了解您的 CaaS(容器即服务)或 SDN(软件定义网络)是否支持 Kubernetes 网络。 如果没有或支持不足,请为容器使用 CNI(容器网络接口)网络接口,它支持必要的功能和策略。
- 确保您的 CaaS 或 PaaS(平台即服务)支持创建入口控制器和/或负载均衡器,以在集群节点之间分配传入流量。 如果这不是一个选项,请探索使用第三方代理或服务网格。
- 对您的网络工程师进行有关 Linux 网络和网络自动化工具的培训,以缩小技能差距并提高敏捷性。
如何管理应用程序生命周期
为了实现自动化、无缝的应用程序交付,您需要使用其他自动化工具(例如基础设施即代码 (IaC) 产品)来补充容器编排。 其中包括 Chef、Puppet、Ansible 和 Terraform。
还需要用于构建和推出应用程序的自动化工具(请参阅“
- 根据大小、许可和开发人员添加组件的灵活性为基础容器映像设置标准。
- 使用配置管理系统来管理基于公共或私有存储库中的基础映像分层配置的容器的生命周期。
- 将您的 CaaS 平台与自动化工具集成,以自动化您的整个应用程序工作流程。
如何使用协调器管理容器
部署容器的核心功能是在编排和规划层提供的。 在调度期间,根据编排层要求,容器被放置在集群中最优化的主机上。
Kubernetes 已成为事实上的容器编排标准,拥有活跃的社区,并得到大多数领先商业供应商的支持。
- 定义安全控制、监控、策略管理、数据持久性、网络和容器生命周期管理的基本要求。
- 根据这些要求,选择最适合您的要求和用例的工具。
- 使用 Gartner 研究(参见“
如何选择 Kubernetes 部署模型 ”)了解不同 Kubernetes 部署模型的优缺点,并选择最适合您的应用程序的模型。 - 选择一个能够为跨多个环境的工作容器提供混合编排、紧密的后端集成、通用管理计划和一致的定价模型的提供商。
如何利用云提供商的能力
IaaS 云提供按需资源消耗、快速可扩展性和
主要云托管服务提供商如下表所示:
云提供商
服务类型
产品/服务
阿里巴巴
原生云服务
阿里云容器服务、阿里云Kubernetes容器服务
亚马逊网络服务(AWS)
原生云服务
Amazon Elastic Container Services (ECS)、Amazon ECS for Kubernetes (EKS)、AWS Fargate
巨型蜂群
MSP
Giant Swarm 管理的 Kubernetes 基础设施
谷歌
原生云服务
谷歌容器引擎(GKE)
IBM
原生云服务
IBM 云 Kubernetes 服务
微软
原生云服务
Azure Kubernetes 服务、Azure Service Fabric
神谕
原生云服务
适用于 Kubernetes 的 OCI 容器引擎
Platform9
MSP
托管 Kubernetes
红帽
托管服务
OpenShift 专用和在线
VMware的
托管服务
云 PKS(测试版)
Mail.ru 云解决方案*
原生云服务
Mail.ru 云容器
* 我们不会隐藏它,我们在翻译过程中将自己添加到这里:)
公共云提供商也在添加新功能并发布本地产品。 在不久的将来,云提供商将开发对混合云和多云环境的支持。
- 客观评估您的组织部署和管理适当工具的能力,并考虑替代云容器管理服务。
- 仔细选择软件,尽可能使用开源软件。
- 选择在混合环境中具有通用操作模型、提供联合集群单一管理平台管理的提供商,以及可以轻松自托管 IaaS 的提供商。
- 寻找支持开箱即用的高可用性的发行版是值得的。 这包括对多种主要架构、高可用 etcd 组件以及备份和恢复的支持。
- 为了确保 Kubernetes 环境中的移动性,最好选择支持多种部署模型(从本地到混合云再到多云)的云提供商。
- 还应根据设置、安装和集群创建以及更新、监控和故障排除的难易程度来评估提供商的产品。 基本要求是支持零停机的全自动集群更新。 您选择的解决方案还应该允许您手动运行更新。
- 从安全和治理的角度来看,身份和访问管理都很重要。 确保您选择的 Kubernetes 发行版支持与您内部使用的身份验证和授权工具集成。 RBAC 和细粒度访问控制也是重要的功能集。
- 您选择的发行版必须具有涵盖各种不同应用程序或基础设施要求的本机软件定义网络解决方案,或者支持一种流行的基于 CNI 的网络实现,包括 Flannel、Calico、kube-router 或 OVN。
一项调查结果表明,容器引入生产正在成为主要方向。
正如您所看到的,27% 的受访者已经在工作中使用容器,63% 的受访者正在计划这样做。
В
文章由云平台团队编写
关于该主题还可以阅读什么:
来源: habr.com