有什么方法可以访问类型为NodePort而不是LoadBalancer的服务?

时间:2020-10-30 03:28:44

标签: kubernetes

我有一个简单的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

2 个答案:

答案 0 :(得分:1)

两个选项:

  1. 您可以在kubernetes之外尝试haproxy。 video解释了与您类似的要求。
  2. 设置“ --service-node-port-range”。检查此blog

答案 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,作者将hostNetworkhostPortsnodePort进行比较。