我有一个裸机kubernetes集群,我想通过vpn连接到pod网络(我使用calico-canal),并能够直接与我的pod通信(例如从浏览器)。 我正在尝试使用Pritunl VPN。 我可以将VPN与客户端连接,但无法访问群集中的任何内容。(自己的IP除外) 我尝试将这些cdr发送给客户端,但结果是相同的:
10.244.0.0/16
10.244.0.0/24
10.245.0.0/16
10.244.1.0/24
注意:我的内部Pod网络cidr是:10.244.0.0/16,而我的节点(主机)cidr是192.168.8.0/24
如何连接Pod网络内部并直接从vpn客户端访问我的服务?
注2:我使用vpn hostNetwork:true模式,因为它在连接客户端时使用动态端口。
答案 0 :(得分:0)
在Kuberentes中,Pod联网应确保其他Pod可以相互通信。基本上就是这样。它的设计不允许开箱即用地处理传入的请求。您可能会看到Pod的IP范围10.244.0.0/16
是私有的,即无法通过Internet路由。
如上所述,正确的方法是使用“服务”公开您的广告连播。在裸机集群上时,NodePort类型可能是一种快速的方法
(假设您通过kubectl
与集群有vpn
连接)
kubectl expose po <your-pod-name> --port=<port> --type=NodePort --name=MyService
另一种选择是使用内置的busybox
工具运行类似wget
的pod来访问集群中的pod间网络。
kubectl run -i --tty busybox --image=busybox --restart=Never -- sh
# wget <your-pod-ip>
当然,生产级集群的首选方法应该是类似Ingress的东西,该东西指向由适当的Ingress Controller支持的服务支持的Pod。同样,当您使用裸机并且没有像大多数云一样开箱即用的LoadBalancer服务时,您的Ingress Controller也可以完成负载平衡工作。
答案 1 :(得分:0)
我想通过vpn到达Pod网络(我使用calico-canal),并能够直接与我的Pod通信(例如,通过浏览器)。
如果您不公开pod
,则不可能这样做。您需要一个service
来公开pod
,以后可以在ingress
中使用这些服务器,以便能够从浏览器连接到该服务器。
如何连接Pod网络内部并直接从vpn客户端访问我的服务?
我将设置一个pod
并通过service
对其进行公开。稍后,我将使用此服务作为访问其他Pod的网关。
我建议您翻阅Cluster Networking的文档,它解释了该模型的工作原理,并简要介绍了CNI的数量。也许您会发现更有用的东西。