我正在使用DigitalOcean上的CoreOs和Kubernetes构建容器集群,我已经看到,为了向世界公开Pod,您必须使用Type:LoadBalancer创建服务。我认为这是最佳解决方案,因此您无需在nuberx或haproxy等kubernetes之外添加外部负载均衡器。我想知道是否可以使用DO的浮动IP来创建它。
答案 0 :(得分:6)
情况发生了变化,DigitalOcean根据回答here创建了自己的云提供商实现,并维护着Kubernetes的“ Cloud Controller Manager”实现:
Kubernetes Cloud Controller Manager for DigitalOcean
当前digitalocean-cloud-controller-manager的实现:
nodecontroller-使用云提供商特定的标签更新节点,并 地址,在云上删除时也会删除kubernetes节点 提供者。
servicecontroller-负责创建LoadBalancers 在Kubernete中创建类型为:LoadBalancer的服务 s。
要尝试,请在您的主节点上克隆项目。
接下来从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集群,而不用担心很多基础架构(这是我的了解服务后,让我们看看它何时可用……)
答案 1 :(得分:4)
通过将代码添加到特定于每个云提供商的kubernetes主服务器来实现LoadBalancer类型的服务。 Digital Ocean(supported cloud providers)没有云提供商,因此LoadBalancer类型将无法利用Digital Ocean的浮动IP。
相反,您应该考虑使用NodePort service或将ExternalIP附加到您的服务,并将公开的IP映射到DO浮动IP。
答案 2 :(得分: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