我在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负载均衡器并将流量路由到这些机器。
但要实现这一点,我需要在我运行的所有服务中维护集群中所有计算机的列表,这感觉不对。
目前推荐的解决方法是什么?
(我知道createExternalLoadBalancer
,但这似乎还不支持AWS)
答案 0 :(得分:3)
如果有人会遇到这个问题,那么我想告诉您,最新的kubernetes版本中提供了外部负载均衡器支持。
答案 1 :(得分:0)
你似乎对这个空间有了很好的理解 - 不幸的是,我没有任何出色的解决方法。
CreateExternalLoadBalancer确实还没有准备好 - 由于AWS的负载均衡器与GCE和Openstack的负载均衡器有多么不同,它正在对服务基础架构进行一些改进以使其适用于AWS。
不幸的是,没有简单的方法可以将PortalIP或外部静态IP直接路由到支持该服务的pod,因为这样做需要路由基础设施在任何pod被移动或重新创建时进行更新。您必须拥有到集群内部节点的PortalIP或外部IP路由,这是您已经使用PublicIPs字段和ELB实际执行的操作。
您现在正在使用负载均衡器进行的操作可能是最佳选择 - 它基本上是CreateExternalLoadBalancer在可用时将执行的操作。您可以将实例的外部IP放入PublicIPs字段,然后通过其中一个到达服务,但这非常紧密地将外部连接耦合到您使用的节点IP的生命周期。