阿里云容器服务TCP的负载均衡配置

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 阿里云容器服务在使用的过程中,针对TCP负载均衡的场景,会遇到这样的问题:如果一个应用的客户端镜像和服务端镜像均部署在同一个节点(ECS)上面,由于受SLB的限制,该应用的客户端不能通过SLB访问本机的服务端。本文试图从逐步深入的方式来解决这个问题,同时带大家了解一下容器服务的概念。

阿里云容器服务在使用的过程中,针对TCP负载均衡的场景,会遇到这样的问题:如果一个应用的客户端镜像和服务端镜像均部署在同一个节点(ECS)上面,由于受SLB的限制,该应用的客户端不能通过SLB访问本机的服务端。本文试图以常用的基于TCP协议的redis为例,逐步深入的方式来解决这个问题,同时带大家了解一下容器服务的概念。

解法一:通过调度容器,避免客户端和服务端容器部署在同一个节点

示例应用模板(使用了lb标签,和swarm fileter功能)

redis-master:
    ports:
      - 6379:6379/tcp
    image:  'redis:alpine'
    labels:
        aliyun.lb.port_6379: tcp://proxy_test:6379
redis-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

注意事项:

  • 如果发现调度不生效,进入服务列表,选择你需要调度的服务,选择重新调度,选择强制重新调度
  • 强制重新调度会丢弃已有容器的volume,请做好相应的备份迁移工作

解法二:容器集群内部客户端使用link访问服务端,集群外部使用SLB

示例应用模板(使用了lb标签)

redis-master:
    ports:
      - 6379:6379/tcp
    image:  'redis:alpine'
    labels:
        aliyun.lb.port_6379: tcp://proxy_test:6379
redis-client:
    image:  'redis:alpine'
    links:
      - redis-master
    command: redis-cli -h redis-master
    stdin_open: true
    tty: true

解法三:容器集群内部客户端使用自定义路由(基于HAProxy)作为代理访问服务端,集群外部使用SLB

示例应用模板(使用了lb标签,自定义路由镜像

lb:
    image:  registry.aliyuncs.com/acs/proxy:0.5
    ports:
            -  '6379:6379/tcp'
    restart:  always
    labels:
        # addon 使得proxy镜像有订阅注册中心的能力,动态加载服务的路由
        aliyun.custom_addon:  "proxy"
        # 每台vm 部署一个该镜像的容器
        aliyun.global:  "true"
        #  前端绑定SLB,使用lb标签
        aliyun.lb.port_6379: tcp://proxy_test:6379
        # 告诉系统,自定义路由需要等待master和slave启动之后再启动,并且对master和slave有依赖
        aliyun.depends: redis-master,redis-slave
    environment:
        #  支持加载路由的后端容器的范围,"*"表示整个集群,默认为应用内的服务
        ADDITIONAL_SERVICES:  "*"
        EXTRA_DEFAULT_SETTINGS: "log rsyslog local0,log global,option httplog"
        # 配置HAProxy工作于tcp模式
        MODE: "tcp"
    links:
        - rsyslog:rsyslog
rsyslog:
    image: registry.cn-hangzhou.aliyuncs.com/linhuatest/rsyslog:latest
redis-master:
    ports:
      - 6379/tcp
    image:  'redis:alpine'
    labels:
        # 告诉自定义路由需要暴露6379端口
        aliyun.proxy.TCP_PORTS:  "6379"
        # 告诉系统,该服务的路由需要添加到自定义路由服务中
        aliyun.proxy.required: "true"
redis-slave:
    ports:
      -  6379/tcp
    image:  'redis:alpine'
    links:
      - redis-master
    labels:
      # 告诉自定义路由需要暴露6379端口
      aliyun.proxy.TCP_PORTS:  "6379"
      # 告诉系统,该服务的路由需要添加到自定义路由服务中
      aliyun.proxy.required: "true"
      # 告诉系统,slave需要等待master启动之后再启动,并且对master有依赖
      aliyun.depends: redis-master
    command: redis-server --slaveof redis-master 6379
redis-client:
    image:  'redis:alpine'
    links:
      - lb:www.example.com
    labels:
      aliyun.depends: lb
    command: redis-cli -h www.example.com
    stdin_open: true
    tty: true

该解决方案,做到了redis的主从架构,同时经过自定义路由镜像做负载均衡,做到了一定程度的高可用。

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
26天前
|
域名解析 移动开发 负载均衡
阿里云DNS常见问题之DNS负载均衡调加权模式失败如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
1月前
|
缓存 Kubernetes Docker
容器服务ACK常见问题之容器服务ACK ingress websocket配置失败如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
1月前
|
存储 Kubernetes Docker
容器服务ACK常见问题之阿里云控制台进不去了如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
1月前
|
弹性计算 负载均衡 容灾
slb配置后端服务器组
配置阿里云SLB后端服务器组涉及四个主要步骤:创建服务器组、添加ECS实例、关联监听规则和设定负载均衡策略。这使得流量根据业务需求和服务器特性进行转发,便于应用架构的灵活管理和扩展,支持蓝绿部署、灰度发布,并通过多可用区提升系统可用性和容灾能力。
25 3
|
2月前
|
人工智能 运维 Kubernetes
阿里云容器服务ACK AI助手正式上线带来的便利性
作为开发者想必大家都知道,云原生容器技术的优势,尤其是近两年的随着容器技术的迅猛发展,Kubernetes(K8s)已成为广泛应用于容器编排和管理的领先解决方案,但是K8s的运维复杂度一直是挑战之一。为了应对这一问题,就在最近,阿里云容器服务团队正式发布了ACK AI助手,这是一款旨在通过大模型增强智能诊断的产品,旨在帮助企业和开发者降低Kubernetes(K8s)的运维复杂度。那么本文就来详细讲讲关于这款产品,让我们结合实际案例分享一下K8s的运维经验,探讨ACK AI助手能否有效降低K8s的运维复杂度,并展望ACK AI助手正式版上线后的新功能。
268 2
阿里云容器服务ACK AI助手正式上线带来的便利性
|
3月前
|
Kubernetes 监控 调度
阿里云容器服务ACK
阿里云容器服务ACK(Alibaba Cloud Container Service for Kubernetes)提供高性能、可伸缩的容器应用管理服务,支持企业级Kubernetes容器化应用的生命周期管理。在ACK中,利用cGPU(Containerized GPU)技术可以实现GPU资源的共享,提高GPU利用率,降低整体成本。
68 6
|
28天前
|
负载均衡 网络协议 安全
slb监听协议tcp
SLB的TCP监听协议适用于WebSocket支持和通用TCP服务,如FTP、SMTP。配置时设定监听端口,健康检查通过TCP握手检测服务器可用性。会话保持基于源IP,可配置SSL/TLS卸载或端到端加密。注意特定HTTP头传递和平台限制。适用于需要传输层流量管理和不依赖HTTP的应用。
18 3
|
1月前
|
弹性计算 缓存 网络协议
slb配置监听规则
配置Server Load Balancer的监听规则涉及选择协议(如HTTP/HTTPS/TCP/UDP)、设置端口,配置后端服务器组,设定健康检查(TCP或HTTP),定义转发规则(轮询、权重等),配置SSL证书、会话保持及安全优化措施。在阿里云上,这可通过登录控制台,选择SLB实例,添加监听并设置相关参数来完成。不同云服务商的具体步骤可能略有差异,参考官方文档为宜。
33 3
|
1月前
|
弹性计算 负载均衡 算法
SLB配置与使用
SLB配置与使用
25 4
|
1月前
|
SpringCloudAlibaba 负载均衡 Java
【二】SpringCloud Alibaba之Nacos整合篇(配置负载均衡)
【二】SpringCloud Alibaba之Nacos整合篇(配置负载均衡)
251 0

相关产品

  • 容器计算服务