我有一个简单的kubernetes设置:1个pod,1个带有LoadBalancer的服务,一切正常。但是当我只有1个吊舱时,我不想为负载均衡器支付额外的费用。
我试图切换到NodePort,但是无法在正确的端口上访问服务(因为它们已重新映射到30000+个端口)。我有一个我想在端口443上访问的服务,但是我不能,所以在这种情况下我该怎么办?
我的服务将是https://server.aaa.com
,但是如果端口重新映射为30000,我需要使用https://server.aaa.com:30000
吗?有什么办法可以在端口443上使用?
https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
答案 0 :(得分:1)
答案 1 :(得分:0)
如果您希望避免为负载均衡器买单,我建议您看看Metallb。
MetalLB连接到您的Kubernetes集群并提供网络 负载均衡器的实现。简而言之,它允许您创建 无法运行的集群中类型为“ LoadBalancer”的Kubernetes服务 在云提供商上,因此不能简单地将付费产品与 提供负载均衡器。
与使用nodePort
相比,这将是更好的解决方案,因为它在生产用途方面存在很大的缺点。不建议更改nodePort
范围,因为它可能会与其他端口(You may find here more information why) 发生冲突。但是,如果要执行此操作,则没有任何阻碍。
仍然值得一提的是,没有什么可以替代云原生LB。可能的替代品存在问题,这使得它们使用起来较不方便且安全性较低。
最后,您可能要检查Kubernestes host namespaces:
HostNetwork -控制容器是否可以使用节点网络名称空间。这样可以使Pod可以访问环回设备, 服务监听本地主机,可以用来监听 同一节点上其他Pod的网络活动。
HostPorts -提供主机网络名称空间中允许端口范围的列表。定义为HostPortRange
的列表,带有
min
(包括)和max
(包括)。默认为无主机
端口。
但是HostPort
有几个缺点,因为它限制了pod的调度选项,因为只能使用所选端口具有空缺的主机。如果您的Pod运行所在的主机无法访问,则K8会将其重新安排到其他节点。因此,如果更改工作负载的IP地址,则应用程序的客户端将失去对Pod的访问权限(如果重新启动Pod,也会发生同样的事情)。
您可能想阅读this document,作者将hostNetwork
,hostPorts
和nodePort
进行比较。