非托管K8s创建LoadBalancer是否自动配置云负载均衡器
解答
结论很明确:你在Azure虚拟机上手动部署的Kubernetes集群,默认创建LoadBalancer类型Service时不会自动预配Azure Load Balancer,但这个自动预配能力并非只有托管Kubernetes集群才能用,核心逻辑如下:
- Kubernetes核心本身根本不带对接各家云厂商API、创建云资源的逻辑。官方文档提到的LoadBalancer自动预配能力,完全依赖集群中部署的对应云厂商的*云控制器管理器(Cloud Controller Manager,简称CCM)*组件实现。这个组件必须拿到合法的云账号身份凭证、订阅信息、资源组配置、对应网络资源的操作权限,才能调用云服务商的接口完成负载均衡器创建、规则配置、后端节点绑定这些操作。
- 针对Azure VM上手动搭的自管K8s集群,分两种情况:
- 如果你部署集群的时候根本没装Azure官方的CCM组件,也没给组件配好操作权限、订阅ID、资源组、所属虚拟网络这些必要参数,那你创建
LoadBalancer类型的Service之后,资源会一直卡在Pending状态,Azure侧完全不会有任何负载均衡器被创建出来。 - 如果你手动部署集群的时候,按要求装好Azure CCM组件,给组件分配好操作Azure网络、负载均衡资源的最小权限,正确填好集群所在的订阅、资源组、区域、虚拟网络这些配置,哪怕是你自己搭的完全非托管的集群,也能和托管集群一样,创建
LoadBalancerService的时候自动帮你预配对应的Azure Load Balancer。
- 如果你部署集群的时候根本没装Azure官方的CCM组件,也没给组件配好操作权限、订阅ID、资源组、所属虚拟网络这些必要参数,那你创建
- 大家平时用AKS、EKS这类托管K8s的时候觉得LoadBalancer开箱即用,本质是云厂商在托管控制面里提前帮你把对应CCM装好了,所有必要的权限、参数都提前配置完成,不需要你自己手动折腾而已,不是这个能力本身只对托管集群开放。
要是自部署集群不想对接云厂商CCM,也可以部署MetalLB这类裸金属场景的负载均衡方案,一样能实现LoadBalancer类型Service的能力,不需要依赖云厂商提供的负载均衡资源。
内容的提问来源于stack exchange,提问作者YoavKlein
相关产品推荐
相关产品推荐

