Swarm 集群  服务发现和负载均衡  负载均衡路由-问答-阿里云开发者社区-阿里云

开发者社区> 青蛙跳> 正文

Swarm 集群  服务发现和负载均衡  负载均衡路由

2018-08-31 21:49:32 1097 0


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


推荐使用简单路由服务(即 routing)的方式来暴露 HTTP 服务或者 HTTPS 协议的服务,如果您希望搭建自己的路由链路,可以开通新的内网或者公网负载均衡实例路由到 VM 的端口(通过阿里云扩展标签 lb 来实现),并设置主机和容器的映射关系来进行请求的路由。
适用场景:
7 层协议负载均衡,自定义各服务的路由,在将传统架构迁移到容器架构过程中非容器集群的服务访问容器集群中的服务。

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


目前如果要暴露 TCP 协议的服务,需要您自行设置负载均衡实例或者公网 IP,并配置好主机端口与容器端口的映射(通过阿里云扩展标签 lb 来实现)。


适用场景:
4 层协议的负载均衡,自定义各服务的路由,在将传统架构迁移到容器架构过程中非容器集群的服务访问容器集群中的服务。
示例:
通过自定义负载均衡的方式来将容器集群内的 Redis 服务暴露给容器集群外的 Python 应用。
  1. 首先在负载均衡管理控制台负载均衡管理控制台 (单击页面右上角的创建负载均衡)购买创建一个用于路由的负载均衡实例。
    本示例中选择的是公网实例,您可以根据自己的需要选择公网或者私网。

  2. 返回负载均衡管理控制台,将购买创建的负载均衡实例命名为 slb_redis_app。容器服务能通过该名称来引用这个负载均衡实例。您也可以通过负载均衡实例 ID 来引用。
    单击左侧导航栏中的 实例管理,选择实例所在的地域 > 选择所需实例 > 编辑实例的名称并单击 确定。

  3. 创建监听端口。
    单击实例右侧的 管理,单击左侧导航栏中的 监听 > 添加监听 > 设置监听配置 。创建协议为 TCP,端口映射为 6379:6379。

  4. 登录容器服务管理控制台,选择一个已有集群,创建一个名称为 redis-demo 的应用,单击使用镜像创建。
    有关如何创建应用,参见创建应用

  5. 选择 Redis 镜像并设置端口映射。 在 端口映射中,指定主机端口为 6379,主机端口 6379 即为负载均衡实例绑定的后端主机端口,选择使用的协议为 TCP.

  6. 为了配置自定义负载均衡,需要让 Redis 服务知道使用的负载均衡实例的信息。您可以通过向服务注入一个标签来实现或者通过设置负载均衡路由配置。
    • 向服务注入一个标签。本示例中,标签为 aliyun.lb.port_6379: tcp://slb_redis_app:6379。
    • $container_port 表示容器要暴露的端口。
    • $scheme表示负载均衡实例监听端口支持的协议,可能的值为 tcp、http、https、udp。
    • $[slb_name|slb_id] 表示可以填写负载均衡实例的名称或者 ID。
    • $front_port 表示负载均衡实例要暴露的前端端口。

更多详细信息,参见阿里云扩展标签 lb
  • 在创建应用页面,单击负载均衡路由配置右侧的加号图标,设置要配置的负载均衡实例的信息,如下图所示。
    该设置对应的标签内容为 aliyun.lb.port_6379: tcp://slb_redis_app:6379。
  • 标签格式如下,带 $ 的变量为占位符。aliyun.lb.port_$container_port:$scheme://$[slb_name|slb_id]:$front_port
  • 本示例中,路由到的容器端口为 6379,引用前面创建的负载均衡实例名称 slb_redis_app,与上面主机端口:容器端口的映射设置的 TCP 协议相呼应,本示例设置监听端口的协议为 TCP 协议,同时设置负载均衡的前端端口为 6379。
    7.单击创建,Redis 应用即开始创建了。Redis 应用在创建的过程中会自动将名称为 slb_redis_app 的负载均衡实例绑定到部署了 redis 镜像的后端主机。


    8.当应用处于就绪状态后,登录负载均衡管理控制台,查看名为 slb_redis_app 的负载均衡实例的状态。
    单击左侧导航栏中的实例管理,选择实例所在的地域 > 选择所需实例 > 单击实例右侧的管理 > 单击左侧导航栏中的服务器 > 后端服务器。


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



    9. 您可以在负载均衡管理控制台 的实例管理页面查看负载均衡实例的 IP 地址,并使用命令行工具 telnet $Server_Load_Balancer_IP_address 6379 来检查端口的可访问性。
    10. 为了测试以上配置,在本地运行一个简单的 Python 应用来通过 slb_redis_app 负载均衡实例访问容器集群内的 Redis。


    app.py
    from flask import Flask
    from redis import Redis
    app = Flask(__name__)
    redis = Redis(host='$Server_Load_Balancer_IP_address', 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


    取消 提交回答
    全部回答(0)
    相关问答

    162

    回答

    惊喜翻倍:免费ECS+免费环境配置~!(ECS免费体验6个月活动3月31日结束)

    豆妹 2014-10-29 17:52:21 222979浏览量 回答数 162

    8

    回答

    OceanBase 使用动画(持续更新)

    mq4096 2019-02-20 17:16:36 333855浏览量 回答数 8

    22

    回答

    爬虫数据管理【问答合集】

    我是管理员 2018-08-10 16:37:41 146769浏览量 回答数 22

    18

    回答

    阿里云开放端口权限

    xcxx 2016-07-20 15:03:33 643103浏览量 回答数 18

    31

    回答

    [@倚贤][¥20]刚学完html/css/js的新手学习servlet、jsp需要注意哪些问题?

    弗洛伊德6 2018-10-27 21:52:43 145607浏览量 回答数 31

    38

    回答

    安全组详解,新手必看教程

    我的中国 2017-11-30 15:23:46 256862浏览量 回答数 38

    294

    回答

    Linux Bash严重漏洞修复紧急通知(已全部给出最终修复方案)

    qilu 2014-09-25 13:26:50 431607浏览量 回答数 294

    249

    回答

    阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

    云代维 2014-02-14 15:26:06 302590浏览量 回答数 249

    24

    回答

    【精品问答】python技术1000问(1)

    问问小秘 2019-11-15 13:25:00 471375浏览量 回答数 24

    2

    回答

    区域选择帮助

    fanyue88888 2012-12-07 15:54:30 204004浏览量 回答数 2
    +关注
    青蛙跳
    …。。
    3
    文章
    764
    问答
    推荐问答
    相关电子书
    更多
    文娱运维技术
    立即下载
    《SaaS模式云原生数据仓库应用场景实践》
    立即下载
    《看见新力量:二》电子书
    立即下载