模板版本的支持
Compose V1/V2 和 Compose V3 版本的编排模板均支持 lb 标签,且语法相同。
功能概述
通过自定义阿里云负载均衡 nat 映射的方式来暴露服务端口到公网或者到内网。需要升级到最新版本的 Agent 方能支持该扩展能力标签。
标签格式如下,带$的变量为占位符。
- [backcolor=transparent]aliyun[backcolor=transparent].[backcolor=transparent]lb[backcolor=transparent].[backcolor=transparent]port_$container_port[backcolor=transparent]:[backcolor=transparent]$scheme[backcolor=transparent]:[backcolor=transparent]//$[slb_name|slb_id]:$slb_front_port
[backcolor=transparent]编排示例:
[backcolor=transparent]Compose V1/V2 示例:
- [backcolor=transparent]web[backcolor=transparent]:
- [backcolor=transparent] image[backcolor=transparent]:[backcolor=transparent] wordpress[backcolor=transparent]:[backcolor=transparent]4.2
- [backcolor=transparent] ports[backcolor=transparent]:
- [backcolor=transparent] [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]7777[backcolor=transparent]:[backcolor=transparent]80
- [backcolor=transparent] [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]9999[backcolor=transparent]:[backcolor=transparent]9999
- [backcolor=transparent] [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]8080[backcolor=transparent]:[backcolor=transparent]8080
- [backcolor=transparent] [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]53[backcolor=transparent]:[backcolor=transparent]53[backcolor=transparent]/[backcolor=transparent]udp
- [backcolor=transparent] links[backcolor=transparent]:
- [backcolor=transparent] [backcolor=transparent]-[backcolor=transparent] db[backcolor=transparent]:[backcolor=transparent]mysql
- [backcolor=transparent] labels[backcolor=transparent]:
- [backcolor=transparent] aliyun[backcolor=transparent].[backcolor=transparent]lb[backcolor=transparent].[backcolor=transparent]port_80[backcolor=transparent]:[backcolor=transparent] http[backcolor=transparent]:[backcolor=transparent]//slb_example_name:8080
- [backcolor=transparent] aliyun[backcolor=transparent].[backcolor=transparent]lb[backcolor=transparent].[backcolor=transparent]port_9999[backcolor=transparent]:[backcolor=transparent] tcp[backcolor=transparent]:[backcolor=transparent]//slb_example_name:9999
- [backcolor=transparent] aliyun[backcolor=transparent].[backcolor=transparent]lb[backcolor=transparent].[backcolor=transparent]port_8080[backcolor=transparent]:[backcolor=transparent] https[backcolor=transparent]:[backcolor=transparent]//14a7ba06d3b-cn-hangzhou-dg-a01:80
- [backcolor=transparent] aliyun[backcolor=transparent].[backcolor=transparent]lb[backcolor=transparent].[backcolor=transparent]port_53[backcolor=transparent]:[backcolor=transparent] udp[backcolor=transparent]:[backcolor=transparent]//14a7ba06d3b-cn-hangzhou-dg-a01:53
- [backcolor=transparent]db[backcolor=transparent]:
- [backcolor=transparent] image[backcolor=transparent]:[backcolor=transparent] mysql
- [backcolor=transparent] environment[backcolor=transparent]:
- [backcolor=transparent] [backcolor=transparent]-[backcolor=transparent] MYSQL_ROOT_PASSWORD[backcolor=transparent]=[backcolor=transparent]password
[backcolor=transparent]Compose V3 示例:
- [backcolor=transparent]version[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]'3'
- [backcolor=transparent]services[backcolor=transparent]:
- [backcolor=transparent] web[backcolor=transparent]:
- [backcolor=transparent] image[backcolor=transparent]:[backcolor=transparent] wordpress[backcolor=transparent]:[backcolor=transparent]4
- [backcolor=transparent] ports[backcolor=transparent]:
- [backcolor=transparent] [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]7777[backcolor=transparent]:[backcolor=transparent]80
- [backcolor=transparent] [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]9999[backcolor=transparent]:[backcolor=transparent]9999
- [backcolor=transparent] [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]8080[backcolor=transparent]:[backcolor=transparent]8080
- [backcolor=transparent] [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]53[backcolor=transparent]:[backcolor=transparent]53[backcolor=transparent]/[backcolor=transparent]udp
- [backcolor=transparent] depends_on[backcolor=transparent]:
- [backcolor=transparent] [backcolor=transparent]-[backcolor=transparent] mysql
- [backcolor=transparent] deploy[backcolor=transparent]:
- [backcolor=transparent] replicas[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]3
- [backcolor=transparent] restart_policy[backcolor=transparent]:
- [backcolor=transparent] condition[backcolor=transparent]:[backcolor=transparent] on[backcolor=transparent]-[backcolor=transparent]failure
- [backcolor=transparent] labels[backcolor=transparent]:
- [backcolor=transparent] aliyun[backcolor=transparent].[backcolor=transparent]lb[backcolor=transparent].[backcolor=transparent]port_80[backcolor=transparent]:[backcolor=transparent] http[backcolor=transparent]:[backcolor=transparent]//slb_example_name:8080
- [backcolor=transparent] aliyun[backcolor=transparent].[backcolor=transparent]lb[backcolor=transparent].[backcolor=transparent]port_9999[backcolor=transparent]:[backcolor=transparent] tcp[backcolor=transparent]:[backcolor=transparent]//slb_example_name:9999
- [backcolor=transparent] aliyun[backcolor=transparent].[backcolor=transparent]lb[backcolor=transparent].[backcolor=transparent]port_8080[backcolor=transparent]:[backcolor=transparent] https[backcolor=transparent]:[backcolor=transparent]//14a7ba06d3b-cn-hangzhou-dg-a01:80
- [backcolor=transparent] aliyun[backcolor=transparent].[backcolor=transparent]lb[backcolor=transparent].[backcolor=transparent]port_53[backcolor=transparent]:[backcolor=transparent] udp[backcolor=transparent]:[backcolor=transparent]//14a7ba06d3b-cn-hangzhou-dg-a01:53
- [backcolor=transparent] db[backcolor=transparent]:
- [backcolor=transparent] image[backcolor=transparent]:[backcolor=transparent] mysql
- [backcolor=transparent] environment[backcolor=transparent]:
- [backcolor=transparent] [backcolor=transparent]-[backcolor=transparent] MYSQL_ROOT_PASSWORD[backcolor=transparent]=[backcolor=transparent]password
- [backcolor=transparent] deploy[backcolor=transparent]:
- [backcolor=transparent] restart_policy[backcolor=transparent]:
- [backcolor=transparent] condition[backcolor=transparent]:[backcolor=transparent] on[backcolor=transparent]-[backcolor=transparent]failure
要使用好自定义负载均衡的 lb 标签,您需要理解请求路由过程中的 3 个端口,即负载均衡的前端端口,负载均衡的后端端口(也就是 ECS vm 的端口),最后就是容器的端口。以第一个lb标签aliyun.lb.port_80为例,从左往右看,在 key 中的 80 端口指的是容器要暴露的端口,后面的 8080 端口指的是负载均衡要暴露的前端端口。负载均衡的后端端口是 ECS vm 的端口,可从标签 ports 的主机:容器端口映射中获取到,由此,您可以查到容器端口 80 对应的主机端口是 7777,因此确定了负载均衡转发的后端端口是 7777 端口。因此第一个标签说明了当向服务 Web 发起请求时,首先通过负载均衡前端的 8080 端口进入,转发到后端主机 vm 的 7777 端口,然后再根据端口映射 ports 的声明,请求最终从容器端口 80 进入,交由容器内的 WordPress 进程提供服务。接下来的标签以此进行相同的解释。该标签配置的负载均衡均不经过集群内置的 routing 服务,请求的路由由您自己控制。
[backcolor=transparent]标签声明的格式要求:
- 指明负载均衡实例时,可以使用负载均衡实例的名称或者负载均衡实例的 ID。
- 负载均衡实例名称的限制为 1~80 个字符,允许包含字母、数字、连字符(-)、正斜杠(/)、点号(.)、下划线(_)。
- 容器端口限制为 1~65535。
- 负载均衡前端端口的限制为 1~65535。
[backcolor=transparent]带有自定义负载均衡 nat 映射的服务部署限制:
- 您需要自己创建负载均衡实例,对负载均衡实例命名,并创建对应监听端口,然后以扩展标签的方式提供负载均衡实例的名称 $slb_name 或者 $slb_id,以及要暴露的端口,使用的协议 $scheme(可能的值有tcp、http、https、udp),映射的容器端口 $container_port,指定负载均衡实例的前端端口$slb_front_port。
- 您必须指定服务要暴露端口的主机和容器端口的映射,通过 Dockerfile 标准的标签 ports 指定,注意必须指定主机端口,且与其他服务映射的主机端口不能冲突,需要主机的端口用于负载均衡绑定后端的 ECS vm 机器。
- 一个服务只能使用一个或者多个负载均衡实例进行服务端口的暴露,因多个服务会分布在不同的 vm 后端,多个服务不能共享使用同一个负载均衡实例。
- 部署了带有负载均衡 nat 映射的服务的主机使用相同的主机:容器端口映射,因此这些服务在每台 vm 主机上只有一个实例。
- 支持的负载均衡协议 $scheme 包括tcp、http、https、udp协议。
- 您需要自行在阿里云负载均衡官方控制台创建监听的端口。
- 请自行登录负载均衡官方控制台对使用在容器服务中的负载均衡实例进行具体的配置修改,例如带宽限制等配置。
- lb 标签的价值在于您不需要自行绑定负载均衡后端的 ECS vm 服务器, 只需要配置好相应的标签,,就会帮助您完成绑定后端的操作。因此,除了绑定负载均衡后端的操作,您对负载均衡的设置和修改需要自行在阿里云负载均衡管理控制台上完成。
- 容器服务会帮助您生成一个 RAM 子账户(需要您开通 RAM),使用这个具有部分负载均衡权限(没有创建和删除负载均衡的权限)的账号帮助您管理在容器服务中使用的负载均衡实例,例如绑定集群中某些节点作为服务的后端。
- 在服务的整个生命周期内,lb标签会一直生效,除非服务被删除,或者lb标签删除之后重新部署了服务,在此期间,配置在lb标签内的SLB实例不能混用。