閱讀305 返回首頁    go 阿裏雲 go 技術社區[雲棲]


負載均衡路由__服務發現和負載均衡_用戶指南_容器服務-阿裏雲

暴露 HTTP 協議或者 HTTPS 協議的服務

推薦使用簡單路由服務(即 routing)的方式來暴露 HTTP 服務或者 HTTPS 協議的服務,如果您希望搭建自己的路由鏈路,可以開通新的內網或者公網負載均衡實例路由到 VM 的端口(通過 label aliyun.lb.port_$container_port 來實現),並設置主機和容器的映射關係來進行請求的路由。

適用場景:

7 層協議負載均衡,自定義各服務的路由,在將傳統架構遷移到容器架構過程中非容器集群的服務訪問容器集群中容器的服務。

暴露 TCP 協議或者 UDP 協議的服務

目前如果要暴露 TCP 協議的服務,需要您自行設置負載均衡實例或者公網 IP,並配置好主機端口與容器端口的映射(通過 label aliyun.lb.port_$container_port 來實現)。

適用場景:

4 層協議的負載均衡,自定義各服務的路由,在將傳統架構遷移到容器架構過程中非容器集群的服務訪問容器集群中容器的服務。

示例:

通過自定義負載均衡的方式來將容器集群內的 Redis 服務暴露給容器集群外的 Python 應用。

  1. 首先在 負載均衡管理控製台 (單擊頁麵右上角的 創建負載均衡)購買創建一個用於路由的負載均衡實例。

    本示例中選擇的是公網實例,您可以根據自己的需要選擇公網或者私網。

    注意: 由於負載均衡不支持跨地域(Region)部署,因此應選擇與您所使用容器服務集群相同的地域。

    slb

  2. 返回 負載均衡管理控製台,將購買創建的負載均衡實例命名為 slb_redis_app。容器服務會通過該名稱來引用這個負載均衡實例。

    單擊左側導航欄中的 實例管理 > 選擇實例所在的地域 > 選擇所需實例 > 編輯實例的名稱並單擊 確定

    rename

  3. 創建監聽端口。

    單擊實例右側的 管理 > 單擊右側導航欄中的 監聽 > 單擊 添加監聽 > 設置監聽配置。創建協議為 TCP,端口映射為 6379:6379。如下圖所示。

    監聽

  4. 登錄 容器服務管理控製台,選擇一個已有的集群,創建一個名稱為 redis-demo 的應用,單擊 使用鏡像創建

    有關如何創建應用,參見 創建應用

    注意:由於負載均衡不支持跨地域(Region)部署,因此您所使用的容器服務集群需要和上邊創建的負載均衡實例處於相同的地域。

    應用

  5. 選擇 Redis 鏡像並設置 端口映射

    注意:此處 Redis 鏡像隻是開通了容器的 6379 端口,為了使創建的負載均衡路由到這個容器端口,您必須知道 Redis 鏡像的主機:端口映射。

    端口映射 中,指定主機端口為 6379,主機端口 6379 即為負載均衡實例綁定的後端主機端口,選擇使用的協議為 TCP.

    setting

  6. 為了配置自定義負載均衡,需要讓 Redis 服務知道使用的負載均衡實例的信息。您可以通過向服務注入一個標簽來實現或者通過設置 自定義 SLB

    • 向服務注入一個標簽。本示例中,標簽為 aliyun.lb.port_6379: tcp://slb_redis_app:6379

      標簽

      標簽格式如下,帶 $ 的變量為占位符。

      1. aliyun.lb.port_$container_port:$scheme://$[slb_name|slb_id]:$front_port
      • $container_port 表示容器要暴露的端口。
      • $scheme表示負載均衡實例監聽端口支持的協議,可能的值為 tcphttphttpsudp
      • $[slb_name|slb_id] 表示可以填寫負載均衡實例的名稱或者 ID。
      • $front_port 表示負載均衡實例要暴露的前端端口。

      更多詳細信息,參見 aliyun.lb.port_$container_port

    • 創建應用 頁麵,單擊 自定義 SLB 右側的加號圖標,設置要配置的負載均衡實例的信息,如下圖所示。

      該設置對應的標簽內容為 aliyun.lb.port_6379: tcp://slb_redis_app:6379

      slb

    本示例中,路由到的容器端口為 6379,引用前麵創建的負載均衡實例名稱 slb_redis_app,與上麵主機:容器端口映射設置的 TCP 協議相唿應,本示例設置監聽端口的協議為 TCP 協議,同時設置負載均衡的前端端口為 6379。

    注意:本示例中,同時將負載均衡實例的前端端口、後端端口(即主機的端口)和容器端口均設置為 6379,您可以根據自己的需要設置不同的前端端口和主機端口。

  7. 單擊 創建,Redis 應用即開始創建了。Redis 應用在創建的過程中會自動將名稱為 slb_redis_app 的負載均衡實例綁定到部署了 redis 鏡像的後端主機。

  8. 當應用處於就緒狀態後,登錄 負載均衡管理控製台,查看名為 slb_redis_app 的負載均衡實例的狀態。

    單擊左側導航欄中的 實例管理 > 選擇實例所在的地域 > 選擇所需實例 > 單擊實例右側的 管理 > 單擊左側導航欄中的 服務器

    由健康狀態可見,負載均衡已經正確地綁定到了 Redis 的後端。

    slb

  9. 您可以在 負載均衡管理控製台實例管理 頁麵查看負載均衡實例的 IP 地址,並使用命令行工具 telnet $Server_Load_Balancer_IP_address 6379 來檢查端口的可訪問性。

  10. 為了測試以上配置,在本地運行一個簡單的 Python 應用來通過 slb_redis_app 負載均衡實例訪問容器集群內的 Redis。

    注意:Redis 主機地址是負載均衡的 IP 地址。

    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=6379)
    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 https://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

    訪問結果如下圖所示。

最後更新:2016-12-13 13:56:18

  上一篇:go 集群內服務間路由和負載均衡__服務發現和負載均衡_用戶指南_容器服務-阿裏雲
  下一篇:go 容器間的互相發現__服務發現和負載均衡_用戶指南_容器服務-阿裏雲