kubernetes - 在没有云提供商负载均衡器的情况下将 kubernetes 集群暴露给 "the world"

标签 kubernetes load-balancing kubernetes-ingress

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

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

这是我当前的 list ,在将其公开给公众方面我应该从这里开始,最好使用允许 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

最佳答案

解决这个问题有一些方法:

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

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

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

关于kubernetes - 在没有云提供商负载均衡器的情况下将 kubernetes 集群暴露给 "the world",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61851337/

相关文章:

linux - 哪个http测试工具用于负载平衡?

linux - Ubuntu Linux 和 Crossroads 负载均衡器不太工作

nginx - Kubernetes Ingress Nginx 加载资源 404

kubernetes - Grafana 图像渲染服务 - 如何传递身份验证详细信息

kubernetes - 如何查看所有成功和失败的工作?

Apache 负载均衡器 : direct to specific application based on URL

Kubernetes:Nginx Ingress 不提供外部 IP 地址

kubernetes - 无法从 Ldapmain 对您进行身份验证,因为 "Invalid credentials for <username>"- 通过 Helm Chart 安装的 Gitlab 社区版

java - 使用 kubernetes : access denied for user root 访问 mysql

kubernetes - Minikube 仪表板入口