DigitalOcean 上的 Kubernetes 外部负载均衡器服务

Kubernetes External Load Balancer Service on DigitalOcean

我正在 DigitalOcean 上使用 CoreOs 和 Kubernetes 构建一个容器集群,我发现为了向世界公开一个 Pod,您必须创建一个类型为 LoadBalancer 的服务。我认为这是最佳解决方案,因此您无需在 kubernetes 外部添加外部负载均衡器,如 nginx 或 haproxy。我想知道是否可以使用 DO 的浮动 IP 创建它。

LoadBalancer 类型的服务是通过向每个云提供商特定的 kubernetes master 添加代码来实现的。 Digital Ocean (supported cloud providers) 没有云提供商,因此 LoadBalancer 类型将无法利用 Digital Ocean 的浮动 IP。

相反,您应该考虑对您的服务使用 NodePort service or attaching an ExternalIP 并将公开的 IP 映射到 DO 浮动 IP。

其实可以通过浮动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

事情发生了变化,DigitalOcean 创建了自己的云提供商实现作为回答 here and they are maintaining a Kubernetes "Cloud Controller Manager" 实现:

Kubernetes Cloud Controller Manager for DigitalOcean

Currently digitalocean-cloud-controller-manager implements:

  • nodecontroller - updates nodes with cloud provider specific labels and addresses, also deletes kubernetes nodes when deleted on the cloud provider.

  • servicecontroller - responsible for creating LoadBalancers when a service of Type: LoadBalancer is created in Kubernetes.

要尝试在您的主节点上克隆项目。

接下来从 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

还有更多例子here

如果你这样做了,会发生什么? DO 的云管理器将创建一个负载平衡器(具有开箱即用的故障转移机制,更多内容 in the load balancer's documentation

随着 DigitalOcean 加入 Kubernetes 潮流,情况很快就会再次发生变化,检查 here 并且您可以选择让他们管理您的 Kuberentes 集群,而不用担心很多基础设施(这是我对这项服务的理解,让我们看看它在可用时是如何工作的...)