我在同一个网络上有4台服务器;
我按照https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/中的说明使用Calico作为网络提供商设置了kubernetes群集。
我可以通过以下命令成功运行一个pod(我使用带有ssh访问权限的Ubuntu docker镜像作为示例)
kubectl run ubuntupod --image=rastasheep/ubuntu-sshd:16.04
并且可以使用kubectl get
和kubectl describe
查看此广告连播的IP地址(在这种情况下,广告连接的IP为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大师中与iptables有关,但我不知道该怎么做。
有人可以帮我解决这个问题。
顺便说一句,我明白我想做的事可能与kubernetes或docker的基本原理不同。也许我应该使用kubernetes的服务机制,但是在pod和实际服务器之间访问时我需要这种透明性。答案 0 :(得分:0)
在pod和实际服务器之间访问时,我需要这种透明性。
然后您想要的是,正如您所说,但由于某种原因被解雇,如果您的设置允许,则Service
带有type: NodePort
- 或type: LoadBalancer
在与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中的“虚构”网络堆栈。用一小块盐来回答这个问题,因为我从来没有特别使用过Calico,但毫无疑问法兰绒就是这样做的。
答案 1 :(得分:0)
您可以尝试在ubuntu服务器上运行k8s的kube-proxy
组件,它将为访问k8s服务和pod创建所需的iptables规则
答案 2 :(得分:0)
使用Calico,您可以使用BGP将您的群集与网络结构(甚至只是一个主机)对等,然后将路由分发到您的Pod,允许从外部主机直接访问Pod。 以下是一些可以帮助https://docs.projectcalico.org/v2.5/usage/external-connectivity#inbound-connectivity和https://docs.projectcalico.org/v2.5/usage/configuration/bgp
的文档链接在主机上实现此目的的一种(可能是简单的)方法是在主机上运行calico / node并配置它,使得calico / node可以到达Calico数据存储区并有效地成为“Calico群集”的一部分但不属于Kuberentes集群。