Kubernetes 臨時容器:增強安全性並簡化生產集群中的故障排除

在 Kubernetes 中,短暫容器是一個強大的功能,允許操作者通過在同一個 Pod 內創建短暫容器來調試和疑難解答運行中的 Pods。這對於無法在獨立環境中複製的問題特別有幫助。通過使用短暫容器,您可以將容器附加到運行中的 Pod,檢查文件系統、網絡設置或運行中的進程,然後丟棄該容器而不影響 Pod 的主要容器。

什麼是短暫容器?

短暫容器是一種特殊的容器,不作為應用程序工作負載的一部分運行,而是添加到現有 Pod 中進行調試的目的。它們與 Pod 中的其他容器共享相同的資源(網絡命名空間、卷等),使其成為實時診斷的理想選擇。一旦調試完成,短暫容器可以被移除,而不需要重新創建整個 Pod。

關鍵點

  • 短暫:短暫容器僅用於調試或疑難排解。
  • 非干擾:它們不會影響 Pod 中現有的應用程序容器。
  • 資源共享:它們與 Pod 共享存儲卷和網絡命名空間等資源,使調試更加強大。

短暫容器的安全考慮

短暫容器透過限制對生產 Pod 的長期訪問,提供了一種更安全的除錯方法。您可以強制執行嚴格的 RBAC 規則,僅允許授權用戶添加和運行短暫容器,從而最小化潛在威脅的窗口。由於這些容器在除錯完成後會消失,因此攻擊面減少,增強了整體集群安全性。

使用案例

  • 故障排除應用崩潰:當您需要檢查日誌或在崩潰或即將崩潰的容器中運行除錯工具時,短暫容器允許您在不改變主容器配置的情況下進入運行環境。
  • 網絡除錯:您可以在短暫容器中安裝除錯工具(例如,tcpdump、netstat)來診斷 Pod 的網絡命名空間中的網絡問題。
  • 實時文件系統檢查:如果您懷疑文件損壞或文件路徑不正確,短暫容器允許您實時檢查文件系統。

先決條件

  • Kubernetes 版本:短暫容器需要至少 Kubernetes 1.23+,其中短暫容器功能已普遍可用(GA)。在較舊的 Kubernetes 版本中,您可能需要啟用功能閘道短暫容器。
  • kubectl:確保您的本地 kubectl 客戶端至少與您集群的控制平面版本相同或更新。
  • 足夠的 RBAC 權限:您需要有權使用 kubectl debug 命令並更新 Pods(臨時容器是通過更新 Pod 的規範來添加的)。

逐步指南:使用臨時容器

以下是一個通用過程,適用於任何 Kubernetes 環境,包括 EKS(AWS 上的彈性 Kubernetes 服務)、AKS(Azure Kubernetes 服務)、GKE(Google Kubernetes 引擎)或本地集群。我們將重點介紹 kubectl debug 命令,這是添加臨時容器的主要機制。

驗證您的集群配置

Shell

 

  • 確保您的 伺服器版本 至少為 1.23。
  • 確認您的 客戶端版本 也相容。

如果您在像 EKS 或 AKS 這樣的管理環境中,請從雲提供商的儀表板或 CLI 檢查集群版本,以確保它是 1.23 或更高。

識別您想要調試的 Pod

列出特定命名空間中的 Pods:

Shell

 

選擇您需要故障排除的 Pod 名稱,例如:my-app-pod-abc123。

使用 kubectl debug 添加臨時容器

使用 kubectl debug 命令添加一個臨時容器。例如,我們將使用一個簡單的 Ubuntu 映像:

Shell

 

以下是標誌的詳細說明:

  • my-app-pod-abc123:現有 Pod 的名稱。
  • –image=ubuntu: 用於暫時性容器的 Docker 映像。
  • –target=my-container:(選擇性)指定要針對命名空間共享的 Pod 中的容器。通常,這是 Pod 中的主要容器。
  • –interactive=true 和 –tty=true: 允許您在暫時性容器內部獲取 shell 會話。

運行上述命令後,您將在現有 Pod 內的暫時性容器中獲得 shell 提示符。現在,您可以運行像 ls、ps、netstat 之類的調試命令,或安裝額外的套件。

確認暫時性容器創建

在另一個終端中,或在退出暫時性容器的 shell 後運行:

Shell

 

您應該看到描述暫時性容器的 spec 或 status 下的新部分。

調試和故障排除

在暫時性容器內部,您可以:

  • 檢查 日誌應用配置
  • 使用像 curl、wget、telnet 之類的調試工具來驗證網絡連通性。
  • 檢查 環境變量 來確認應用程序的配置。
Shell

 

清理暫時性容器

短暫容器在 Pod 被銷毀或您手動移除後會自動被移除。要在不銷毀整個 Pod 的情況下移除 Pod 中的短暫容器(在支持的版本中),您可以修補 Pod 規範。然而,通常短暫容器並不適合長期使用。一旦您刪除 Pod 或縮減您的部署,短暫容器也會被移除。

管理服務的特定注意事項

亞馬遜 EKS

  • 確保您的 EKS 叢集運行 Kubernetes 1.23 或更高版本
  • 確認 IAM 權限允許您執行 kubectl debug。
  • 如果您使用較舊的 EKS 版本(1.22 或更早),您需要啟用短暫容器功能閘。

微軟 Azure AKS

  • 如果需要,使用 Azure CLI (az aks update) 將您的 AKS 叢集升級到兼容版本。

確認您的 kubectl 上下文設置為 AKS 叢集:

Shell

 

其他管理或本地叢集

  • 檢查您的叢集文檔或詢問您的提供商確認是否啟用了短暫容器。
  • 大多數現代本地解決方案(OpenShift、Rancher 等)從 Kubernetes 1.23 開始預設啟用短暫容器,但如果您在較舊版本上,可能需要手動啟用功能閘。

最佳實踐

  • 使用最小化映像:選擇輕量級映像以減少開銷(例如,busybox、distroless 調試映像)。
  • 限制RBAC:限制誰可以創建臨時容器,以減少潛在的安全風險。
  • 記錄所有調試會話:跟蹤臨時容器的使用情況,以進行審計和合規性。
  • 不要依賴臨時容器:它們僅用於調試。如果您需要永久的側車或輔助容器,請從一開始在Pod規範中配置它。

結論

臨時容器是一種多功能且強大的方式,可以在實時調試問題時不影響主要應用容器。無論您在EKS、AKS、本地部署還是其他托管解決方案上運行Kubernetes,了解並使用臨時容器可以顯著減少您的故障恢復時間(MTTR)並提高運營效率。它們輔助傳統的故障排除方法,應該成為任何平台團隊診斷複雜應用問題的工具包的一部分。通過遵循上述步驟,您可以自信地在您的環境中部署臨時容器並簡化調試流程。

作者備註:本指南源自實際的Kubernetes故障排除,旨在幫助您在生產環境中迅速且無干擾地調試Pods。

Source:
https://dzone.com/articles/enhancing-security-troubleshooting-in-production-clusters