AWS VPC - k8s - 负载均衡

AWS VPC - k8s - load balancing

抱歉新手问题;我是 k8s 的新手 world.The 目前的部署方式是在 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是否可行?任何指导和文档链接都会有很大帮助。

一般来说,您会有一个 AWS 负载均衡器实例,其中有多个 K8s worker 作为具有特定端口的后端服务器。流量进入工作节点后,K8s 内部的网络将接管工作。

假设您已经为您的两个域设置了两个 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

更多信息,您可以参考这里的更多信息:

这取决于你是如何设置你的K8s服务的。

如果您在 AWS 中设置了负载均衡器,那么您可以创建一个具有负载均衡器类型的服务,以将服务公开到 Internet。但它会花费很多钱,因为它会为每个服务拥有一个 ELB。更多参考 https://kubernetes.io/docs/concepts/services-networking/service/

另一个选项是 ingress,但如果你不熟悉 K8s,它会更复杂,但 ingress 是一种更流行的将 K8S 暴露在互联网上的方式

这篇文章可以让您更好地了解 ELB <> K8s。
https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e0

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

  • 您可以将 Application Load Balancer 与 EKS 结合使用来处理集群内部的入口。您将必须部署一个 ALB 入口控制器,该控制器将管理将配置的 ALB 分配给您在 K8s 集群中创建的每个入口资源。尽管将 ALB 集成到 EKS 中仍然相对较新,但现在将 ALB 与 EKS 结合使用存在某些缺点。一个是它不能跨集群中的命名空间工作,即对于新命名空间中的每个入口资源,ALB 入口控制器将启动一个新的 ALB,如果集群中有多个命名空间,这不是很划算.

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

  • 如果您想使用私有 VPC Link 进行连接,也可以使用网络负载均衡器。一个示例用例是 API。您可以 运行 私有子网内的集群工作负载并使用面向内部的 NLB。然后通过 VPC Private Link.

  • 将该 NLB 连接到 API 网关服务

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

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

有很多资源可用于 nginx 方法。