一键部署NAT功能的ECS集群

本文涉及的产品
云服务器 ECS,每月免费额度280元 3个月
云服务器ECS,u1 2核4GB 1个月
公网NAT网关,每月750个小时 15CU
简介: 本文介绍一键部署具有NAT网关的ECS集群

应用场景

专有网络环境下,云服务器ECS实例不能直接访问公网,需要通过挂载EIP来获得公网访问的能力。但是往往集群内部多台ECS都能对外提供服务,这时如果每一台都挂载EIP不仅耗费带宽资源,还破坏了整个网络结构。本文介绍一种SNAT网关访问公网的方式如下图所示 :

NAT struct

解读:

  • 拿其中一台ECS做为VPC网络的NAT网关,然后在路由表中添加其他实例的转发规则。
  • 首先这台ECS实例要在指定的VPC网络中,
  • 然后给它绑定EIP,然后在这台ECS实例上的iptables配置SNAT和DNAT,
  • 最后在VPC的路由表中添加下一跳是这台ECS的路由项。

传统步骤

在控制台:

  • 创建VPC实例
  • 创建一个VSwitch(记录下网段)
  • 创建EIP实例
  • 创建ECS实例(记录下IP)
  • ECS绑定EIP
  • 登录ECS配置iptables(需要用Vswtich网段和ECS IP)
  • 添加路由

每一步操作都需要切换到不同的地址、不同的页面,不仅操作繁琐还得不停的切换时间片。详细操作步骤请参考教程。 下面介绍一种自动的方式,可以一键部署完成。

自动化部署

上述每一个步骤都是资源部署和配置的过程,以配置文件的方式来描述基础设施,然后让编排工具帮助我们去部署资源,这是基础设施即代码(Infrastructure as Code)的核心。本文讲解利用开源社区活跃度最高的资源编排工具Terraorm,在阿里云完成SNAT结构的部署。

UserData

User-Data 是实现云主机个性化定制的基础,用户通过 User-Data 设置一些定制化数据,如启动某项服务,下载一些包并设置这些包的安装脚本等,Cloud-Init 在云主机启动时加载并执行这些数据,从而完成对云主机的个性化定制。

Terraform编排模板

Terraform 是来自HashiCorp家族的开源工具,支持阿里云、AWS、Azure、GoogleCloud、DigitalOcean诸多云厂商的支持。有关terraform详细介绍请移步前一篇文章。本例涉及到的Terraform资源如下:

  • alicloud_vpc: vpc实例配置

    • cidr_block: 指定网段
  • alicloud_vswitch: 配置vswitch

    • cidr_block: 网段
    • availability_zone: 可用区
  • alicloud_route_entry: 配置路由条目

    • router_id: 指定VPC网络中的路由器ID
    • route_table_id: 指定VPC网络中路由表ID
    • destination_cidrblock: 目标网段
    • nexthop_type: 下一跳类型,这里填Instance
    • nexthop_id: ECS实例ID
  • template_file: 模板文件,支持把template的值传给shell脚本,片段如下

    data "template_file" "shell" {
    template = "${file("userdata.sh")}"
    
    vars {
        worker_private_ip = "${alicloud_instance.worker.private_ip}"
        vswitch_cidr = "${var.vswitch_cidr}"
    }
    }
    • 在ecs和vswtich创建完之后,拿到ip地址传给shell脚本
  • alicloud_instance: ECS实例配置

    • image_id: 镜像ID
    • instance_type: 实例类型
    • vswitch_id: 交换机ID
    • io_optimized: 是否IO优化
    • system_disk_category: 系统盘类型
    • user_data: 用户脚本,详见
    • 这里用到了userData, 把配置iptables的脚本传给ECS,在实例启动的时候自动配置iptables
    PostRouting=${vswitch_cidr}
  1. ${worker_private_ip}>> /etc/sysctl.conf
  2. 'net.ipv4.ip_forward=1'>> /etc/sysctl.conf
  3. -p
  4. -t nat -I POSTROUTING -s $PostRouting -j SNAT --to-source $SourceRouting
  5. -t nat -I PREROUTING -d $SourceRouting -p tcp --dport 80 -j DNAT --to ${worker_private_ip}

完整模板 下载

一键部署

安装 Terraform, 然后下载我们的模板,执行 terraform apply 等待几分钟,整个基础架构部署完成

验证

SSH到ECS上执行命令 iptables -t nat -nvL 结果如下:

| target | port | in | source | destination | |
| ----- | ---- | -- | ----------- | -------------- | ------------------------ |
| DNAT | tcp | * | 0.0.0.0/0 | 10.1.1.57 | tcp dpt:80 to:10.1.1.56
| SNAT | all | * | 10.1.1.0/24 | 0.0.0.0/0 | to:10.1.1.57

反馈

本文介绍了一种自动化选配ECS 做为NAT的方法,减轻了繁琐的配置工作,可以跟您的自动化工具协同使用。大家对自动构建工具Terraform感兴趣,或者有问题也可以在github https://github.com/alibaba/terraform-provider 的Issue中提问。

相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
25天前
|
定位技术
GPS北斗卫星同步时钟(时间同步服务器)建设施工部署方案
GPS北斗卫星同步时钟(时间同步服务器)建设施工部署方案
GPS北斗卫星同步时钟(时间同步服务器)建设施工部署方案
|
1月前
|
NoSQL 关系型数据库 MySQL
多人同时导出 Excel 干崩服务器?怎样实现一个简单排队导出功能!
业务诉求:考虑到数据库数据日渐增多,导出会有全量数据的导出,多人同时导出可以会对服务性能造成影响,导出涉及到mysql查询的io操作,还涉及文件输入、输出流的io操作,所以对服务器的性能会影响的比较大;结合以上原因,对导出操作进行排队; 刚开始拿到这个需求,第一时间想到就是需要维护一个FIFO先进先出的队列,给定队列一个固定size,在队列里面的人进行排队进行数据导出,导出完成后立马出队列,下一个排队的人进行操作;还考虑到异步,可能还需要建个文件导出表,主要记录文件的导出情况,文件的存放地址,用户根据文件列表情况下载导出文件。
多人同时导出 Excel 干崩服务器?怎样实现一个简单排队导出功能!
|
1月前
|
存储 边缘计算 监控
【MODBUS】Modbus主站云端服务器和边缘设备部署区别
【MODBUS】Modbus主站云端服务器和边缘设备部署区别
35 0
|
1月前
|
存储 资源调度 应用服务中间件
浅谈本地开发好的 Web 应用部署到 ABAP 应用服务器上的几种方式
浅谈本地开发好的 Web 应用部署到 ABAP 应用服务器上的几种方式
26 0
|
1月前
|
弹性计算 运维 安全
2024年阿里云一键搭建部署幻兽帕鲁服务器解决方案
幻兽帕鲁火了,为了确保畅快体验游戏,构建高效、稳定的游戏服务器至关重要。幸运的是,阿里云为您提供了快速、简便的服务器搭建解决方案,即使您对技术知识了解有限,也能在短短一分钟内轻松完成《幻兽帕鲁》游戏的联机服务器搭建!
1449 4
|
1天前
|
弹性计算 Java Linux
阿里云服务器搭建部署宝塔详细流程
该内容是一个阿里云服务器和域名的配置指南。首先,需注册阿里云账号并进行企业实名认证。接着,选购服务器如2核2G1兆的Linux系统,并购买域名。完成域名备案后,进行域名解析和ICP备案。然后,通过远程连接登录服务器,重置密码,安装宝塔面板。在安全组中开启宝塔面板随机生成的端口。最后,登录宝塔面板安装LNMP环境,配置数据库如MySQL和Redis,部署JDK、Tomcat,上传前端和后端项目以实现上线。
|
1天前
|
弹性计算 JavaScript Java
阿里云服务器搭建部署宝塔详细流程
以下是内容的摘要: 本文主要介绍了在阿里云上创建和配置服务器环境的步骤,包括注册阿里云账号、实名认证、购买和设置服务器、域名的获取与备案、以及使用宝塔面板安装和配置环境。首先,用户需要注册阿里云账号并进行实名认证,选择合适的服务器配置。接着,购买服务器后,要准备并备案域名,以便通过友好的网址访问网站。在服务器上安装宝塔面板,可以方便地管理和配置LAMP/LNMP/Tomcat/Node.js等应用环境。完成这些步骤后,用户还需要在宝塔面板中安装MySQL、Redis等数据库,部署Java或Vue项目,并配置相关端口。最后,将前端项目打包上传至服务器,并设置站点,即可实现网站的上线。
|
2天前
|
应用服务中间件 Linux 开发工具
如何在阿里云服务器快速搭建部署Nginx环境
以下是内容的摘要: 本文档主要介绍了在阿里云上购买和配置服务器的步骤,包括注册阿里云账号、实名认证、选择和购买云服务器、配置安全组、使用Xshell和Xftp进行远程连接和文件传输,以及安装和配置Nginx服务器的过程。在完成这些步骤后,你将能够在服务器上部署和运行自己的网站或应用。
|
3天前
|
NoSQL 关系型数据库 MySQL
阿里云服务器部署项目流程
本文主要讲解阿里云服务器的部署,如何选择配置等
|
6天前
|
Java 应用服务中间件 Linux
阿里云服务器部署多个tomcat
阿里云服务器部署多个tomcat