更新时间:2022-06-12 22:10:58
在容器服务中,暴露应用提供的服务到公网有两种选择,一种是通过系统默认的路由应用acsrouting暴露服务到公网,适用的场景是:普通且简单的7层协议负载均衡,web页面访问路由服务,容器集群内服务之间7层协议互相访问的通信代理和负载均衡。另外一种是通过自定义SLB方式暴露服务,这种方式是属于较高级的功能,适用的场景是:4层协议负载均衡,自定义各服务的路由,在将传统架构迁移到容器架构过程中非容器集群的服务访问容器集群中容器的服务。下面分别以举例的方式介绍这些暴露服务到公网并配置负载均衡的能力。
通过容器服务管理控制台进行设置
通过客户端工具进行设置
示例:通过自定义SLB的方式来将容器集群内的redis服务暴露给容器集群外的python应用
slb_redis_app
,容器服务会通过该名称来引用这个SLB使用镜像创建
publish
,选择使用的协议是TCP
协议,同时指定主机端口为6379,主机端口6379即为SLB绑定的后端主机端口。为了配置自定义SLB
,需要让redis服务知道使用的SLB的信息,这些信息是通过向服务注入一个标签来实现的,标签格式如下,带$的变量为占位符
aliyun.lb.port_$container_port:$scheme://$[slb_name|slb_id]:$front_port
$container_port
表示容器要暴露的端口,$scheme
表示SLB监听端口支持的协议,可能的值为tcp
,http
,https
,udp
。$[slb_name|slb_id]
表示可以填写slb实例的名称或者Id,$front_port
表示slb实例要暴露的前端端口。更多详情见aliyun.lb.port_$container_port。
创建应用
页面,点击更多设置
,找到自定义SLB
表单。这里设置我们要配置的SLB实例的信息,如下图配置所示,对应的标签内容为aliyun.lb.port_6379: tcp://slb_redis_app:6379
。 标签设置我们要路由到的容器端口为6379,引用前面创建的SLB名称slb_redis_app
,与上面主机:容器
端口映射设置的TCP协议相呼应,这里我们设置监听端口的协议为TCP协议,同时设置SLB的前端端口为6379,点击添加
按钮。至此,我们在容器服务中引用了刚刚创建的SLBslb_redis_app
,同时将SLB的前端端口,后端端口(即主机的端口),容器端口均设置为了6379(用户可以根据自己的需要设置不同的前端端口和主机端口)创建并部署
,redis应用即开始创建了。redis应用在创建的过程中会自动将名称为slb_redis_app
的SLB实例绑定到部署了redis镜像的后端主机。slb_redis_app
的SLB实例的状态。由健康状态可见,SLB已经正确地绑定到了redis的后端了,除了SLB绑定的后端和监听的6379端口外,用户此时可以根据自己的需要修改名为slb_redis_app
的SLB实例的属性。120.25.129.150
,用户可以使用命令行工具telnet 120.25.129.150 6379
来检查端口的可访问性。slb_redis_app
SLB实例访问容器集群内的redis,注意redis主机地址是SLB的地址120.25.129.150
app.py
from flask import Flask
from redis import Redis
app = Flask(__name__)
redis = Redis(host='120.25.129.150', port=6379)
@app.route('/')
def hello():
redis.incr('hits')
return 'Hello World! I have been seen %s times.' % redis.get('hits')
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
requirements.txt
flask
redis
shell
$ pip install -r requirements.txt
$ python app.py
Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
Restarting with stat
Debugger is active!
Debugger pin code: 243-626-653