【问题标题】:How does "type: LoadBalancer" creates external Load Balancer in Kubernetes?“type:LoadBalancer”如何在 Kubernetes 中创建外部负载均衡器?
【发布时间】:2019-01-06 03:06:31
【问题描述】:
Kubernetes 如何知道它上面运行的是哪个外部云提供商?
是否有任何特定的服务在 Master 中运行,可以确定 Kubernetes 集群是在 AWS 中运行还是在 Google Cloud 中运行?
即使它能够发现它是 AWS 或 Google,它从哪里获取凭证来创建外部 AWS/Google 负载均衡器?我们是否必须在某处配置凭据,以便它从那里挑选并创建外部负载均衡器?
【问题讨论】:
标签:
amazon-web-services
kubernetes
google-kubernetes-engine
elastic-load-balancer
aws-load-balancer
【解决方案1】:
在安装 Kubernetes 云提供商标志时,您必须在各种组件上指定 --cloud-provider=aws 标志。
kube-controller-manager - 这是在发出特定于云的请求时与云 API 交互的组件。它运行“循环”,确保完成任何云提供商请求。因此,当您请求 Type=LoadBalancer 的服务时,控制器管理器会检查并确保已提供此服务
kube-apiserver - 这只是确保公开云 API,例如持久卷
kubelet - 确保在节点上配置工作负载时。对于持久存储 EBS 卷之类的情况尤其如此。
我们是否必须在某处配置凭据,以便它从那里提取并创建外部负载均衡器?
以上所有组件都应该能够查询所需的云提供商 API。通常这是使用IAM roles 完成的,它确保实际节点本身具有权限。如果您查看kops 文档,您将看到分配给主节点和工作节点以授予这些节点查询和进行 API 调用权限的 IAM 角色示例。
应该注意的是,这种模式很快就会改变,将所有云提供商逻辑移动到专用的cloud-controller-manager,安装集群时必须预先配置。