1

我在同一个网络上有 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 作为网络提供商,按照https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/中的说明设置了一个 kubernetes 集群。

我可以通过以下命令成功运行一个 pod(我以带有 ssh 访问的 Ubuntu docker 映像为例)

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

kubectl get并且可以使用and看到这个 pod 的 IP 地址kubectl describe(在这种情况下,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)
  • 吊舱 (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 的 Service 机制,但是我需要这种在 pod 和实际服务器之间访问的透明性。

4

3 回答 3

0

在 pod 和实际服务器之间进行访问时,我需要这种透明度。

然后,您想要的是,正如您所说但由于某种原因被解雇, aService带有 a type: NodePort- 或者type: LoadBalancer如果您的设置允许 - 它将在所有与其匹配的 Pod 中循环selector:...

或者kubectl exec -it $the_pod_name -- bash -il在 Pod 上执行命令(即:如果您的目标只是“连接”到 Pod 以在其上运行命令,而不是“网络连接”)......

或者kubectl port-forward $the_pod_name ${local_port_number}:${pod_port_number}将允许您有效地在 k8s 网络中直接向 Pod 钻一个洞,但需要注意的是,连接仅在kubectl运行时才有效(当然,还有 Pod 的生命周期)

为了非常清楚,像 Calico 这样的软件定义网络传统上用于集群的流量,最好将任何 IP 地址视为“假”地址。因此,我永远不会期望仅在任何东西上更新路由表就可以让您将“真实”网络堆栈连接到 Calico 中的“虚构”堆栈。用一小粒盐来回答这个问题,因为我从来没有专门使用过印花布,但毫无疑问,法兰绒就是以这种方式表现的。

于 2017-09-07T07:04:49.833 回答
0

使用 Calico,您可以使用 BGP 将您的集群与您的网络结构(甚至是一个主机)对等,然后将路由分发到您的 pod,从而允许从外部主机直接访问 pod。以下是一些可以帮助解决此问题的文档链接https://docs.projectcalico.org/v2.5/usage/external-connectivity#inbound-connectivityhttps://docs.projectcalico.org/v2.5/用法/配置/bgp

在主机上实现此目的的一种(可能很简单)方法是在主机上运行 calico/node 并对其进行配置,以便 calico/node 可以访问您的 Calico 数据存储并有效地成为“Calico 集群”的一部分,但不是 Kuberentes 集群的一部分.

于 2017-09-07T13:49:54.270 回答
0

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

于 2017-09-07T12:22:50.323 回答