数字海洋上的Kubernetes外部负载均衡器服务

9

我正在使用CoreOs和Kubernetes在DigitalOcean上构建容器集群,并且发现要将Pod暴露给外部必须创建一个类型为LoadBalancer的Service。我认为这是最优解,因为您无需像nginx或haproxy那样在kubernetes外部添加外部负载均衡器。我想知道是否可以使用DO的Floating IP来创建此服务。

3个回答

9
事情发生了变化,DigitalOcean创建了他们自己的云服务提供商实现,如此处所述,并且他们正在维护一个Kubernetes "Cloud Controller Manager" 实现:

适用于DigitalOcean的Kubernetes Cloud Controller Manager

digitalocean-cloud-controller-manager目前实现如下:

  • nodecontroller - 使用云提供商相关的标签和地址更新节点,同时在云提供商上删除Kubernetes节点。

  • servicecontroller - 当Kubernetes中创建了类型为LoadBalancer的服务时,负责创建负载均衡器。

要尝试它,在主节点上克隆该项目。

接下来从 https://cloud.digitalocean.com/settings/api/tokens 获取令牌密钥并运行:

export DIGITALOCEAN_ACCESS_TOKEN=abc123abc123abc123
scripts/generate-secret.sh
kubectl apply -f do-cloud-controller-manager/releases/v0.1.6.yml

这里有更多的示例

当你完成上述步骤后会发生什么?DO的云管理器将创建一个负载均衡器(该负载均衡器具备开箱即用的故障转移机制,更多信息请参见负载均衡器文档)。

很快数字海洋也将加入Kubernetes大家庭,可以在这里了解,你可以选择让他们管理你的Kubernetes集群,而不必担心基础设施的许多问题(这是我对服务的理解,在它可用之后我们会看到它是如何运作的...)


4
服务的LoadBalancer类型是通过向kubernetes主服务器添加特定于每个云提供商的代码来实现的。Digital Ocean不支持云提供商(支持的云提供商),因此LoadBalancer类型将无法利用Digital Ocean的Floating IPs。
相反,您应该考虑使用NodePort服务或将ExternalIP附加到您的服务,并将暴露的IP映射到DO浮动IP。

那么这是否意味着我必须在Kubernetes集群外创建一个外部负载均衡器? - mateeyow
NodePorts旨在与集群外的负载均衡器一起使用。Loadbalancer类型有助于自动化支持的云平台上外部负载均衡器的配置。由于看起来Digital Ocean可能不提供负载均衡器,因此您还可以考虑使用[ExternalIPs](http://kubernetes.io/v1.1/docs/user-guide/services.html#external-ips)并将公开的IP映射到DO浮动IP。 - Robert Bailey
你可以使用NGINX ingress控制器,并将DigitalOcean LB指向部署控制器的主机。通过一些调整,你可能可以将其打造成高可用性的设置。参考:https://github.com/hobby-kube/guide#bringing-traffic-to-the-cluster - pstadler

2

实际上,可以通过浮动IP公开服务。唯一的问题是需要使用的外部IP有点不直观。

从看起来像是DO为其浮动IP服务提供了某种覆盖网络。要获取您需要公开的实际IP,您需要通过SSH登录到网关Droplet并通过访问元数据服务找到其锚定IP:

curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/anchor_ipv4/address

你将获得类似以下内容的结果

10.x.x.x

这是您可以在Kubernetes中使用的LoadBalancer类型服务的外部IP地址。
示例:
kubectl expose rc my-nginx --port=80 --public-ip=10.x.x.x --type=LoadBalancer

我在使用k8s 1.5.2时遇到了“错误:未知标志:--public-ip”的问题。 - rjdkolb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接