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

lev*_*lex 5 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"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我可以将这些IP添加到ELB负载均衡器并将流量路由到这些机器.

但为了实现这一点,我需要在我运行的所有服务中维护集群中所有机器的列表,这感觉不对.

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

  • 如果我知道某项服务的PortalIP有可能使其在AWS VPC基础架构中可路由吗?
  • 是否可以将外部静态(弹性)IP分配给服务并进行路由?

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

Ale*_*son 0

您似乎对该领域有很好的了解 - 不幸的是我没有任何好的解决方法适合您。

CreateExternalLoadBalancer 确实还没有准备好 - 它需要对服务基础设施进行一些彻底修改才能使其适用于 AWS,因为 AWS 的负载均衡器与 GCE 和 Openstack 的负载均衡器有很大不同。

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

您现在使用负载均衡器所做的可能是最好的选择 - 这基本上就是 CreateExternalLoadBalancer 在可用后将执行的操作。您可以将实例的外部 IP 放入 PublicIPs 字段,然后通过其中之一访问服务,但这将外部连接与您使用的节点 IP 的生命周期紧密耦合。