我正在使用CoreOs和Kubernetes在DigitalOcean上构建容器集群,并且发现要将Pod暴露给外部必须创建一个类型为LoadBalancer的Service。我认为这是最优解,因为您无需像nginx或haproxy那样在kubernetes外部添加外部负载均衡器。我想知道是否可以使用DO的Floating IP来创建此服务。
我正在使用CoreOs和Kubernetes在DigitalOcean上构建容器集群,并且发现要将Pod暴露给外部必须创建一个类型为LoadBalancer的Service。我认为这是最优解,因为您无需像nginx或haproxy那样在kubernetes外部添加外部负载均衡器。我想知道是否可以使用DO的Floating IP来创建此服务。
适用于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集群,而不必担心基础设施的许多问题(这是我对服务的理解,在它可用之后我们会看到它是如何运作的...)
实际上,可以通过浮动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
kubectl expose rc my-nginx --port=80 --public-ip=10.x.x.x --type=LoadBalancer