Kubernetes - 集群外 TCP 连接的不同“服务”

时间:2021-03-11 18:22:11

标签: azure kubernetes kubernetes-ingress azure-aks nginx-ingress

我正在使用 Azure Kubernetes 服务 (AKS),我需要仅用于 TCP 连接的服务。我根本不需要 HTTP,我认为强调这一点很重要。为了访问我们的服务,在 AKS 集群外部,但只能从不同的虚拟网络 VM(而不是来自公共互联网)访问,Azure 管理员的结论是我应该:

  • 使用 ClusterIP
  • 公开我的 Pod 应用服务
  • 安装 NGINX Ingress Controllerinternal Load Balancer 类型以连接到 ClusterIp 服务
  • 我也创建了 kind:Ingress 资源,但由于我没有使用 HTTP 连接,因此根本不需要它,但正如我提到的,我仅使用 NGINX IP 地址和端口从外部访问我的容器化应用程序。一切都在这个 Ingress Controller 就位的情况下工作。

我阅读了很多关于 Kubernetes services 、类型、连接和 Ingress 的内容,我想总结一下我需要回答的困境和困惑 - 为什么我必须实施这种方法而不是一些更简单的网络架构入口? (因为我没有使用 HTTP)

  • ClusterIP - 它用于使用 CLUSTER-IP:PORT
  • 从集群中的任何节点访问服务
  • NodePort - 用于使用 NodeIP:NodePort
  • 使用节点访问外部的服务

问题 1: 为什么我不能只使用 NodeIP:NodePort 来使用来自不同 Azure 虚拟网络的 TCP 访问我的服务???当然需要配置防火墙规则,但是为什么这种方式不行,还得安装Ingress Controller?

  • LoadBalancer - 使用云提供商的负载平衡器在外部公开服务。好的,我不能使用公共负载均衡器,这很清楚,但为什么我不能将 LoadBalancer 与内部 LoadBalancer 类型一起使用?以下链接对此进行了解释和提及: https://docs.microsoft.com/en-us/azure/aks/internal-lb 他们在其中声明“...仅可由与 Kubernetes 集群在同一虚拟网络中运行的应用程序访问”。它使用 EXTERNAL_IP:PORT 值来访问服务。

问题 2: 是否真的不存在一些其他方法来使用 LoadBalancer 从不同的虚拟网络访问服务但不公开在 Internet 上公开?它真的必须包含需要创建的带有入口控制器的更复杂的网络架构吗?我必须再次强调只针对 TCP 而不是 HTTP 连接用例

问题 3: 可用于从不同虚拟网络进行连接的常用和常规网络服务和设置是什么?再次 - 仅适用于 TCP 连接,如果重要的话,我会更广泛地寻找 Azure。

我将感谢对所有 3 个问题的完整解释,因为在 kubernetes.io 文档中没有明确提到这种用例 - 他们总是提到 Ingress 资源用于 HTTP,但明确地基于我从管理员那里得到的说明TCP问题也是如此

谢谢

0 个答案:

没有答案
相关问题