具体来说,云控制器管理器允许用户将集群与云服务提供商的 API 进行连接,以获取与云平台相关的信息和资源。通过这种连接,Kubernetes 可以利用云服务提供商的功能和特性,例如虚拟机、负载均衡器、对象存储等。与此同时,云控制器管理器也负责与云平台进行交互,以执行与云资源的管理和操作相关的任务。
云控制器管理器的作用是将 Kubernetes 集群与云服务提供商的 API 进行链接,并在集群内部负责与云平台进行交互,以实现对云资源的管理和操作。它实现了集群与云平台之间的松耦合,使得 Kubernetes 可以充分利用云服务提供商的功能和特性,提供强大而灵活的容器管理能力
设计
云控制器管理器以一组复制的进程(通常是在 Pod 中的容器)的形式在控制平面中运行。每个云控制器管理器在单个进程中实现了多个控制器
好处
控制器是 Kubernetes 中负责监视集群状态并采取相应操作的组件。通过将多个控制器实现在云控制器管理器的同一个进程中,可以减少进程和资源的开销。这些控制器在云控制器管理器中共享相同的进程,并且彼此之间可以共享和复用一些资源和功能。这种共享和复用的机制提高了资源利用率,减少了系统开销,同时也简化了部署和管理
Cloud controller manager functions
云控制器管理器中的控制器功能包括:
节点控制器(Node controller)
节点控制器负责在云基础设施中创建新的服务器时更新 Node 对象 。
节点控制器通过与云服务提供商的API交互,获取有关在您的租户中运行的主机的信息。
节点控制器执行以下功能:
- 使用从云服务提供商API获取的相应服务器的唯一标识符来更新 Node 对象。
- 使用特定于云的信息对 Node 对象进行注释和标记,例如节点部署的区域以及可用的资源(CPU、内存等)。
- 获取节点的主机名和网络地址。
- 验证节点的健康状况。如果一个节点变得无响应,该控制器会通过云服务提供商的API检查服务器是否已被停用/删除/终止。如果节点已从云中删除,则控制器会从您的 Kubernetes 集群中删除 Node 对象。
一些云服务提供商的实现将此功能分为节点控制器 和单独的节点生命周期控制器 。
节点生命周期控制器负责与云服务提供商的API交互,管理节点的生命周期操作,例如创建、启动、停用、删除等。这种拆分可以使节点控制器和节点生命周期控制器各自专注于不同的任务,提供更灵活和可维护的代码结构。
路由控制器
作用
-
路由控制器根据需要配置云中的路由 ,确保来自不同节点上的容器之间的网络流量能够正确地路由和转发 。它确保每个节点上的容器都能够与其他节点上的容器建立网络连接,以实现跨节点通信。
-
根据云服务提供商的不同,路由控制器可能还会分配一组 IP 地址块用于 Pod 网络。这意味着路由控制器除了配置路由规则之外,还负责分配和管理用于容器之间通信的 IP 地址。
总之,路由控制器负责在云中配置适当的路由规则,以便 Kubernetes 集群中的容器可以相互通信。它确保容器之间的网络流量能够正确路由和转发,并且在需要时分配 IP 地址块供 Pod 网络使用。
服务控制器(Service controller)
服务控制器(Service controller)与云基础设施组件集成,如托管的负载均衡器、IP 地址、网络数据包过滤和目标健康检查。当您声明一个需要这些组件的服务资源时,服务控制器与您的云服务提供商的API进行交互,设置负载均衡器和其他基础设施组件。
在Kubernetes中,服务(Service)是一种抽象,用于公开一组逻辑相关的Pod并提供网络访问。
服务控制器的作用是根据您的配置和声明,与云服务提供商的API交互,并设置与服务相关的负载均衡器和其他基础设施。
服务控制器扮演着与云服务提供商API交互的角色,以创建、配置和管理与服务相关的资源。
例如,当您创建一个负载均衡型的服务时,服务控制器将通过云服务提供商的API创建和配置一个负载均衡器,以将流量分发到服务背后的Pod。服务控制器还可以协调与服务相关的其他组件,如IP地址分配和网络数据包过滤。
通过与云服务提供商的API交互,服务控制器可以实现与云基础设施的集成,以提供更高级的服务功能,如负载均衡和网络策略
授权
授权是指云控制器管理器在执行操作时所需的对不同 API 对象的访问权限。在 Kubernetes 中,访问控制是通过 Role-Based Access Control (RBAC) 进行管理的。
云控制器管理器需要不同程度的访问权限来执行其操作。这些权限通常定义为 Kubernetes 中的角色(Role)和角色绑定(Role Binding)。角色定义了可以执行的操作(例如创建、读取、更新和删除)和允许的资源类型。角色绑定将角色分配给用户、组或服务账户以授予它们对相应资源的权限。
云控制器管理器可能需要访问以下不同的 API 对象以执行其操作:
-
Node 对象:云控制器管理器可能需要读取和更新 Node 对象,以反映云基础设施中服务器的状态和资源信息。
-
Pod 对象:云控制器管理器可能需要读取和更新 Pod 对象,以根据调度规则、网络设置等信息在集群中创建、更新和删除 Pod。
-
Service 对象:云控制器管理器可能需要读取和更新 Service 对象,以设置和管理负载均衡器、IP 地址等服务相关的资源。
-
Endpoint 对象:云控制器管理器可能需要读取和更新 Endpoint 对象,以更新负载均衡器或服务关联的目标地址。
-
Route 对象:云控制器管理器可能需要读取和更新 Route 对象,以配置云中适当的路由规则,以便容器在不同节点之间进行通信。
为了确保安全性,云控制器管理器应该只被授予所需的最低权限。根据具体情况和云服务提供商的实现,可能需要对其他 API 对象进行访问控制,以确保云控制器管理器可以安全地执行其任务。
总之,授权是指云控制器管理器在执行操作时所需的对不同 API 对象的访问权限。访问控制是通过 Kubernetes 中的 RBAC 机制进行管理的,通过定义角色和角色绑定,将适当的访问权限分配给云控制器管理器。云控制器管理器可能需要对 Node、Pod、Service、Endpoint、Route 等各种 API 对象进行访问和更新,以执行其操作。
Node控制器(Node controller)
Node控制器(Node controller)仅与Node对象一起工作。它需要完全访问权限以读取和修改Node对象。
下面是对Node对象的访问操作:
- get:获取一个特定的Node对象。
- list:获取所有Node对象的列表。
- create:创建一个新的Node对象。通常由云控制器管理器在云基础设施中创建新服务器时使用。
- update:更新现有的Node对象。可以用于更新节点的状态、标签、注释等信息。
- patch:对现有的Node对象进行局部更新。可以部分地更新节点的信息,而不影响其他字段。
- watch:监视Node对象的变化。该操作允许控制器实时监测节点的状态变化。
- delete:删除一个Node对象。通常在节点从云中删除时使用。
总而言之,Node控制器需要对Node对象具有完全的读写权限。它可以执行各种操作,包括获取、创建、更新、删除等,以管理节点在Kubernetes集群中的状态和属性。
Route控制器(Route controller)
在Kubernetes中,Route控制器(Route controller)监听Node对象的创建并适当地配置路由。
它需要对Node对象具有Get访问权限。
对于Node对象的Get访问权限,意味着Route控制器可以获取特定的Node对象的信息。通过获取Node对象的状态和属性,Route控制器可以了解到集群中节点的详细信息,如IP地址、标签、资源情况等。
获取Node对象对于Route控制器来说是必要的,因为它需要知道有哪些节点在集群中,并且为了配置适当的路由规则,它需要了解节点的IP地址和相关信息。通过获取Node对象,Route控制器可以根据节点的状态和属性进行相应的操作,确保在不同节点之间进行网络通信时的正确路由设置。
服务控制器(Service controller)
监视 Service对象的创建、更新和删除事件,然后相应地为这些服务配置Endpoints资源(对于EndpointSlices资源,kube-controller-manager按需进行管理)。
为了访问Service对象,服务控制器需要list和watch访问权限。为了更新Service对象,它需要patch和update访问权限。
为了为这些服务设置Endpoints资源,服务控制器需要create、list、get、watch和update的访问权限。
下面是对Service对象的访问操作:
- list:获取所有Service对象的列表。
- get:获取一个特定的Service对象。
- watch:监视Service对象的变化。
- patch:对现有的Service对象进行局部更新。
- update:更新现有的Service对象。
通过这些操作,服务控制器能够获取和更新Service对象的信息。它可以监视Service对象的变化,并相应地设置或更新与之关联的Endpoints资源,以确保服务与Pod的连接正确建立和维护。
其他
- 以下是对Event对象的访问操作:
- create:创建一个新的Event对象。
- patch:对现有的Event对象进行局部更新。
- update:更新现有的Event对象。
通过这些操作,云控制器管理器能够创建和更新Event对象,这些对象用于记录集群中发生的事件和状态变化。
- 对于ServiceAccount对象,云控制器管理器需要创建访问权限,以创建新的ServiceAccount对象。ServiceAccount用于在Kubernetes中管理身份验证和授权,云控制器管理器可能需要为自身创建一个ServiceAccount以执行特定任务。
至于RBAC ClusterRo 管理器的实现,具体实现会根据云服务提供商和集群的配置而异。
RBAC ClusterRole定义了在整个集群范围内将授予云控制器管理器的权限。
RBAC ClusterRole的具体配置取决于云控制器管理器所需的操作和访问权限。它可能涵盖对集群范围的各种资源的访问权限,如Node、Pod、Service、Endpoint等。此外,它还可以涉及到一些底层云基础设施的访问权限和操作权限,以便云控制器管理器能够执行特定的云操作。