提示:考虑到性能和安全因素,通常建议使用两个 Kubernetes 集群,分开用于部署 Rancher Server 和生产环境。部署 Rancher Server 后,可以创建或导入集群,然后使用Rancher Server创建用于生产的 Kubernetes 集群。
提示:可以在单个节点或高可用的 Kubernetes 集群上安装 Rancher。由于单节点安装只适用于开发和测试环境,而且单节点和高可用集群之间无法进行数据迁移,所以建议从一开始就使用高可用的 Kubernetes 集群来部署 Rancher Server,而且需要分开部署运行 Rancher Server 的集群和运行业务的生产 Kubernetes 集群。
参考:https://docs.rancher.cn/rancher2x/infrastructure/
https://rancher2.docs.rancher.cn/docs/overview/architecture/_index
1.4 Rancher和下游集群交互如下图示例,通过两个用户 Bob 和 Alice,理解 Rancher 启动和管理下游集群的具体过程,以及每个 Rancher 组件的作用。
该示例涉及集群控制器、集群 Agent 和 Node Agent等组件。
认证代理
如上视图中 Bob 的用户希望查看下游集群“User Cluster 1”里面正在运行的 pod。Bob 发起的请求会首先经过认证代理,通过认证之后,Rancher 的 认证代理才会把 API 调用命令转发到下游集群。
认证代理集成了多种认证方式,如本地认证、活动目录认证、GitHub 认证等。在发起每一个 Kubernetes API 调用请求的时候,认证代理会去确认请求方的身份,在转发调用命令前,请设置正确的 Kubernetes impersonation 的消息头。
Rancher 使用 Service Account (Service Accout 提供了一种方便的认证机制)和 Kubernetes 进行交互。
默认状态下,Rancher 生成一个包含认证信息的kubeconfig文件,为 Rancher Server 和下游集群的 Kubernetes API Server 之间的通信提供认证。该文件包含了访问集群的所有权限。
集群控制器和集群 Agent
每一个下游集群都有一个集群 Agent 保持下游集群的集群控制器与 Rancher Server 之间的信息畅通。
集群控制器具有以下功能:
检测下游集群的资源变化,如内存使用率、CPU 使用率等;
把下游集群从“当前”状态变更到“目标”状态;
配置集群和项目的访问控制策略;
通过调用 Docker Machine 和 Kubernetes Engine,如 RKE 和 GKE,创建集群。
提示:默认状态下,集群控制器连接 Agent,Rancher 才可以与下游集群通信。如果集群 Agent 不可用,集群控制器可以连接到Node Agent,通过Node Agent 实现用户和集群之间的通信。
集群 Agent,也叫做“cattle-cluster-agent”,是在下游集群中运行的组件,它具有以下功能:
连接使用 Rancher 部署的 Kubernetes 集群(RKE 集群)中的 Kubernetes API;
管理集群内的工作负载,pod 创建和部署;
根据每个集群的设置,配置 Role 和 RoleBindings;
实现集群和 Rancher Server 之间的消息传输,包括事件,指标,健康状况和节点信息等。
节点 Agents
如果集群 Agent 不可用,下游集群中的其中一个节点 Agent 会创建一个通信管道,由节点 Agent 连接到集群控制器,实现下游集群和 Rancher 之间的通信。
部署节点 Agent 的方式有很多,通常建议使用DaemonSet部署节点 Agent ,这种方式可以确保下游集群内每个节点都成功运行节点 Agent。执行集群操作时,可以使用这种方式将指令下发到下游集群。集群操作包括:升级 Kubernetes 版本、创建 etcd 节点备份和恢复 etcd 节点。
授权集群端点
Rancher Server 和下游集群之间有明显的延迟,或 Rancher Server 不可用时,用户可以通过授权集群端点连接下游集群,实现 Rancher Server 和集群之间的通信,降低网络延迟。
需要注意的是,只有 Rancher 部署的 Kubernetes 集群(RKE 集群)可以使用授权集群端点这个功能。其他类型的集群,如导入的集群、托管的集群等,并不能够使用此功能。
kube-api-auth 微服务向授权集群端点提供了用户认证功能。使用 kubectl 访问下游集群时,集群的 Kubernetes API Server 通过 kube-api-auth 对用户进行认证。
与授权集群端点类似, kube-api-auth 认证功能只在 Rancher 部署的 Kubernetes 集群(RKE 集群)中有效。