如何连接到Kubernetes Pod网络?

时间:2019-11-20 14:29:34

标签: docker kubernetes vpn sdn

我有一个裸机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模式,因为它在连接客户端时使用动态端口。

2 个答案:

答案 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的数量。也许您会发现更有用的东西。