如何通过单个天蓝色负载均衡器公开多个kubernetes服务?

时间:2018-01-17 22:48:23

标签: azure kubernetes azure-load-balancer azure-kubernetes

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

到目前为止,我试图:

kubectl expose <podName> --port=7000 

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

4 个答案:

答案 0 :(得分:2)

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

  • 使用NodePort服务,然后将LB中的某些端口映射到群集节点上的该部分。这样可以通过端口进行分离。
  • 在我看来更有趣的方法是使用Ingress / IngressController。您只会在标准端口上暴露IC,如80&amp; 443然后它将通过hostname和uri
  • 映射到您的服务

答案 1 :(得分:2)

在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地址):

enter image description here

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

  

如何通过单个天蓝色负载公开多个kubernetes服务   平衡器?

ACS通过Azure负载均衡器公开k8s服务,您是否想要使用单个公共IP地址公开k8s服务?

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

Ingress Controller的工作原理如下:

enter image description here

答案 2 :(得分:0)

谢谢你们。我想我找到了解决问题的可行办法。我应该更具体地说明我要做什么。

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

我发现了使用:

hostNetwork: true 

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

答案 3 :(得分:0)

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