【问题标题】:How Can I Connect to Kubernetes Pod Network?如何连接到 Kubernetes Pod 网络?
【发布时间】:2020-03-16 07:25:32
【问题描述】:

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

【问题讨论】:

  • 您是否使用服务公开了您的 pod?
  • 不。我知道我可以公开我的 pod。但我想连接 pod 网络以进行实验。
  • 您想要的情况可以通过 Calico + 动态路由守护程序(如 OSPF 或 BGP)来动态地(分别针对每个节点)宣布到 Pod 网络 CIDR 的路由来解决,但这太复杂了。你可以从这里开始cloudnativelabs.github.io/post/2017-05-22-kube-pod-networking

标签: docker kubernetes vpn sdn


【解决方案1】:

在 Kuberentes 中,Pod 网络应确保其他 Pod 可以相互通信。基本上就是这样。它的设计目的不是允许开箱即用地处理传入的请求。如您所见,Pod 的 IP 范围 10.244.0.0/16 是私有的,即不能通过 Internet 路由。

如前所述,正确的方法是使用服务公开您的 pod。当您在裸机集群上时,NodePort 类型可能是一种快速的方法 (假设您通过vpn 与您的集群有kubectl 连接):

kubectl expose po <your-pod-name> --port=<port> --type=NodePort --name=MyService

另一种选择可能是运行类似 busybox 的 pod 和内置的 wget 工具来访问集群内的 Pod 间网络。

kubectl run -i --tty busybox --image=busybox --restart=Never -- sh
# wget <your-pod-ip>

当然,生产级集群的首选方式应该是像 Ingress 一样指向由适当 Ingress Controller 支持的 Service-backed Pod。同样,当您使用裸机并且没有像大多数云中那样开箱即用的 LoadBalancer 服务时,您的 Ingress Controller 也可以完成负载平衡工作。

【讨论】:

  • 感谢您的回答。我知道​​我应该使用服务、入口等。但我想连接 pod 网络以进行测试和实验。所以我不想访问我的服务,我只想连接 pod网络。
【解决方案2】:

我想通过 vpn 访问 pod 网络(我使用 calico-canal)并能够直接与我的 pod 通信(例如从浏览器)。

如果您不公开pod,这是不可能的。您需要一个service 来公开pod,稍后您可以在ingress 中使用该服务器,这样您就可以从浏览器连接。

如何在 pod 网络中连接并直接从 vpn 客户端访问我的服务?

我会设置一个pod 并通过service 公开它。稍后我会使用这个服务作为访问其他 pod 的网关。

我建议您阅读 Cluster Networking 的文档,它解释了模型的工作原理,并简要介绍了 CNI 的数量。也许你会发现一些更有帮助的东西。

【讨论】:

  • 出于实验目的,我想连接 pod 网络。我创建了一个 vpn pod。我可以连接该 pod,但无法 ping 其他 pod。
  • 正如@Crou 所提到的,它不是这样工作的。要访问您的 pod,您必须通过 service 和之后的 ingress 公开它。
猜你喜欢
  • 2022-01-11
  • 2020-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-18
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
相关资源
最近更新 更多