负载均衡路由

更新时间:2018-03-16 10:51:40

暴露 HTTP 协议或者 HTTPS 协议的服务

推荐使用简单路由服务(即 routing)的方式来暴露 HTTP 服务或者 HTTPS 协议的服务。如果您希望直接用 SLB 来暴露 HTTP 或 HTTPS 服务,可以购买新的内网或者公网负载均衡实例,并通过 aliyun.lb.port_$container_port 标签来设置路由。

适用场景:

7 层协议负载均衡,自定义各服务的路由,在将传统架构迁移到容器架构过程中非容器集群的服务访问容器集群中容器的服务。

暴露 TCP 协议或者 UDP 协议的服务

swarm mode 集群下支持自动配置负载均衡实例,并且一个负载均衡实例可以绑定多个服务。如果要暴露 TCP/UDP 协议的服务,负载均衡实例会根据端口映射和 lb 标签自动配置监听规则(通过 端口映射容器标签 来设置)。

注意:如果要使用负载均衡实例,您需要购买一个新的负载均衡实例。多个服务不能共享使用同一个负载均衡实例,同时不能共享使用集群默认负载均衡实例。

适用场景:

4 层协议的负载均衡,自定义各服务的路由,在将传统架构迁移到容器架构过程中非容器集群的服务访问容器集群中容器的服务。

示例:

通过自定义负载均衡的方式来将容器集群内的 Redis 服务暴露给容器集群外的 Python 应用。

  1. 首先在 负载均衡管理控制台 (单击页面右上角的 创建负载均衡)购买一个用于路由的负载均衡实例。本示例中选择的是按量付费公网实例,您可以根据自己的需要进行选择。

    注意: 由于负载均衡不支持跨地域(Region)部署,因此应选择与您所使用容器服务集群相同的地域。

    slb

  2. 返回 负载均衡管理控制台,将购买创建的负载均衡实例命名为 slb_redis_app。容器服务会通过该名称来引用这个负载均衡实例。

    单击左侧导航栏中的 实例管理 > 选择实例所在的地域 > 选择所需实例 > 编辑实例的名称并单击 确定

    2

  3. 选择一个已有的 swarm mode 集群,创建一个名称为 redis-demo 的应用,单击 使用镜像创建

    有关如何创建应用,参见 使用镜像创建应用

    注意:由于负载均衡不支持跨地域(Region)部署,因此您所使用的容器服务集群需要和上边创建的负载均衡实例处于相同的地域。

    1

  4. 输入 Redis 镜像名称(域名/namespace/imagename:tag),并设置 端口映射

    此处 Redis 镜像只开通了容器的 6379 端口,即 redis 的默认端口,主机端口未指定,容器服务会随机分配一个主机端口,端口协议为 tcp。

    1

  5. 您可以通过注入一个 容器标签 来绑定负载均衡实例。本示例中,标签为 aliyun.lb.port_6379: tcp://slb_redis_app:80。,负载均衡的前端端口为 80。

    注意:通过该标签和端口映射的配置,该负载均衡实例会自动生成监听规则,最终形成从负载均衡实例前端—>后端 ECS 主机端口—>容器端口的路由链路。

    1

    标签格式如下,带 $ 的变量为占位符。

    aliyun.lb.port_$container_port:$scheme://$[slb_name|slb_id]:$front_port

    • $container_port 表示容器要暴露的端口。
    • $scheme表示负载均衡实例监听端口支持的协议,可能的值为 tcp、http、https、udp。
    • $[slb_name|slb_id] 表示可以填写负载均衡实例的名称或者 ID。
    • $front_port 表示负载均衡实例要暴露的前端端口。
  6. 单击 创建,Redis 应用即开始创建了。Redis 应用在创建的过程中会自动将名称为 slb_redis_app 的负载均衡实例绑定到部署了 redis 镜像的后端主机。

  7. 当应用处于就绪状态后,登录 负载均衡管理控制台,查看名为 slb_redis_app 的负载均衡实例的状态。

    单击左侧导航栏中的 实例管理 > 选择实例所在的地域 > 选择所需实例 > 单击实例右侧的 管理 > 单击左侧导航栏中的 服务器 > 后端服务器

    由健康状态可见,负载均衡已经正确地绑定到了 Redis 的后端。

    5

  8. 您可以登录 负载均衡管理控制台 查看实例的监听规则。在 实例管理 页面查看负载均衡实例的 服务地址 ,并使用命令行工具 telnet $Server_Load_Balancer_IP_address 80 来检查端口的可访问性。

  9. 为了测试以上配置,在本地运行一个简单的 Python 应用来通过 slb_redis_app 负载均衡实例访问容器集群内的 Redis。本地环境需要安装 python 和 flask。

    注意:Redis 主机地址是负载均衡的服务地址,端口是负载均衡实例前端端口。

    app.py

    1. from flask import Flask
    2. from redis import Redis
    3. app = Flask(__name__)
    4. redis = Redis(host='$Server_Load_Balancer_IP_address', port=80)
    5. @app.route('/')
    6. def hello():
    7. redis.incr('hits')
    8. return 'Hello World! I have been seen %s times.' % redis.get('hits')
    9. if __name__ == "__main__":
    10. app.run(host="0.0.0.0", debug=True)

    requirements.txt

    1. flask
    2. redis

    shell

    1. $ pip install -r requirements.txt
    2. $ python app.py
    3. Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
    4. Restarting with stat
    5. Debugger is active!
    6. Debugger pin code: 243-626-653

    访问结果如下图所示。

本文导读目录