也许这有点太晚了,而不是原始帖子所要求的。非正式地,您可以为入口控制器创建多个服务,从而映射多个 IP。仅限LoadBalancer类型的单个k8s服务的限制,它只能引用单个IP地址。
就我而言,我的 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 所述的步骤,并在入口部署过程中(使用 helm)仅提供了一个 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-controller,并且您可以像往常一样基于不同的主机/路径进行路由。
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 入口的人有所帮助,而无需预先将所有 URL 指向单个公共 IP。如果需要,您可以在此迁移步骤之后请求所有 URL 仅指向一个 IP,然后您当然可以删除所有 ingress-nginx-controller-* 服务,这将不再需要。