品尝阿里云容器服务:负载均衡与容器的关系
最近我们开始尝试基于阿里云容器服务使用Docer进行生产环境的自动化部署,首先遇到的一个问题是 —— 如何部署负载均衡(这里的负载均衡是指阿里云负载均衡SLB)?面对这个问题,我们首先关注的是这个问题 —— 阿里云负载均衡与容器究竟是什么关系?
在阿里云容器服务中创建集群时(这个使用容器服务的第一步操作),默认会自动创建负载均衡。
这个负载均衡依然是我们熟知的那个负载均衡,后端服务器依然是云服务器(ECS)。
最大的不同之处是监听的配置是基于TCP的4层负载均衡。
从这个监听配置可以得知,在使用阿里云容器服务时,负载均衡与容器没有直接的关系,它们感知不到容器的存在,只是作为4层负载均衡(也支持7层负载均衡,详见这里),负责将请求通过TCP转发到后端ECS的9080端口上,只不过这些ECS是容器服务集群中的节点(容器主机)。
这时我们有产生了另外一个疑问 —— 容器主机的9080端口与容器内应用监听的端口之间又是什么关系呢?
从阿里云容器服务的帮助文档-简单路由(支持 HTTP/HTTPS)中得知,在容器主机内运行着一个专门提供路由服务(acsrouting)的容器。
在容器服务控制台的“应用列表”中可以看到这个acsrouting应用:
点击上图中的应用名称"acsrouting",会显示这个应用中的服务acsrouting_routing:
从上图中的端口映射中可以知道,原来与容器主机(ECS,集群节点)的9080端口发生关系的是acsrouting_routing容器的80端口。
所以,当使用阿里云容器服务时,请求是这样被转发+路由到运行实际Web站点的容器中的:请求 -> 负载均衡80端口 -> ECS(容器主机)的9080端口 -> acsrouting的80端口 -> 运行Web站点的容器的80端口。
需要注意的是 acsrouting 的路由是基于域名的。