如何在Azure AKS上的一个入口控制器上创建多个loadbalancer ip地址

时间:2018-03-02 17:33:03

标签: azure nginx kubernetes-ingress azure-aks

我正在尝试在一个k8s群集上设置多个服务,前面有一个Ingress控制器,可以终止所有服务。 这是一个很好的例子:https://github.com/kubernetes/contrib/blob/master/ingress/controllers/nginx/examples/multi-tls/multi-tls.yaml

我最初遵循此示例:https://github.com/brunoterkaly/ingress,然后将其扩展为具有多个tls服务。

通过在Azure上公开我的nginx复制控制器AKS,自动创建一个loadbalancer和一个公共IP地址,我可以应用A记录: kubectl expose rc nginx-ingress-rc --port="80,443" --type="LoadBalancer"

但是,我还想要第二个A记录,指向相同的IP地址(我猜?),以便我可以从不同的域访问我的入口控制器。我无法弄清楚如何让AKS为此目的创造第二个?

2 个答案:

答案 0 :(得分:1)

也许这为时已晚,而且与原始帖子所要求的不完全相同。您可以非正式地为入口控制器创建多个服务,从而也可以映射多个IP。只能引用单个IP地址的只是LoadBalancer类型的单个k8s服务的限制。

就我而言,我拥有AKS群集,其中包含许多名称空间和可通过不同URL访问的不同应用程序。由于历史原因,每个URL都有不同的公共IP地址:

示例:

first.example.com -> 1.2.3.4
second.example.com -> 5.6.7.8
...we could go on, IPs are just made up!

我想将Nginx入口安装到AKS中,该入口将处理所有名称空间的路由,而不是使用专用的LoadBalancer和反向代理对来处理每个应用程序。为此,我按照here所述的步骤进行操作,并在入口部署过程中(使用头盔)仅提供了一个IP地址controller.service.loadBalancerIP=”1.2.3.4”

完成此步骤后,我可以看到以下服务:

PS C:\> kubectl get service -n ingress-nginx
NAME                                   TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)                      AGE
ingress-nginx-controller               LoadBalancer   10.0.141.84    1.2.3.4         80:30065/TCP,443:31444/TCP   14h
ingress-nginx-controller-admission     ClusterIP      10.0.168.127   <none>          443/TCP                      14h

此后,我手动创建了另一个服务ingress-nginx-controller-second,该服务具有完全相同的选择器标签和下一个loadBalancerIP: 5.6.7.8

完成此步骤后,我可以看到以下服务:

PS C:\> kubectl get service -n ingress-nginx
NAME                                   TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)                      AGE
ingress-nginx-controller               LoadBalancer   10.0.141.84    1.2.3.4         80:30065/TCP,443:31444/TCP   14h
ingress-nginx-controller-admission     ClusterIP      10.0.168.127   <none>          443/TCP                      14h
ingress-nginx-controller-second        LoadBalancer   10.0.204.118   5.6.7.8         80:31275/TCP,443:32751/TCP   10m

现在,如果我列出为两个应用程序定义的示例入口,则可以看到,它们都显示了相同的第一个公共IP。这是因为该IP被入口用作发布IP。不过,路由工作得很好,因为第二个服务会将所有流量转发到同一个Ingress-nginx控制器,您可以像往常一样基于不同的主机/路径进行路由。

PS C:\Users\sk1u04h9> kubectl get ingress -A
NAMESPACE   NAME             CLASS    HOSTS                ADDRESS   PORTS     AGE
first       first-ingress    <none>   first.example.com    1.2.3.4   80, 443   14h
second      second-ingress   <none>   second.example.com   1.2.3.4   80, 443   5m

我希望这对尝试迁移到nginx入口的人有所帮助,而无需先期指向单个公共IP的所有URL。在迁移步骤之后,如果需要,您可以请求将所有URL都指向一个IP,然后当然可以删除不再需要的所有ingress-nginx-controller-*服务。

答案 1 :(得分:0)

同时我更了解Ingress。只为入口控制器创建一个IP地址,该地址可以支持基于路径和主机的路由。有关示例,请参阅https://docs.microsoft.com/en-us/azure/aks/ingress。 我只需要为与Azure公共IP地址关联的A记录配置不同CNAME记录的DNS。如果我想为我的服务使用多个* .cloudapp.azure.com fqdn,我最初想要实现的是,我将不得不使用Azure DNS。