我正在学习Kubernetes,同时我想将它用于个人(但公共)项目。作为个人项目,我的预算不是很大,所以我有以下配置:
- 1主节点VPS,公有IP 45.77.114.72,私有IP 10.39.96.5。
- 1个工作节点VPS,公网IP 149.28.111.67,私有IP 10.39.96.4。
- 1个工作节点VPS,公有IP 45.77.113.193,私有IP 10.39.96.3。
我使用k3s作为Kubernetes发行版,这意味着我有traefik入口控制器,而不是nginx。经过一些测试后,我能够设置应用程序并使用入口资源从我的域名访问它们,所以没有问题。然而,我看到我的服务,以及流量负载均衡器,表明所有的公共ip正在被使用。这是不希望的,因为我更希望不要暴露每个节点。
我尝试添加一个防火墙(来自服务提供商)来限制对这些节点的访问,只有来自子网的数据包(这样我仍然可以从主节点SSH到它们)。这是有效的,但入口仍然显示所有的ip,我认为这实际上可能会导致问题,如果它认为所有的都是公共可访问的。
我还尝试了在主节点上设置NAT并禁用工作节点上的公共ip,因此所有流量都通过主节点。这可以从入口删除工作节点的公共IP,但现在显示的是它们的私有IP(甚至不是网关)。
2robin@pop-os:~$ k get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
test-nginx <none> test.lycraft.net 10.39.96.3,10.39.96.4,45.77.114.72 80, 443 11m
我不知道该做什么。
在Ingress状态中列出的地址与您的Ingress控制器以及如何到达它们/它们在哪里运行有关。这不是Traefik特有的:我们会在Nginx或其他实现中看到同样的情况。
你有3个地址的原因是你有3个Traefik的副本。
如果我们只希望一个节点作为我们集群的入口:在部署/复制集的情况下,我们将降低副本的数量并设置nodeSelector。或者在这里,使用守护进程,只需设置一个nodeSelector,强制Traefik在指定的入口节点上启动。