AWS VPC-K8S-负载平衡

时间:2019-02-20 10:46:09

标签: amazon-web-services kubernetes aws-eks

很抱歉出现新手问题;我是k8s世界的新手,目前的部署方式是在EC2上部署应用程序。我尝试将容器化应用程序部署到VPC的新方法。

AWS用旧的方式将aaa.bbb.com的流量路由到vpc-ip:443 ELB,这将进一步将其路由到private subnet:443上的ASG,并且应用程序可以正常工作。

图中的k8s表示交通流如何?

我正在尝试确定是否可以在ELB上的多个端口上使用各自的dns,并将流量路由到辅助节点上的某个端口上。

xxx.yyy.com -> vpc-ip:443/ -> ec2:443/
aaa.bbb.com -> vpc-ip:9000/ -> ec2:9000/ 

是否可以在同一VPC上使用k8s?任何指导和文档链接都将提供很大帮助。

3 个答案:

答案 0 :(得分:3)

通常,您将拥有一个AWS Load Balancer实例,该实例将具有多个K8s worker作为具有特定端口的后端服务器。流量进入工作节点后,K8内部的网络将接替工作。

假设您已经为两个域分别设置了两个K8S服务作为负载平衡器,分别具有端口38473和38474:

xxx.yyy.com -> AWS LoadBalancer1 -> Node1:38473 -> K8s service1 -> K8s Pod1
                                 -> Node2:38473 -> K8s service1 -> K8s Pod2
aaa.bbb.com -> AWS LoadBalancer2 -> Node1:38474 -> K8s service2 -> K8s Pod3
                                 -> Node2:38474 -> K8s service2 -> K8s Pod4

上面的简单解决方案需要您创建不同的服务作为负载均衡器,这将增加成本,因为它们是实际的AWS负载均衡器实例。为了降低成本,您可以在群集中有一个ingress-controller实例,并编写ingress配置。只需一个实际的AWS负载平衡器即可完成网络连接:

xxx.yyy.com -> AWS LoadBalancer1 -> Node1:38473 -> Ingress-service -> K8s service1 -> K8s Pod1
                                 -> Node2:38473 -> Ingress-service -> K8s service1 -> K8s Pod2
aaa.bbb.com -> AWS LoadBalancer1 -> Node1:38473 -> Ingress-service -> K8s service2 -> K8s Pod3
                                 -> Node2:38473 -> Ingress-service -> K8s service2 -> K8s Pod4

有关更多信息,您可以在此处参考更多信息:

答案 1 :(得分:2)

这取决于您如何设置K8s服务。

如果您在AWS中设置了负载均衡器,则可以创建具有负载均衡器类型的服务,以将服务公开给互联网。但这会花费很多钱,因为它将为每个服务拥有一个ELB。了解更多信息https://kubernetes.io/docs/concepts/services-networking/service/

另一种选择是进入,但是如果您不熟悉K8,它将更加复杂,但是进入是将K8S暴露在互联网上的一种更流行的方式

本文可以为您提供更好的ELB <> K8s概念。
https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e0

答案 2 :(得分:0)

您要尝试的并不是在EKS上执行此操作的成本最高且标准的方法。 kubernetes集群中的LoadBalancer资源映射到AWS中的Classic Load Balancer。这种方法将为您使用类型负载均衡器创建的每个k8s服务启动一个新的ELB。 有多种方法可以做到,最适合您的用例。

  • 您可以使用带有EKS的Application Load Balancer来处理集群内部的入口。您将必须部署ALB入口控制器,该控制器将管理将配置的ALB分配给您在K8s集群中创建的每个入口资源。尽管将ALB集成到EKS中仍然是一个相对较新的技术,但是现在将带有EKS的ALB一起使用存在某些缺点。一种是它无法跨集群中的命名空间运行,即对于新命名空间中的每个入口资源,ALB入口控制器都会启动一个新的ALB,如果您在集群中有多个命名空间,成本效益就不高

  • 您可以使用单个负载平衡器公开群集,并将所有传入请求路由到内部入口代理。 nginx易于实现,并且可以与k8s入口资源一起很好地工作。您将必须在集群中部署Nginx入口控制器。控制器将处理将elb分配给入口资源。 (奖金:nginx入口可跨名称空间使用,与ALB不同)。

  • 如果要使用VPC专用链接进行连接,也可以使用网络负载平衡器。一个示例用例是API。您可以在专用子网中运行群集工作负载,并使用面向内部的NLB。然后通过VPC专用链接将该NLB连接到API网关服务。

这是一个git存储库,其中包含一些有关使用EKS部署ALB的帮助代码:

https://github.com/pahud/eks-alb-ingress

nginx方法有很多可用资源。