-1

我正在为 Kubernetes 带来一个由不同组件组成的应用程序。现在我遇到了一些组件,他们的 compose 文件没有任何端口,我不知道如何为它们创建服务。我检查了这些组件,它们的网络设置如下:

"NetworkSettings": {
    "Bridge": "",
    "Ports": {},
    "Gateway": "172.18.133.1",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "IPAddress": "172.18.133.14",
    [other-configs]
}

我们如何为这些组件创建服务?

4

2 回答 2

3

普通的 Docker/Docker Compose 和 Kubernetes 之间有很大的不同。在 Docker 中,一个容器可以使用另一个容器的名称作为主机名和容器恰好正在侦听的任何端口来访问另一个容器,而无需任何特殊声明。在 Kubernetes 中,所有 pod 到 pod 的通信通常都通过服务进行。

即使你没有在外部发布容器的端口,它的 Dockerfile 通常也会包含一个EXPOSE声明,命名一些特定的端口,你可以将它们放在 pod 和服务规范中。如果你没有 Dockerfiledocker history或者docker inspect可以告诉你。即使没有这些信息,您也必须使用其他可能的非技术手段才能找到它。

如果容器根本不接受入站连接(例如,它是作业排队系统的工作容器),您可能根本不需要服务。

如果您不接受入站连接,但仍需要 Service(这是使用 Istio 时的要求),则 Service 需要声明

type: ClusterIP
clusterIP: None

这没有很好的记录,但在代码中确实有一条规则,服务必须至少有一个端口,没有这个。

于 2019-06-18T10:40:32.713 回答
1

假设您正在谈论公共访问,根据docker 文档

默认情况下,当您创建容器时,它不会向外界发布任何端口。要使端口可用于 Docker 外部的服务或未连接到容器网络的 Docker 容器,请使用 --publish 或 -p 标志。

如果您指的是 docker-compose 上的容器间通信,则必须检查您的应用程序,因为端口不需要在 docker 网络上“公开”。

于 2019-06-17T20:35:41.333 回答