kubernetes - 使用现有设置将 AKS 中的 Pod 公开到 Internet

标签 kubernetes namespaces azure-aks

我们请求将 AKS 环境中的某些 Pod 公开给 Internet 以供第 3 方使用。
目前,我们有一个私有(private) AKS 集群,前面有一个托管标准 SKU 负载均衡器,使用高级 azure 网络(基本上是 Calico),其中每个 Pod 从 Vnet IP 空间获取自己的私有(private) IP。当前,所有私有(private) IP 都通过用户定义的路由通过防火墙路由以到达互联网,反之亦然。通过 azure 虚拟广域网通过 VPN 连接在本地路由之间的流量。除非 100% 必要,否则我不想更改任何现有的路由行为。
我的问题是,如何公开现有的私有(private) AKS 集群的特定 Pod 以便从 Internet 访问?整个集群不需要暴露在互联网上。我预见的问题是短暂的 Pod 和不断变化的 IP,使得防火墙中的简单 NAT 不是一种选择。我还考虑过简单地使用公共(public)负载均衡器创建一个新的 AKS 集群。但这里的问题是安全性,因为它仍然必须通过防火墙,并且可能可以使用现有的用户定义的路由
设置 AKS 中的某些 Pod 可以通过 Internet 访问的架构的推荐方法是什么,同时仍然允许这些 Pod 通过专用网络访问 Pod。我想避免将所有 Pod 暴露在互联网上

最佳答案

您可以使用几个选项来将您的应用程序公开给
在您的网络之外,例如: 服务:

  • NodePort: Exposes the Service on each Node’s IP at a static port (the NodePort). A ClusterIP Service, to which the NodePort Service routes, is automatically created. You’ll be able to contact the NodePort Service, from outside the cluster, by requesting <NodeIP>:<NodePort>.

  • LoadBalancer: Exposes the Service externally using a cloud provider’s load balancer. NodePort and ClusterIP Services, to which the external load balancer routes, are automatically created.


此外,还有另一个选项是使用 ingress , IMO 这是向外部公开 HTTP 应用程序的最佳方式,因为可以按路径和主机创建规则,并且比服务提供更多的灵活性。对于入口 只有支持 HTTP/HTTPS,如果您需要 TCP 则转到服务
我建议您查看此链接以深入了解服务和入口的工作原理:
Kubernetes Services
Kubernetes Ingress
NGINX Ingress
AKS network concepts

关于kubernetes - 使用现有设置将 AKS 中的 Pod 公开到 Internet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64996080/

相关文章:

Kubernetes集群中的Nginx微服务网关配置

namespaces - 协调 Admin:: Controller 与::模型

azure - AKS LoadBalancer 外部 IP 卡在 <pending> 上

C#方法和命名空间问题

kubernetes - 从 kubectl 描述节点获取特定属性

azure - 获取访问 Azure keyvault 的 token 失败,并显示“操作已取消”消息

Azure AKS : Kubernetes pod keeps showing CrashLoopBackOff status after assigning static IP

node.js - Kubernetes LoadBalancer 服务返回空响应

dns - Kubernetes GKE-DNS传播非常缓慢

xml - 跨命名空间的 XSL 转换