为 HTTPS 访问配置 AKS 负载平衡器

Posted

技术标签:

【中文标题】为 HTTPS 访问配置 AKS 负载平衡器【英文标题】:Configuring an AKS load balancer for HTTPS access 【发布时间】:2019-04-22 08:13:59 【问题描述】:

我正在将最初为 AWS Fargate 容器服务开发的应用程序移植到 Azure 下的 AKS。在 AWS 实施中,会创建一个应用程序负载均衡器并将其放置在 UI 微服务之前。此负载均衡器配置为使用签名证书,允许 https 访问我们的后端。

我已经对这个主题进行了一些搜索,以及如何在 AKS 中配置类似的东西。对于各种类似的问题,我找到了很多不同的答案,但没有一个正是我正在寻找的。据我所知,Azure 中没有与 AWS 方法完全等效的方法。 AWS 解决方案的不同之处在于,您预先创建了一个应用程序负载均衡器并将其配置为使用证书,然后为后端 UI 微服务配置一个 https 侦听器。

在 Azure 案例中,当您发出“az aks create”命令时,会自动创建负载均衡器。似乎没有办法进行大量配置,尤其是与证书有关的配置。我的印象是,AKS 创建的默认负载均衡器最终不是用于此目的的机制。另一种选择可能是应用程序网关,如here 所述。我不确定如何使这个讨论适应 AKS。 UI pod 需要成为通过应用程序网关的任何流量的最终目标,但网关使用的子网与 AKS 集群中的 pod 使用的子网不同。

所以我不确定如何继续。我的问题是:应用程序网关是为在 AKS 群集中运行的 UI 提供 https 访问的正确解决方案,还是我需要使用其他方法?

【问题讨论】:

【参考方案1】:

证书颁发和续订不是由入口处理,但是使用cert-manager您可以轻松添加自己的 CA 或使用 Let's encrypt 在您对入口或服务对象进行注释时自动颁发证书。 AKS 的 http_application_routing 插件完全能够与 cert-manager 一起使用;甚至可以使用 ConfigMaps(kube-system 命名空间中的 addon-http-application-routing-nginx-configuration)进一步配置。您还可以将应用程序网关的初始支持视为 ingress here

【讨论】:

我的问题与如何生成和管理证书无关,而是如何配置负载均衡器以使用它们(假设您从某个地方获得了签名证书)。这确实是两个不同的问题。不过我会检查 cert-manager。【参考方案2】:

您是对的,AKS 创建的默认负载均衡器是第 4 层 LB,不支持 SSL 卸载。 Azure 中 AWS 应用程序负载均衡器的等效项是 Application Gateway。截至目前,AKS 中没有允许选择应用程序网关而不是经典负载均衡器的选项,但就像 alev 所说,有一个 ongoing project 仍在预览中,它允许部署一个特殊的入口控制器来驱动基于您的入口规则的外部应用程序网关上的路由规则。如果你真的需要可以生产的东西,这里是你的选择:

    部署一个 Ingress 控制器,如 NGINX、Traefik 等,并使用 cert-manager 生成您的证书。 创建一个应用程序网关并管理您自己的路由规则,该规则将指向默认的第 4 层 LB(k8s LoadBalancer 服务或通过入口控制器)

我们最近实现了类似的东西,我们决定管理我们自己的应用程序网关,因为我们想在集群外部进行 SSL 卸载,并且因为我们需要应用程序网关的 WAF 功能。我们能够在我们的部署管道中自动管理路由规则。当应用程序网关准备好生产时,我们可能会将其用作入口项目。

【讨论】:

应用程序网关项目何时会成为 GA? 你需要问微软,但我猜会在几个月后。

以上是关于为 HTTPS 访问配置 AKS 负载平衡器的主要内容,如果未能解决你的问题,请参考以下文章

将 http 重定向到 https AWS 应用程序负载均衡器

使用 AWS 负载均衡器的 A(主机)记录

AWS EC2服务器的HTTPS负载均衡器配置过程

带非 TLS 后端的 HTTPS 负载平衡器和带 TLS 后端的 HTTPS 负载平衡器有啥区别

HAProxy配置为代理与负载均衡器之实践

Azure Linux VM配置负载平衡后无法连接