dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币12474枚
  • 威望5607点
  • 银元145个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
阅读:93回复:0

如何使用 Rancher 打造私有 CaaS平台 ?

楼主#
更多 发布于:2018-04-10 11:42
目标
基于阿里云 & Rancher,打造私有 CaaS 平台。
当然,如果你使用的是其它的 IaaS 云 或者IDC,需要作出相应的调整。

环境描述
1. 基础架构
由 5 个阿里云实例组成,包括:
    SLB 负载均衡实例(4/7) * 1
    Rancher Server ECS 实例 * 1
    Rancher Agent ECS 实例 * 2
    NAS 网络存储(NFS) 实例 * 1

2. 网络
这里特别说明下网络,因为早期金融云为经典网络模式,金融行业有强制等级保护要求以此来保护网络安全;

屏蔽 ECS公网 IP全部端口,对外提供服务必须使用 SLB代理,SSH/RDP远程,必须登录 VPN 获取 Tunnel 通道后方可登录 后端服务器;

示例中的 Rancher Server 与 Rancher Agent 使用私有IP 进行网络通信,Rancher UI 控制台 也是通过VPN 进行访问的。拓扑图如下:


如果你使用的阿里公共云,或者 VPC网路模式,那么上面的限制不存在,但是还是提个建议注意网络安全,Rancher Server/Agent 之间尽量使用私有网络通信

此外对于阿里云.经典网络,需要提前创建一个安全组开放 UDP 500/4500端口,并将 rancher Server/Agent 全部加入到此安全组,否则会遇到 ipsec / healthcheck 容器异常。

3. 版本
Linux: Ubuntu 16.04 Server
Docker: 17.12.0-ce
Rancher: stable-1.6


安装部署
1. 部署 Docker
这里推荐使用 Ansible 批量部署 Docker服务,详细可以参考这里

2. 部署 Rancher  
Rancher 是使用一系列的 Docker容器进行部署的,分为两部分,其中 Rancher Server 容器作为管理服务器部署,另外的 Rancher Agent 容器作为集群节点的 Agent部署 。

2.1 创建 Rancher Server 容器
docker run -tid --name rancher-1.6 \
    -v rancher-db:/var/lib/mysql \
    --restart=unless-stopped \
    -p 8080:8080 rancher/server:stable
启动 Rancher Server 需要几分钟时间,当日志中显示 "... Startup Succeeded ..." 的时候,Rancher UI就能正常访问了,UI 控制台地址 http://<server_ip>:8080 。

2.2 配置访问控制策略
初始安装 Rancher的访问控制并未配置,任何能够访问你的IP地址的人,都可以访问你的UI和API,建议优先设置 “本地身份认证”,后续根据需求调整访问控制策略。
启用访问控制 -> 本地身份认证 -> 设置用户信息,详细步骤参考这里

2.3 添加主机
接下来,添加 Rancher Agent 依次在登录各台 Docker主机上执行提示的注册命令,如:
基础架构 -> 添加主机 -> 主机注册地址(根据实际情况修改,这里选择默认) -> Custom -> 将下列脚本拷贝到每一台主机上运行以注册 Rancher

#示例
docker run --rm --privileged \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.6 \
    http://Your-Rancher-Server-URL:8080/v1/scripts/9BF41EEC80CFF41E46D4:1483142400000:OFUHMoFcngbzwyLQY9Yx9BKjVQ


Rancher 对接阿里云服务
主要有两个方面:

一是对接 “阿里云NAS存储”,为后续的容器应用提供共享存储服务,通过对接NAS服务 我们无需对现有应用做任何修改,即可具备无限容量及性能扩展、单一命名空间、多共享、高可靠和高可用等特性。

二是通过 绑定阿里云SLB服务,为后面的容器应用提供负载均衡服务,SLB服务会检查云服务器池中ECS实例的健康状态,自动隔离异常状态的ECS实例,从而解决了单台ECS实例的单点问题,提高了应用的整体服务能力。

下面的文件写的非常详细,这里不再重复步骤,请参考下列文章。
1. 如何连接 Rancher与阿里云NAS存储
https://www.cnrancher.com/rancher-and-alicloud/

2. Rancher 通过 Aliyun-slb服务对接阿里云SLB
https://www.cnrancher.com/rancher-aliyun-slb/


创建一个应用
1. 应用架构

图片:rancher-app.png



典型的 WEB应用架构,组件包括:
1个负载均衡器/反向代理(LB),例如 haproxy ;
2个应用服务器(APP),例如 nginx ;
1个数据库服务器(DB),例如 mysql ;

2. 说明
因为业务特殊性,这里没有使用 Aliyun-slb 方案,而是使用 Rancher 自带的 LB容器,所以需要手动指定 阿里云SLB端口, Aliyun-slb 方案,请参考这里

Aliyun -> SLB (前端:80 后端:8001 健康检查:8001) -> ECS 端口:8001 (Haproxy 容器:8001) -> Nginx 容器:80

图片:aliyun-slb-rancher.png



2. 步骤
首先准备好配置文件,包括:

# docker-compose 配置文件
cat docker-compose.yml
version: '2'
services:
  my-web:
    image: nginx:alpine
    volumes:
      - my-data:/var/www/html
    environment:
      - ITE=test
    labels:
      aliyun.logs.nginx: stdout
  
  lb:
    image: rancher/lb-service-haproxy:v0.7.15
    ports:
      - 8001:8001
    depends_on:
      - my-web
    labels:
      io.rancher.container.agent.role: environmentAdmin
      io.rancher.container.create_agent: 'true'

volumes:
  my-data:
    driver: rancher-nfs

# rancher-compose 配置文件
cat rancher-compose.yml
version: '2'
services:
  lb:
    scale: 1
    start_on_create: true
    lb_config:
      certs: []
      port_rules:
      - priority: 1
        protocol: http
        service: my-web
        source_port: 8001
        target_port: 80
     stickiness_policy:
        cookie: rh-lb-myApp
        domain: ''
        indirect: true
        mode: insert
        nocache: true
        postonly: false
    health_check:
      healthy_threshold: 2
      response_timeout: 2000
      port: 42
      unhealthy_threshold: 3
      initializing_timeout: 60000
      interval: 2000
      strategy: recreate
      reinitializing_timeout: 60000
  my-web:
    scale: 2
    start_on_create: true

2. 其次通过 rancher UI 控制台,添加"应用",如图
# 依次上传上述的两个 yml 配置文件。

图片:rancher-create-app.png




3. 验证应用
访问WEB 服务器,可以是SLB的IP 或者 绑定SLB IP的域名。
注意,返回的 Cookie 是不同的,对应了后端不同的容器。

# 第一次访问
curl -IL https://my-app.zongming.net
HTTP/1.1 200 OK
Date: Wed, 21 Mar 2018 11:14:53 GMT
Content-Type: text/html
Content-Length: 612
Connection: keep-alive
Last-Modified: Wed, 21 Feb 2018 18:52:51 GMT
ETag: "5a8dc003-264"
Accept-Ranges: bytes
Set-Cookie: rh-lb-myweb=b805d6375f8bb0447473a03dd2763755354ef4a9; path=/
Cache-control: private

# 第二次访问
curl -IL https://my-app.zongming.net
HTTP/1.1 200 OK
Date: Wed, 21 Mar 2018 11:14:55 GMT
Content-Type: text/html
Content-Length: 612
Connection: keep-alive
Last-Modified: Wed, 21 Feb 2018 18:52:51 GMT
ETag: "5a8dc003-264"
Accept-Ranges: bytes
Set-Cookie: rh-lb-myweb=3e8743a037dd8ba0d8b3af4309bb0673418b7cd0; path=/
Cache-control: private

扩展
进一步思考,如何让 rancher 对接 aliyun RDS 服务?
#
技术QQ群 https://zongming.net/app-index-run?app=qqun
游客

返回顶部