如何通过单个 Azure 负载均衡器公开多个 Kubernetes 服务?

How to expose multiple kubernetes services trough single azure load balancer?

我想通过单个负载均衡器公开多个服务。每个服务都指向一个 pod。

到目前为止,我尝试过:

kubectl expose <podName> --port=7000 

并在 Azure 门户中手动设置负载平衡规则或入站 Nat 规则,指向暴露的 pod。 到目前为止,我可以使用外部 IP 和指定端口连接到 pod。

取决于您希望如何分离同一 IP 上的服务。我想到的两种方式是:

  • 使用 NodePort 服务,然后将一些端口从 LB 映射到集群节点上的那个部分。这给出了端口分离。
  • 我认为更有趣的方式是使用 Ingress/IngressController。您将仅在 80 和 443 等标准端口上公开 IC,然后它将通过主机名和 uri
  • 映射到您的服务

在Azure容器服务中,Azure会使用Load Balancer来暴露k8s服务,像这样:

root@k8s-master-E27AE453-0:~# kubectl get svc
NAME         CLUSTER-IP    EXTERNAL-IP     PORT(S)          AGE
jasonnginx   10.0.41.194   52.226.33.200   8080:32011/TCP   4m
kubernetes   10.0.0.1      <none>          443/TCP          11m
mynginx      10.0.144.49   40.71.230.60    80:32366/TCP     5m
yournginx    10.0.147.28   40.71.226.23    80:32289/TCP     4m
root@k8s-master-E27AE453-0:~# 

通过 Azure 门户,检查 Azure 负载均衡器前端 IP 配置(不同的 IP 地址):

ACS 将创建 Load Balancer rules 并自动添加 rontend IP 地址

How to expose multiple kubernetes services trough single azure load balancer?

ACS 通过那个 Azure 负载均衡器公开 k8s 服务,你的意思是你想用 单个 Public IP 地址公开 k8s 服务吗?

如果你想用单个 public IP 地址公开 k8s 服务,如 Radek 所说,也许你应该使用 Nginx Ingress Controller.

入口控制器是这样工作的:

谢谢大家。我想我已经找到了解决问题的可行方法。我应该更具体地说明我要做什么。

我想通过 UDP 托管游戏服务器。所以任何 kubernetes 入口控制器都不是真正的选择,因为它们很少支持 UDP 路由。 我也不需要在单个机器上托管大量服务,每个节点 pods 的 1-4 可能是最大值。

我发现关于使用 :

hostNetwork: true 

在 yaml 配置中,它实际上适用于这种情况。 我直接从主机节点获取 IP。然后我可以 select 匹配负载均衡器中的节点并创建 NAT 或负载均衡规则

创建多个nodePort类型的服务,并修复nodePort。 和云负载均衡器一样,设置多个监听组。监听端口与服务的节点端口相同,目标是所有工作节点。