簡體   English   中英

Kubernetes pod 上沒有出站網絡

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM