Rancher 全球化部署最佳实践
![Rancher 全球化部署最佳实践](https://static001.geekbang.org/infoq/1a/1adc6d92547ba84ea86aa7737fd979ca.png)
作者
万绍远,CNCF 基金会官方认证 Kubernetes CKA&CKS 工程师,云原生解决方案架构师。对 ceph、Openstack、Kubernetes、prometheus 技术和其他云原生相关技术有较深入的研究。参与设计并实施过多个金融、保险、制造业等多个行业 IaaS 和 PaaS 平台设计和应用云原生改造指导。
“大航海”时代,国内企业纷纷在出海赛道上扬帆起航。伴随着业务出海,系统也要做全球化部署,公有云成为了出海企业的首选。
但是,Kubernetes 在企业落地过程中仍然面临诸多挑战:
需要经验丰富的 IT 人员对 Kubernetes 集群进行部署、升级、监控, 确保系统可靠性。
多个 Kubernetes 集群如何进行统一策略管理、安全管控,实现集中式的可视化管控和一致性运维 ?
如何利用 Kubernetes 和周边生态技术栈,更高效地迭代和交付业务应用 ?
Rancher 就是一款很好的工具,能够通过其多集群管理能力和 Kubernetes 生命周期安全支持,帮助出海业务提高部署效率,降低运维成本。
多集群统一纳管
![](https://static001.geekbang.org/infoq/a5/a5bd1ed2590cacc7535aeb7b4fb58d49.png)
业务出海需要重点评估平滑迁移成本。容器是非常好的应用载体,诸多企业考虑在海外公有云使用 Kubernetes。那么应该选择公有云的虚拟机自建 Kubernetes?还是直接使用公有云厂商的 Kubernetes 发行版,例如 AWS EKS 或者 Azure AKS 呢?
建议企业使用公有云的 Kubernetes 发行版,因为它直接与公有云的基础设施进行了集成,可以更好地利用云上资源,提高部署效率,降低运维成本。以 AWS EKS 为例,使用 EKS 创建 Loadblance 类型的 Service 会自动在 AWS 中创建 ELB 负载均衡器,存储自动对接了 EBS 和 EFS。相比自建 Kubernetes 来说,降低了手动对接的操作过程。
Rancher 支持国内外主流的公有云 Kubernetes 发行版,如 EKS、GKE、ACK、CCE、TKE、AKS……用户可通过 Rancher 一键创建并纳管这些云供应商的 Kubernetes 发行版。
以一个客户架构为例
1、在中国本地数据中心部署 Rancher,本地数据中心的 Kubernetes 使用 RKE 进行部署,并同时建设同城灾备环境。
2、海外业务集群使用 Rancher 对接 AWS,创建对应的 EKS 集群进行统一纳管,通过专线连接。
![](https://static001.geekbang.org/infoq/a3/a3edbcc626255396f03e5f3875eba8ad.png)
使用 Rancher 部署 EKS 集群示例
AWS 配置:
1、在 AWS 中提前创建 VPC 和安全组
2、添加 IAM 权限,创建策略:https://docs.ranchermanager.rancher.io/zh/reference-guides/amazon-eks-permissions/minimum-eks-permissions
![](https://static001.geekbang.org/infoq/05/05463ee552897b34435f9da4a064e14f.png)
3、创建用户关联此策略
![](https://static001.geekbang.org/infoq/1d/1d16393cfe3bd04e4020efbe59323945.png)
![](https://static001.geekbang.org/infoq/e3/e30fb1a59114a03a06862b06cd7343e7.png)
Rancher 配置
1、创建集群
![](https://static001.geekbang.org/infoq/93/933e71a8896333944a120d77dddc0a25.png)
2、选择 EKS
![](https://static001.geekbang.org/infoq/1c/1cebdacbee448b3909c5e46f09926d5f.png)
3、选择对应的区域和配置信息
![](https://static001.geekbang.org/infoq/9e/9e082f4c2967d980322460884b9144fc.png)
填写生成的账户 Access-key 和 Secret-key
![](https://static001.geekbang.org/infoq/4e/4e3826aed6b479a8eb81af45a8ef4e4e.png)
4、配置 VPC 和子网
![](https://static001.geekbang.org/infoq/6e/6e4555702f3c6d5182314847018d4956.png)
5、配置节点主机规格
6、集群创建完成
![](https://static001.geekbang.org/infoq/f7/f71e6f7dc38ded79fea39b8f5704bf1b.png)
对应的 AWS 页面也能看见创建的集群。在 Rancher UI 创建负载均衡和创建 PVC 也会自动在 AWS 中创建
![](https://static001.geekbang.org/infoq/05/052c7b3e2319da549fa9468071c1edea.png)
多集群统一发布
跨集群应用克隆
当实现多集群纳管后也带来一个问题:用户在测试集群部署服务验证可用以后,如何快速地将应用直接发布到生产集群?如果只能在生产集群中手动创建应用,在手动配置过程中容易出现参数丢失等问题。
为了解决这些问题,Rancher 企业版从设计之初就新增了跨集群应用克隆的功能,可以一键将某一集群的应用发布到其他集群,减少用户手动配置的工作量。 同时用户还可以通过跨集群应用克隆功能,提前将应用备份到其他集群,一旦有集群崩溃的情况出现,可以马上切换流量到其他集群提供服务,快速实现应用的恢复。
![](https://static001.geekbang.org/infoq/4a/4a00f9053bf5286eea9c130e9ce572e2.png)
![](https://static001.geekbang.org/infoq/88/884a4e8cc9a55a375af4c0c1d4242691.png)
Gitops 统一发布
同时 Rancher 也内置了 Gitops 工具 Fleet,实现海量集群同步分发
![](https://static001.geekbang.org/infoq/eb/ebd2ecd622fd8ba7a94a0a215cfcc3ae.png)
![](https://static001.geekbang.org/infoq/2d/2d9f798c9584ecc0c4ffeb8f1e137cbb.png)
将应用代码和构建 Docker 镜像的 Dockerfile 文件放置到 Gitlab 对应项目中
在 Gitlab 中创建用于专门用于存放部署 yaml 的项目
配置 CI 工具用于代码编译镜像构建和业务 yaml 文件修改
配置 Rancher-Fleet 检测存放部署 yaml 的项目,有更新后自动部署到对应环境中
点击持续交付功能创建 Fleet 规则
![](https://static001.geekbang.org/infoq/44/4437c6c8bda247022a7118cd3e21654e.png)
配置对接 git 仓库存放应用部署 yaml 的路径
![](https://static001.geekbang.org/infoq/e9/e9ee9ff7eafc1483fb084de95f87f10f.png)
可以选择部署到全部集群还是指定集群,或通过标签灵活定义的集群组中
![](https://static001.geekbang.org/infoq/dd/dd05283e463fc6806590185105c1d4a3.png)
完成后可以看见应用部署的状态,后续也会实时检测 git 仓库中的变化,进行自动部署
![](https://static001.geekbang.org/infoq/01/01eba3460d65b04b443fbcda137c7804.png)
多集群监控
每个集群可以部署独立的 Prometheus,对单独集群进行监控,可支持对容器云平台以下维度的监控:
集群总体资源使用情况
节点资源使用情况
组件性能监控
应用容器 POD 资源使用监控
但在多集群场景下,单独集群监控需要一个一个点进去,并且人工分析数据,更大的作用是故障后的问题排查,并不能很好地提前发现问题。更好的处理方式是将纳管的全部集群监控数据进行汇总和分析展示。如:内存、CPU、网络流量最高的 top 10(集群、主机、POD);重启次数最多的 top 10 POD;全部集群 Error 事件统一展示;以便更好地帮助平台运维提前发现风险点。
![](https://static001.geekbang.org/infoq/58/584d3cd8ca8f2af4b08a9b381ca8ace5.png)
全局监控主要通过 Thanos 实现,会在每个集群的 Prometheus 上通过 Thanos sidecar。对于单个集群的短期数据,Prometheus 通过 local-pv 存储到本地磁盘;而长期数据则通过 Thanos-sidecar 存储到 s3 协议的对象存储中。
![](https://static001.geekbang.org/infoq/18/1844f7f9f60445a96d6264e37bcbbca8.png)
安全
随着 Kubernetes 在业务中的广泛使用,容器安全问题正逐步受到重视。容器云平台的安全涉及到镜像安全、集群安全以及容器运行时安全,同时也涉及到租户网络隔离、用户及用户权限控制。Rancher 集成了容器安全平台 SUSE NeuVector,可以更好地保护用户的平台安全。
NeuVector 本身也支持多集群管理、策略统一下发和规则统一管理。
![](https://static001.geekbang.org/infoq/75/75a855caaef27ad33cc3f35cbbc95f75.png)
审计日志
为了满足我国本土用户需求,Rancher 企业版在 UI 上集成了多维度审计日志展示功能(什么人在什么时间操作了什么资源对象,结果是什么)。通过审计日志,平台管理员可以快速查看到平台的操作记录,方便进行审计。
![](https://static001.geekbang.org/infoq/b3/b3dfcdace21e2d6e0a0a248b667184ff.png)
准入策略控制及网络微隔离
SUSE NeuVector 是业界首个 100% 开源的零信任容器安全平台,在 Rancher 新版本中已经进行了集成,可直接部署使用。NeuVector 可实现以下功能
![](https://static001.geekbang.org/infoq/57/57c5c7cff8d34ab93f3fbc11af980e7f.png)
1、准入策略控制
进入 NeuVector 进行配置
![](https://static001.geekbang.org/infoq/e3/e377ace0922fa9d90abf1dbbd71934a1.png)
![](https://static001.geekbang.org/infoq/89/895cd93a9601da16e9a41e3e295c0931.png)
2、在准入控制菜单添加以下策略
由于容器运行期间会共享宿主机的内核、存储和端口,所以在实际生产环境中,误操作或平台被入侵将影响宿主机上其他应用 Pod 的正常运行,因此需要针对集群进行 Pod 的安全策略控制,以此来保证主机安全。
禁止使用特权容器
禁止从父进程获取更多权限
限制使用主机 IPC
限制只能只读根文件系统
限制 HostPath 路径
限制 HostPort 使用范围
3、网络动态微隔离
集群内 POD 间需要进行网络微隔离,提高安全性,避免 POD 被入侵后互相影响。NeuVector 将每个 workload 识别为一个组,通过对组进行策略控制,并且每个组默认会自动学习对应的网络连接规则和启动进程,并生成白名单。
NeuVector 的组支持 3 种模式:学习模式、监控模式和保护模式。各个模式实现作用如下。
学习模式:学习和记录容器、主机间网络连接情况和进程执行信息。自动构建网络规则白名单,保护应用网络正常行为。为每个服务的容器中运行的进程设定安全基线,并创建进程配置文件规则白名单。
监控模式:NeuVector 监视容器和主机的网络和进程运行情况,遇到非学习模式下记录的行为将在 NeuVector 中进行告警。监控模式不会消耗资源。
保护模式:NeuVector 监视容器和主机的网络和进程运行情况,遇到非学习模式下记录的行为直接拒绝。保护模式是直接拒绝非白名单的访问请求,执行器需要 CPU 和内存通过深度数据包检查来过滤连接,进行判断处理,所以会消耗更多的 CPU 资源。
新建的容器业务自动发现后默认为学习模式,也可以通过设置将默认模式设置为监控模式或保护模式。
总结
总之,Rancher 的多集群管理能力(多集群管理、多集群应用统一发布、多集群监控)和 Kubernetes 生命周期安全支持可以帮助企业提升部署效率,降低运维成本,是出海企业进行全球化部署的明智选择。
版权声明: 本文为 InfoQ 作者【Rancher】的原创文章。
原文链接:【http://xie.infoq.cn/article/c65443a9e3f2c90dfac05af79】。文章转载请联系作者。
评论