azure - 如何在 Azure AKS 上的一个入口 Controller 上创建多个负载均衡器 IP 地址

标签 azure nginx kubernetes-ingress azure-aks

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

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

通过在 Azure 上公开我的 nginx 复制 Controller AKS,会自动创建一个负载均衡器和一个公共(public) IP 地址,我可以向其应用 A 记录: kubectl 公开 rc nginx-ingress-rc --port="80,443"--type="LoadBalancer"

但是,我还想要第二个 A 记录,它指向相同的 IP 地址(我猜?),以便我可以从不同的域访问我的入口 Controller 。我不知道如何让 AKS 为此目的创建第二个?

最佳答案

也许这有点太晚了,并不完全符合原始帖子的要求。非正式地,您可以为入口 Controller 创建多个服务,从而也可以映射多个 IP。 LoadBalancer 类型的单个 k8s 服务的唯一限制是它只能引用单个 IP 地址。

就我而言,我的 AKS 集群包含许多命名空间和可通过不同 URL 访问的不同应用程序。由于历史原因,每个 URL 都有不同的公共(public) 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 ingress 安装到 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

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

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

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

现在,如果我列出为两个应用程序定义的示例入口,您可以看到,两个应用程序都具有相同的第一个公共(public) 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 ingress 的人有所帮助,而无需预先将所有 URL 指向单个公共(public) IP。如果需要,在此迁移步骤之后,您可以请求让所有 URL 仅指向一个 IP,然后您当然可以删除所有不再需要的 ingress-nginx-controller-* 服务。

关于azure - 如何在 Azure AKS 上的一个入口 Controller 上创建多个负载均衡器 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49074383/

相关文章:

c# - 如何在webapi上传中获取多部分文件的流?

php - Azure应用程序服务不使用新的/更改的文件

nginx - 在浏览器中检测 HTTP2/SPDY 支持

django - 使用 Nginx 为 Django 和 Vue 服务

Kubernetes Ingress 与具有外部 IP 的服务

asp.net - 将旧版 url 映射到 MVC Controller 和操作

c# - Azure B2C 如何检索内置用户声明/属性

javascript - Vuejs 运行 "npm run build"随机工作

kubernetes - 使用不同DNS进行 Multi-Tenancy 设置的任何解决方案?

Kubernetes 入口设置多个主机