2016-12-27 28 views
0

我有一个应用程序在EC2实例中运行。它从多个容器在网络上:在单个K8s容器中部署容器网络

docker run --name purple \ 
    --net=treeOfPlums \ 
    --net-alias=purple \ 
    -d treeofplums/purple 

docker run --name shiny \ 
    --net=treeOfPlums \ 
    --net-alias=shiny \ 
    -d treeofplums/shiny 

在这种情况下,容器purpleshiny可以进行通信,因为它们分别都在treeOfPlums用别名purpleshiny

我想部署在K8S这个程序。我正在使用minikube进行开发。我不想在这里使用docker-in-docker,在那里我的主应用程序是一个容器,它让剩下的东西旋转起来。相反,我想让他们成为所有的兄弟姐妹。

我的问题是,我该如何指定网络名称和容器别名,在K8S荚网络上?

在部署yaml中使用关键字networknetwork-alias将不起作用。据我了解,无论如何,单个容器中的容器都在一个网络上,因此设置别名也是足够的。我正在考虑类似于:

spec: 
     containers: 
     - name: purple 
      image: purple 
      network: treeOfPlums 
      net-alias: purple 
    ... 

回答

2

pod的要点是,容器可以像在本地主机上一样说话。您不需要在容器中的容器之间进行任何额外的网络调整。

从文档:

在吊舱中的应用都使用相同的网络名称空间(相同的IP 和端口的空间),并且因此可以“查找”彼此和使用本地主机 通信。因此,一个pod中的应用程序必须协调其端口的使用 。每个吊舱都有一个IP地址,位于平面共享网络空间 中,与整个网络中的其他物理电脑和吊舱完全通信。

的主机名设置为吊舱的名称吊舱内的应用程序容器 。

除了限定在​​ 吊舱运行该应用程序的容器中,容器指定一组共享存储卷。 卷允许数据在容器重新启动后存活,并在该容器内的应用程序中共享 。

http://kubernetes.io/docs/user-guide/pods/#motivation-for-pods