我正在尝试在一个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为此目的创造第二个?
答案 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。