开发者社区 > 云原生 > 容器服务 > 正文

Swarm 集群  服务发现和负载均衡  容器间的互相发现


容器服务为集群内的服务和容器提供多种服务发现方式,可以通过容器名、link、hostname 等进行发现。

通过容器名


容器服务不仅可以通过容器的 IP 进行访问,还可以通过网络中其他容器的容器名进行访问,通过 跨主机互联的容器网络 中的例子,您可以在 test_network-test2_1 的容器中通过 test_network-test1_1 的容器名进行访问。
如果在编排文件中不指定 container_name 的话,默认的容器名为 {project-name}_{service-name}_{container-index}。在连接管理终端后,您可以通过另外一个服务的容器名进行访问,来测试网络的连通性。如下图所示。




通过 link


容器服务支持编排模板服务间的 link,服务间的 link 可以将一个服务的容器 link 到另外一个服务的容器中,而容器中可以通过 link 进来的服务别名访问到依赖的容器,并且在依赖的容器的 IP 变化时可以动态的更新别名解析的 IP。具体的例子可以参考容器服务示例编排中的 WordPress 编排,其中 WordPress 中 Web 服务 link db:mysql 的服务到容器内,如下所示。容器内部就可以通过 MySQL 的域名访问到 db 服务的容器。
links:
    - 'db:mysql'



通过 hostname


如果在编排模板的服务中定义了 hostname 的配置,则在集群中便可以通过这个 hostname 访问到这个容器。
例如:
testhostname:
        image: busybox
        hostname: xxserver
        command: sleep 100000
        tty: true

那么,集群中就可以通过 xxserver 解析并访问到这个服务的容器,具体请参见 跨主机互联的容器网络 的编排示例。当这个服务在有多个容器时,通过这个域名访问还可以做到一定的负载均衡的作用。
另外,如果服务没有配置 hostname 的话,容器服务会把容器的容器名作为容器内部的 hostname;如果有应用需要在容器内知道自己的容器名,用于服务的注册,比如 Eureka Client,需要注册一个可被访问的地址到 Eureka Server,容器内的进程可以获取到容器名用于服务注册,并让其他的服务调用者通过容器名互相访问。



展开
收起
青蛙跳 2018-08-31 21:50:48 1349 0
0 条回答
写回答
取消 提交回答

国内唯一 Forrester 公共云容器平台领导者象限。

相关电子书

更多
阿里云文件存储 NAS 在容器场景的最佳实践 立即下载
何种数据存储才能助力容器计算 立即下载
《容器网络文件系统CNFS》 立即下载