到目前为止,我已经设置了一个运行 NodeJS 部署的 kubernetes 集群。我现在准备将其公开给“世界”,在阅读了执行此操作的服务后,我相信所有这些服务都需要负载均衡器。通常这些负载均衡器是由托管 kubernetes 的云提供商创建的。我遇到了一些限制,有些价格很高,有些对连接有限制等等......
我现在正在尝试找出如何避免这些负载均衡器并公开我的 kubernetes 集群,但要以一种高性能、安全且可管理的方式。我查看了文档,似乎提到了 NodePort
和 Ingress
等内容。据我了解 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
最佳答案
解决这个问题有一些方法:
- 您可以使用称为 MetalLB 的服务,该服务广泛用于裸机部署。它提供了一个网络负载平衡器。
- 如果您不想使用云提供商提供的负载均衡器,您可以借助反向代理(可能是 Nginx 服务)创建自定义负载均衡器。这台机器可以是一个专用实例,只能加载路由和负载均衡功能。您在此之后创建的入口 Controller 可以被允许从该机器获取流量。这是用户定义的边缘创建。
- 如上述解决方案中所述,您可以将
hostNetwork:true
与 nginx-ingress Pod 一起使用,以便可以通过计算机网络直接访问这些计算机。 - 您可以直接将 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/