我在EC2实例中运行了一个应用。它在网络上启动多个容器:
docker run --name purple \
--net=treeOfPlums \
--net-alias=purple \
-d treeofplums/purple
docker run --name shiny \
--net=treeOfPlums \
--net-alias=shiny \
-d treeofplums/shiny
在这种情况下,容器purple
和shiny
可以进行通信,因为它们分别位于treeOfPlums
上,别名为purple
和shiny
。
我想在K8上部署此应用。我正在使用minikube进行开发。我不想在这里使用docker-in-docker,我的主应用程序是一个容器,它会使其余部分旋转。相反,我想让他们成为所有兄弟姐妹。
我的问题是,如何在K8s广告连播中指定该网络上的网络名称和容器别名?
在部署yaml中使用关键字network
和network-alias
将无效。据我所知,无论如何,单个pod中的容器都在一个网络上,因此设置别名也足够了。我想的是:
spec:
containers:
- name: purple
image: purple
network: treeOfPlums
net-alias: purple
...
答案 0 :(得分:3)
pod的要点是容器可以像在localhost上那样说话。您不需要在容器中的容器之间进行任何其他网络调整。
来自文档:
pod中的应用程序都使用相同的网络命名空间(相同的IP) 和端口空间),因此可以“找到”彼此并使用 本地主机。因此,pod中的应用程序必须协调 他们使用的端口。每个pod都有一个共享的IP地址 与其他物理层充分沟通的网络空间 网络上的计算机和pod。
主机名设置为应用程序容器的pod名称 在pod内。
除了定义应用程序容器之外 在pod中运行,pod指定一组共享存储卷。 卷使数据能够在容器重启和分享后继续存在 在pod中的应用程序之中。
http://kubernetes.io/docs/user-guide/pods/#motivation-for-pods