
文章插圖
阿里云容器服務在使用的過程中,針對TCP負載均衡的場景,會遇到這樣的問題:如果一個應用的客戶端鏡像和服務端鏡像均部署在同一個節(jié)點(ECS)上面,由于受SLB的限制,該應用的客戶端不能通過SLB訪問本機的服務端 。本文試圖以常用的基于TCP協(xié)議的redis為例,逐步深入的方式來解決這個問題,同時帶大家了解一下容器服務的概念 。
解法一:通過調(diào)度容器,避免客戶端和服務端容器部署在同一個節(jié)點
示例應用模板(使用了lb標簽,和swarm fileter功能)
redis-master: ports:
– 6379:6379/tcp image: ‘redis:alpine’
labels:
aliyun.lb.port_6379: tcp://proxy_test:6379redis-client: image: ‘redis:alpine’
links:
– redis-master environment:
– ‘affinity:aliyun.lb.port_6379!=tcp://proxy_test:6379’
command: redis-cli -h 120.25.131.64
stdin_open: true tty: true
注意事項:
如果發(fā)現(xiàn)調(diào)度不生效,進入服務列表,選擇你需要調(diào)度的服務,選擇重新調(diào)度,選擇強制重新調(diào)度強制重新調(diào)度會丟棄已有容器的volume,請做好相應的備份遷移工作解法二:容器集群內(nèi)部客戶端使用link訪問服務端,集群外部使用SLB
示例應用模板(使用了lb標簽)
redis-master: ports:
– 6379:6379/tcp image: ‘redis:alpine’
labels:
aliyun.lb.port_6379: tcp://proxy_test:6379redis-client: image: ‘redis:alpine’
links:
– redis-master command: redis-cli -h redis-master stdin_open: true tty: true
解法三:容器集群內(nèi)部客戶端使用自定義路由(基于HAProxy)作為代理訪問服務端,集群外部使用SLB
示例應用模板(使用了lb標簽,自定義路由鏡像)
lb: image: registry.aliyuncs.com/acs/proxy:0.5
ports:
– ‘6379:6379/tcp’
restart: always labels:
# addon 使得proxy鏡像有訂閱注冊中心的能力,動態(tài)加載服務的路由
aliyun.custom_addon: “proxy”
# 每臺vm 部署一個該鏡像的容器
aliyun.global: “true”
# 前端綁定SLB,使用lb標簽
aliyun.lb.port_6379: tcp://proxy_test:6379
# 告訴系統(tǒng),自定義路由需要等待master和slave啟動之后再啟動,并且對master和slave有依賴
aliyun.depends: redis-master,redis-slave environment:
# 支持加載路由的后端容器的范圍,”*”表示整個集群,默認為應用內(nèi)的服務 ADDITIONAL_SERVICES: “*”
EXTRA_DEFAULT_SETTINGS: “log rsyslog local0,log global,option httplog”
# 配置HAProxy工作于tcp模式 MODE: “tcp”
links:
– rsyslog:rsyslogrsyslog: image: registry.cn-hangzhou.aliyuncs.com/linhuatest/rsyslog:latestredis-master: ports:
– 6379/tcp image: ‘redis:alpine’
labels:
# 告訴自定義路由需要暴露6379端口
aliyun.proxy.TCP_PORTS: “6379”
# 告訴系統(tǒng),該服務的路由需要添加到自定義路由服務中
aliyun.proxy.required: “true”redis-slave: ports:
– 6379/tcp image: ‘redis:alpine’
links:
– redis-master labels:
# 告訴自定義路由需要暴露6379端口
aliyun.proxy.TCP_PORTS: “6379”
# 告訴系統(tǒng),該服務的路由需要添加到自定義路由服務中
aliyun.proxy.required: “true”
# 告訴系統(tǒng),slave需要等待master啟動之后再啟動,并且對master有依賴
aliyun.depends: redis-master command: redis-server –slaveof redis-master 6379redis-client: image: ‘redis:alpine’
links:
– lb:www.example.com labels:
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- 免費的短視頻sdk 阿里云短視頻sdk集成
- 講述不需要備案的服務器 阿里云服務器需要備案嗎
- 虛擬主機和云服務器的區(qū)別 虛擬主機的配置怎么選擇
- 個人私有云搭建方案 nas存儲怎么搭建
- 多家企業(yè)馳援河南:阿里開放盒馬集市河南倉 泡泡瑪特等捐贈??????
- eva劇場版終章資源 2021eva新劇場版終在線觀看 eva劇場版終百度云資源
- 投訴淘寶網(wǎng)平臺的方法 淘寶云閃付怎么使用
- 在服務器上搭建網(wǎng)站教程 云服務器建站步驟
- 阿里云輕量應用服務器 云saas是什么意思
- 云空間不足怎么清理空間 云空間不足清理空間的方法
