如何从Pod访问本地计算机

时间:2019-02-18 11:41:29

标签: docker kubernetes

我在本地计算机上创建了一个pod。我在本地计算机上也有一个脚本文件。我想从容器中运行该脚本文件(我将在容器中并运行本地主机上存在的脚本)。

该脚本将更新另一个窗格的/etc/hosts。有没有一种方法可以从另一个吊舱更新一个吊舱的/etc/hosts?这些Pod是从两个不同的部署中创建的。

2 个答案:

答案 0 :(得分:2)

  

我想从容器中运行该脚本文件(我将在容器中并运行本地主机上存在的脚本)。

您不能那样做。在普通的Docker上下文中,Docker的主要优势之一是文件系统隔离,因此,除非将容器的一部分明确地发布到容器中,否则容器根本看不到主机的文件系统。在Kubernetes中,不仅存在此限制,而且您对运行在哪个节点上的控制也受到限制,并且如果一个节点具有给定脚本而另一个节点没有给定脚本,则可能会出现问题。

  

有没有一种方法可以从另一个吊舱更新一个吊舱的/etc/hosts

通常,您应避免将/etc/hosts用于任何内容。设置DNS服务可以使事情保持一致,并避免在多个地方手动编辑文件。

Kubernetes为您提供DNS服务。特别是,如果您define a Service,则the name of that Service will be visible as a DNS name(在群集内);一个吊舱可以通过first-service-name.default.svc.cluster.local到达另一个吊舱。这可能就是您真正要寻找的答案。

(如果您确实只有一个单节点环境,那么Kubernetes会增加很多复杂性并且没有太大好处;请考虑使用普通的Docker和Docker Compose。)

答案 1 :(得分:0)

除了David的答案外,您还可以使用cp将脚本从主机复制到Pod:

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

在评论中关于您的问题。您可以通过公开部署来做到这一点:

kubectl expose deployment/name

这将导致创建服务,您可以在此section中找到更多实用的示例和方法。 因此,在特定Pod终止后,您仍然可以通过相同的端口和服务到达新Pod。您可以找到更多详细信息here

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

  

此规范将创建一个针对TCP端口80的服务   运行以下命令的任何Pod:my-nginx标签,并将其公开显示   服务端口(targetPort:是容器接受流量的端口   on,port:是抽象的Service端口,可以是其他任何端口   吊舱用于访问服务)。查看服务API对象以查看   服务定义中支持的字段列表

除此之外,David似乎在这里提供了很好的解释,这将发现有关FQDN和DNS的更多信息-它也与服务连接。