到目前为止,我已经建立了一个运行NodeJS部署的kubernetes集群。我现在准备将其公开给“世界”,并在阅读了做到这一点的服务之后,我相信所有这些都需要负载均衡器。通常,这些负载均衡器是由托管kubernetes的云提供商创建的。我遇到了这些限制,一些定价很高,一些在连接方面有限制,等等。
我现在试图找出如何避免这些负载均衡器并公开我的kubernetes集群的方法,但要以一种高效,安全和可管理的方式进行。我浏览了文档,似乎提到了NodePort
和Ingress
之类的东西。据我了解,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
答案 0 :(得分:2)
要解决此问题,可以采用以下几种方法:
hostNetwork:true
与nginx-ingress Pods配合使用,以便可以通过计算机网络直接访问这些计算机。有关更多信息和设置细节,请访问Nginx入口的官方文档:https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#over-a-nodeport-service
我已经尝试了所有这些选项来部署应用程序,我的建议是,如果您正在使用某些云服务来部署集群,请使用云服务提供商的负载均衡器,因为它更加安全,高度可用且可靠。 。我在内部部署中使用用户定义的边缘创建或MetalLB服务
答案 1 :(得分:0)
您可以使用hostNetwork: true
在选定的专用kubernetes节点中部署nginx入口控制器。这意味着nginx将侦听主机VM网络上的端口80
和443
。为虚拟机分配浮动的公共IP。将虚拟机的公共IP作为A record
添加到DNS提供商配置中,以将您的域的流量路由到虚拟机。
然后为所有后端Pod只需创建clusterIP服务和入口资源即可将其公开给外界。
要使其具有高可用性,您可以将同一设置复制到多个kubernetes节点上。