将流量路由到AWS EC2上的公共Kubernetes服务

时间:2015-05-06 13:41:29

标签: amazon-ec2 kubernetes

我在Amazon EC2上的CoreOS实例上运行了kubernetes(0.15)群集

当我创建一个我想要公开访问的服务时,我目前将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)

2 个答案:

答案 0 :(得分:3)

如果有人会遇到这个问题,那么我想告诉您,最新的kubernetes版本中提供了外部负载均衡器支持。

Link to the documentation

答案 1 :(得分:0)

你似乎对这个空间有了很好的理解 - 不幸的是,我没有任何出色的解决方法。

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

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

您现在正在使用负载均衡器进行的操作可能是最佳选择 - 它基本上是CreateExternalLoadBalancer在可用时将执行的操作。您可以将实例的外部IP放入PublicIPs字段,然后通过其中一个到达服务,但这非常紧密地将外部连接耦合到您使用的节点IP的生命周期。