如何提供从公共 Internet 到 Azure 专用 Kubernetes 群集中托管的应用的入站访问



我在Azure K8S集群中部署了一个应用程序,使用NGINX作为网关,使用基于AKS和PUBLIC-IP以及AKS和NGINX的公共静态IP。

现在,我需要在 Azure 专用群集中部署应用程序,即在专用 VNet 中运行(请参阅创建专用 AKS(; 尝试将公共静态 IP 分配给 NGINX 不起作用,这是可以预期的,因为负载均衡器需要专用 IP,而不是公共 IP。

如何使用 NGINX 和公共静态 IP 提供对托管在专用群集中的应用的入站访问?

嗨,您有两种方法可以实现这一目标...根据你的需求(和 Azure 成本...(:

1-使用 Azure 应用程序网关。对于我自己,我使用Terraform。在这里,您可以看到有关内部IP地址的官方文档。

现在你可以使用这个作为你的新入口(并摆脱NGINX(,就像:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: guestbook
annotations:
kubernetes.io/ingress.class: azure/application-gateway
spec:
rules:
- http:
paths:
- backend:
serviceName: frontend
servicePort: 80

或者,您可以在内部使用 NGINX 作为入口,如选项 2 中所述。

2-首先,您必须有一个公共 IP,并与之关联的负载均衡器。该 LB 的后端必须满足您的需求。

但这是诀窍...不要使用该公共 IP 创建 NGINX,而是使用内部 IP 和内部负载均衡器创建 NGINX,您可以在以下 URL 中看到如何执行此操作:

https://learn.microsoft.com/en-us/azure/aks/ingress-internal-ip

你必须做的重要事情是掌舵参数上的nginx ovveride:

controller:
service:
loadBalancerIP: 10.240.0.42
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"

当然,必须创建内部 VNET,并且负载均衡器 IP 必须是正确的。

现在,NGINX 在专用 IP 后面侦听的最后一个技巧是验证来自公共 IP 的流量是否已重定向到该内部 VNET...当然,这取决于您如何在持有公共 IP 的 LB 后面设置基础设施。

如上面的注释中所述,可以通过 Azure 中的应用程序网关执行相同的操作。但是,如果仅使用 AKS,则可能只想将应用程序网关用作已使用专用群集创建的入口控制器。

请遵循此操作以达到相同的 https://microsoft.github.io/AzureTipsAndTricks/blog/tip256.html

根据您的描述,我知道您希望通过NGINX入口控制器获得入口流量,该控制器具有具有静态IP的负载平衡器服务。如果部署配置正确,则应使用公共 IP 将负载均衡器服务分配给 NGINX 入口控制器。由于我不知道您的命名空间,部署命名等,请尝试:

kubectl get services --all-namespaces | grep -i loadbalancer

您应该能够找到nginx负载均衡器服务具有公共IP。现在,由于 NGINX 是入口控制器,这意味着你有一个第 7 层负载均衡器作为入口,因此需要创建到 AKS 中运行的应用程序的入口路由。这记录在 Azure NGINX 入口和入口 K8s

最新更新