直接从同一networking中的机器访问kubernetes窗格

我在同一个networking上有4台服务器。

  • 10.0.0.10:Kubernetes大师
  • 10.0.0.11:Kubernetes节点1
  • 10.0.0.12:Kubernetes节点2
  • 10.0.0.20:正常的Ubuntu服务器(kubernetes没有安装)

我使用Calico作为networking提供者,按照https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/中的说明设置了一个kubernetes集群。

我可以通过以下命令成功运行一个窗口(我使用的是以ssh访问的Ubuntu docker镜像为例)

kubectl run ubuntupod --image=rastasheep/ubuntu-sshd:16.04 

并可以使用kubectl getkubectl describe来看到这个pod的IP地址(在这种情况下,pod的IP是192.168.65.74)。

然后我确认以下连接已启用

  • kubernetes master / nodes(10.0.0.10〜10.0.0.12) – > pod(192.168.65.74)
  • pod(192.168.65.74) – > kubernetes master / nodes(10.0.0.10〜10.0.0.12)
  • pod(192.168.65.74) – >正常的ubuntu服务器(10.0.0.20)

但是,我没有做出如下的联系,我想问问人们该怎么做;

  • 正常的ubuntu服务器(10.0.0.20) – > pod(192.168.65.74)

我试图添加一个路由表到Ubuntu服务器(10.0.0.20),希望kubernetes主节点可以作为一个路由器,但没有成功;

 sudo route add -net 192.168.0.0 netmask 255.255.0.0 gw 10.0.0.10 

我怀疑在Kubernetes的master里有一些iptables的事情,但我不知道该怎么做。

有人能帮助我吗?

顺便说一句,我明白,我想要做的可能会偏离kubernetes或docker的基本原则。 也许我应该使用kubernetes的服务机制,但是我需要这种透明的方式访问Pod和实际的服务器。

我需要在访问Pod和实际服务器之间的这种透明度。

然后,你想要的是,如你所说,但由于某种原因解雇了一个type: NodePortService ,或者如果你的设置允许的话, type: LoadBalancer ,这将在所有与其selector:匹配的type: NodePort循环。 ..

或者kubectl exec -it $the_pod_name -- bash -il在Pod上执行一个命令(也就是说,如果你的目标只是“连接”到Pod来运行命令,而不是“network connect”)。 。

或者kubectl port-forward $the_pod_name ${local_port_number}:${pod_port_number}将允许你有效地在k8snetworking中直接钻出一个洞,只要kubectl正在运行当然,Pod的使用寿命)

为了清晰起见,像Calico这样的软件定义的networking传统上用于集群的stream量,最好将任何IP地址视为“假”的。 因此,我永远不会期望只更新路由表上的任何东西都可以让你将“真正的”networking堆栈连接到Calico中的“虚拟”networking堆栈。 用一小粒盐做这个答案,因为我从来没有使用印花布,但毫无疑问,法兰绒的行为是这样的。

你可以尝试在ubuntu服务器上运行kube-proxy组件,它将创build访问k8s服务和pod所需的iptables规则

使用Calico,您可以使用BGP将您的集群与您的networking结构(甚至只有一台主机)进行对等,然后将该路由分发到您的Pod,以允许从外部主机直接访问Pod。 这里有一些文档链接,可以帮助这个https://docs.projectcalico.org/v2.5/usage/external-connectivity#inbound-connectivity和https://docs.projectcalico.org/v2.5/使用/configuration/ BGP

在主机上实现此目的的一种(可能是简单的)方式是在主机上运行calico / node,使得calico / node能够到达Calico数据存储,并且有效地成为“Calico集群”的一部分,但不是Kuberentes集群的一部分。

Interesting Posts