azure - 如何提供从公共(public)互联网到 Azure 私有(private) kubernetes 集群中托管的应用程序的入站访问

标签 azure kubernetes nginx-ingress

我在 Azure K8S 集群中部署了一个应用程序,使用 NGINX 作为网关,具有公共(public)静态 IP,基于 AKS & PUBLIC-IP以及 AKS & NGINX .

现在我需要在 Azure 私有(private)集群中部署应用程序,即在私有(private) vnet 中运行(请参阅 CREATE PRIVATE AKS );尝试向 NGINX 分配公共(public)静态 IP 不起作用,这是可以预料的,因为负载均衡器需要私有(private) IP,而不是公共(public) IP。

如何使用 NGINX 和公共(public)静态 IP 提供对托管在私有(private)集群中的应用程序的入站访问?

最佳答案

您好,您有两种方法可以实现这一目标...取决于您的需求(以及 Azure 成本...):

1-使用Azure Application Gateway 。对于我自己,我使用 Terraform 。在这里您可以查看有关 internal IP address 的官方文档.

现在您可以使用这个作为您的新 Ingress(并摆脱 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- 首先,您必须拥有一个公共(public) IP 以及与其关联的负载均衡器。该负载均衡器的后端必须满足您的需求。

但这里有一个技巧...不要使用该公共(public) IP 创建 NGINX,而是使用内部 IP 和内部负载均衡器,您可以在以下网址中了解如何执行此操作:

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

您必须做的重要事情是 helm 参数上的 nginx ovveride:

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

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

既然您已经让 NGINX 在私有(private) IP 后面进行监听,那么最后一个技巧就是验证您从公共(public) IP 的流量是否已重定向到该内部 VNET...当然,这取决于您的方式持有公共(public) IP 的负载均衡器背后的基础设施设置。

关于azure - 如何提供从公共(public)互联网到 Azure 私有(private) kubernetes 集群中托管的应用程序的入站访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62074177/

相关文章:

Azure 通信服务 - 尝试满足搜索请求时发生错误

kubernetes - Kubernetes有状态应用程序的应用程序升级策略

nginx - K8S群集中的RemoteIpAddress始终是入口IP

Istio 和(或与)Nginx 入口 Controller

kubernetes - 为什么我的 Nginx Ingress Controller 给出 503?

azure - 为什么这个零结果 Cosmos DB 查询如此昂贵?

添加第二个应用服务作为终结点时 Azure 流量管理器出现错误

azure - 如何在 Azure Kubernetes 服务中进行基于角色的访问控制?

azure - 在 Azure 上设置 Jenkins、Docker、Kubernetes ci/cd

azure - Power BI 访问 blob 存储,文件头不存在