[英]Accessing kubernetes pod directly from a machine in the same network
我在同一網絡上有4台服務器;
我按照https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/中的說明設置了kubernetes集群,並使用Calico作為網絡提供商。
我可以通過以下命令成功運行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的Service機制,但是在Pod和實際服務器之間進行訪問時,我需要這種透明性。
在Pod和實際服務器之間進行訪問時,我需要這種透明性。
然后,您想要的要么是您所說的但由於某種原因而被拒絕的Service
,其type: NodePort
-或type: LoadBalancer
如果您的設置允許)-將在所有與其selector:
匹配的type: NodePort
循環移動。 ..
或kubectl exec -it $the_pod_name -- bash -il
在Pod上執行命令(即:如果您的目標只是“連接”到Pod在其上運行命令,而不是“網絡連接”)。 。
或kubectl port-forward $the_pod_name ${local_port_number}:${pod_port_number}
將允許您有效地在直接連接到Pod的k8s網絡中鑽一個洞,但要注意的是,連接僅在kubectl
運行時有效(並且當然是Pod的壽命)
只是極端的清晰度,軟件定義的網絡,如印花布是傳統上用於通信的集群內 ,並且最好是認為任何IP地址為“假”的人的。 因此,我從不希望僅更新任何內容上的路由表就可以將“實際”網絡堆棧連接到Calico的“虛構”網絡堆棧。 用一小撮鹽來回答這個問題,因為我從未專門使用過Calico,但毫無疑問,法蘭絨的表現方式就是這樣。
您可以嘗試在ubuntu服務器上運行kube-proxy
組件,它將創建訪問k8s服務和pod所需的iptables規則
借助Calico,您可以使用BGP與網絡結構(甚至只有一台主機)對等地建立集群,然后將路由分發到您的Pod,從而允許從外部主機直接訪問Pod。 以下是一些文檔鏈接,可以幫助您https://docs.projectcalico.org/v2.5/usage/external-connectivity#inbound-connectivity和https://docs.projectcalico.org/v2.5/用法/配置/ bgp
一種在主機上實現此目標的方法(可能很簡單)是在配置了主機的主機上運行calico / node,以便calico / node可以訪問您的Calico數據存儲區並有效地成為“ Calico集群”的一部分,但不成為Kuberentes集群的一部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.