![](/img/trans.png)
[英]Alternative solution for host port networking that allows running multiple pods in Kubernetes
[英]No outbound networking on Kubernetes pods
我正在 VM 中運行單節點 Kubernetes 集群以進行開發和測試。 我使用 Rancher Kubernetes Engine(RKE,Kubernetes 版本 1.18)來部署它,並使用 MetalLB 來啟用 LoadBalancer 服務類型。 Traefik 是 2.2 版本,通過官方 Helm chart ( https://github.com/containous/traefik-helm-chart ) 部署。 我部署了一些虛擬容器來測試設置 ( https://hub.docker.com/r/errm/cheese )。
我可以通過節點 IP 很好地訪問 Traefik 儀表板(-> MetalLB 似乎可以工作)。 它為測試容器注冊服務和路由。 一切看起來都很好,但是當我嘗試在瀏覽器中訪問測試容器時,出現 502 Bad Gateway 錯誤。
一些探測表明,來自 Pod 的出站流量似乎存在問題。 當我通過 SSH 連接到節點時,我可以通過它們的服務或 pod IP 訪問所有 pod。 從節點到 pod 的 DNS 也能正常工作。 但是,如果我啟動交互式busybox pod,則無法從那里訪問任何其他pod 或主機。 當我wget
到任何其他容器(都在默認命名空間中)時,我只會得到wget: can't connect to remote host (10.42.0.7): No route to host.
互聯網上的服務器也是如此。
我沒有安裝任何網絡策略,我知道默認情況下沒有安裝任何網絡策略。
我也經歷過這個: https : //kubernetes.io/docs/tasks/debug-application-cluster/debug-service
指南中的所有內容都運行良好,只是 pod 似乎沒有任何網絡連接。
我的 RKE 配置是標准配置,只是我關閉了標准的 Nginx 入口並啟用了 etcd 靜態加密。
有任何想法嗎?
也許只需仔細檢查您節點的 ip 轉發是否已打開: sysctl net.ipv4.ip_forward
如果由於某種原因它沒有返回: net.ipv4.ip_forward = 1
然后你可以設置它: sudo sysctl -w net.ipv4.ip_forward=1
並使其永久化:
/etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p /etc/sysctl.conf
重新加載好吧,所以我是愚蠢的(或者更確切地說:菜鳥)。 我在主機上有一個舊的 iptables 規則,它會丟棄 FORWARD 鏈上的所有流量……刪除該規則可以解決問題。
只是移除這個角色我感到有點不安,但我必須承認我並不完全理解這對安全的影響。 這可能需要一些進一步的研究,但這是另一個話題。 而且由於我目前不打算在生產中運行此集群,而是使用托管集群,因此無論如何這都不是問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.