簡體   English   中英

如何從Pod訪問本地計算機

[英]How to access local machine from a pod

我在本地計算機上創建了一個pod。 我在本地計算機上也有一個腳本文件。 我想從容器中運行該腳本文件(我將在容器中並運行本地主機上存在的腳本)。

該腳本將更新另一個Pod的/etc/hosts 有沒有一種方法可以從另一個Pod更新一個Pod的/etc/hosts 吊艙是從兩個不同的部署中創建的。

我想從容器中運行該腳本文件(我將在容器中並運行本地主機上存在的腳本)。

你不能那樣做。 在普通的Docker上下文中,Docker的主要優勢之一是文件系統隔離,因此,除非將容器的一部分明確地發布到容器中,否則容器根本看不到主機的文件系統。 在Kubernetes中,不僅存在此限制,而且您對運行在哪個節點上的控制也受到限制,並且如果一個節點具有給定腳本而另一個節點沒有給定腳本,則可能會出現問題。

有沒有一種方法可以從另一個Pod更新一個Pod的/etc/hosts

通常,應避免將/etc/hosts用於任何內容。 設置DNS服務可以使事情保持一致,並避免在多個地方手動編輯文件。

Kubernetes為您提供DNS服務。 特別是,如果定義Service ,則 服務 的名稱將顯示為DNS名稱 (在群集內); 一個pod可以通過first-service-name.default.svc.cluster.local到達另一個。 這可能就是您真正要尋找的答案。

(如果您確實只有一個單節點環境,那么Kubernetes會增加很多復雜性並且沒有太大好處;請考慮使用普通的Docker和Docker Compose。)

除了David的答案外,您還可以使用cp將腳本從主機復制到Pod:

kubectl cp [file-path] [pod-name]:/[path]

關於您在評論中的問題。 您可以通過公開部署來做到這一點:

kubectl expose deployment/name

這將導致創建服務,您可以在本節中找到更多實用的示例和方法。 因此,在特定Pod終止后,您仍然可以通過相同的端口和服務到達新Pod。 您可以在此處找到更多詳細信息。

在文檔的示例中,您可以看到已使用容器端口80創建了nginx Pod,暴露命令將具有以下效果:

該規范將創建一個服務,該服務的目標是運行:my-nginx標簽的任何Pod上的TCP端口80,並將其公開在抽象的服務端口上(targetPort:是容器接受流量的端口,port:是抽象的服務端口,可以是其他Pod用於訪問服務的任何端口)。 查看服務API對象以查看服務定義中支持的字段的列表

除此之外,David似乎在這里提供了很好的解釋,這將發現有關FQDN和DNS的更多信息-它們也與服務連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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