【问题标题】:Exposing kubernetes clusteer to "the world" without Load Balancer of cloud provider没有云提供商的负载均衡器,将 kubernetes 集群暴露给“世界”
【发布时间】:2020-05-17 11:52:24
【问题描述】:

到目前为止,我已经建立了一个运行 NodeJS 部署的 kubernetes 集群。我现在准备将它暴露给“世界”,并且在阅读了执行此操作的服务之后,我相信它们都需要负载均衡器。通常这些负载均衡器是由托管 Kubernetes 的云提供商创建的。我遇到了一些限制,有些价格很高,有些对连接有限制等等......

我现在正试图弄清楚如何避免这些负载均衡器并公开我的 kubernetes 集群,但要以一种高性能、安全和可管理的方式。我查看了文档,似乎提到了NodePortIngress 之类的东西。据我了解NodePort 仅适用于集群中的单台机器?而Ingress 仍然需要来自某个地方的流量,通常是负载均衡器。

这是我目前的清单,我应该从这里向公众公开它,理想情况下使用允许 SSL 证书、速率限制等的方法......你在生产中需要的通常的东西

development.yaml

---
# ClusterIP
apiVersion: v1
kind: Service
metadata:
  name: development-actions-cip
spec:
  type: ClusterIP
  selector:
    app: development-actions
  ports:
    - protocol: TCP
      port: 80
      targetPort: 4000
---
# Actions NodeJS server
apiVersion: apps/v1
kind: Deployment
metadata:
  name: development-actions
spec:
  replicas: 1
  selector:
    matchLabels:
      app: development-actions
  template:
    metadata:
      labels:
        app: development-actions
    spec:
      containers:
        - image: my-image/latest
          name: development-actions
          ports:
            - containerPort: 4000
              protocol: TCP

【问题讨论】:

  • 我们遇到了同样的挑战。不幸的是,经过详尽的搜索后,我们意识到无论您是公开一个 vm,还是公开一个负载均衡器,您都将被收取入口费用。一旦你接受了这一点,你就可以通过不使用 k8 的内置入口路由器来降低成本。那个用户负载均衡器规则是昂贵的。我们改为使用单个负载均衡器规则,然后使用我们自己的入口运行 traefik docs.traefik.io
  • 如果你可以创建一个额外的微实例,你可以在 NGINX 中运行一个负载均衡器:docs.nginx.com/nginx/admin-guide/load-balancer/…

标签: kubernetes load-balancing kubernetes-ingress


【解决方案1】:

解决问题有几种方法:

  1. 您可以使用一种称为 MetalLB 的服务,该服务通常用于裸机部署。它提供了一个网络负载平衡器。
  2. 如果您不想使用云提供商提供的负载均衡器,您可以借助反向代理(可能是 Nginx 服务)创建自定义负载均衡器。这台机器可以是一个专用实例,只能加载路由和负载平衡功能。在此之后创建的入口控制器可以被允许从这台机器获取流量。这是用户定义的边缘创建。
  3. 如上述解决方案中所述,您可以将hostNetwork:true 与您的 nginx-ingress Pod 一起使用,以便可以通过机器网络直接访问这些机器。
  4. 您可以直接将 externalIP 与 nginx 入口 pod 一起使用,您可以在其中直接为服务分配公共 IP 并通过 Internet 连接服务。

有关更多信息和设置详细信息,请访问 Nginx 入口的官方文档:https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#over-a-nodeport-service

我已经尝试了所有这些选项来部署我的应用程序,我的建议是,如果您使用某些云服务来部署集群,请使用云服务提供商的负载均衡器,因为它更加安全、高度可用和可靠.如果您使用的是本地部署,则用于用户定义的边缘创建或 MetalLB 服务

【讨论】:

    【解决方案2】:

    您可以使用hostNetwork: true 在选定的专用 kubernetes 节点中部署 nginx 入口控制器。这意味着 nginx 将侦听主机 VM 网络上的端口 80443。将浮动公共 IP 分配给 VM。将 VM 的公共 IP 作为 A record 添加到您的 DNS 提供商配置中,以将您的域的流量路由到 VM。

    然后,对于所有后端 pod,只需创建 clusterIP 服务和入口资源以将其公开给外部世界。

    要使其成为 HA,您可以将相同的设置复制到多个 kubernetes 节点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-28
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多