2015-05-06 50 views
4

我有一个kubernetes(0.15)群集在Amazon EC2上路由流量对AWS EC2公共Kubernetes服务

当我创造,我想成为公开访问的服务,我现在添加一些私人CoreOS实例上运行在EC2实例的服务描述像这样的IP地址:

{ 
    "kind": "Service", 
    "apiVersion": "v1beta3", 
    "metadata": { 
    "name": "api" 
    }, 
    "spec": { 
    "ports": [ 
     { 
     "name": "default", 
     "port": 80, 
     "targetPort": 80 
     } 
    ], 
    "publicIPs": ["172.1.1.15", "172.1.1.16"], 
    "selector": { 
     "app": "api" 
    } 
    } 
} 

然后,我可以将这些IP地址添加到ELB负载均衡和流量路由到这些机器。

但为了这个工作,我需要维护群集中所有正在运行的服务的所有机器的列表,这感觉不对。

目前推荐的解决方法是什么?

  • 如果我知道服务的PortalIP有一种方法可以使它在AWS VPC基础架构中可路由吗?
  • 是否可以将外部静态(弹性)IP分配给服务并让它们路由?

(我知道的createExternalLoadBalancer,但这似乎并不支持AWS还)

回答

0

你似乎有空间的一个很好的了解 - 不幸的是,我没有给你任何伟大的变通方法。

CreateExternalLoadBalancer确实还没有准备好 - 它需要对服务基础架构进行一点改革,以使其适用于AWS,因为AWS的负载均衡器与GCE和Openstack的负载均衡器有多不同。

不幸的是,没有简单的方法让PortalIP或外部静态IP可路由直接到支持该服务的pod,因为这样做会需要路由基础设施在任何时候移动或重新创建pod时进行更新。您必须拥有PortalIP或外部IP路由才能访问集群内的节点,这就是您已经有效利用PublicIPs字段和ELB进行的操作。

你现在用负载平衡器做什么可能是最好的选择 - 它基本上是CreateExternalLoadBalancer一旦可用就做的。您可以将实例的外部IP放入PublicIPs字段中,然后通过其中一个到达服务,但这非常紧密地将外部连接与您使用的节点IP的生命周期相耦合。

3

如果有人会遇到这个问题,那么我想告诉你,外部负载平衡器支持可用于最新的kubernetes版本。

Link to the documentation