一键部署NAT功能的ECS集群

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
公网NAT网关,每月750个小时 15CU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 本文介绍一键部署具有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中提问。

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7天前
|
监控 应用服务中间件 网络安全
Nightingale——部署客户端采集其他服务器状态信息
Nightingale——部署客户端采集其他服务器状态信息
17 1
Nightingale——部署客户端采集其他服务器状态信息
|
3天前
|
SQL 存储 缓存
什么?部署ClickHouse的服务器CPU利用率100%了?
什么?部署ClickHouse的服务器CPU利用率100%了?
|
5天前
|
弹性计算 JSON 开发工具
"一键玩转阿里云ECS!Python大神揭秘:如何自动化创建镜像并跨地域复制,让你的云资源部署秒变高效达人!"
【8月更文挑战第14天】本文介绍如何使用Python与阿里云SDK自动化管理ECS镜像,包括创建镜像及跨地域复制,以优化云资源部署。首先安装`aliyun-python-sdk-ecs`并配置阿里云凭证。接着,通过Python脚本实现镜像创建与复制功能,简化日常运维工作并增强灾难恢复能力。注意权限及费用问题。
18 2
|
1月前
|
弹性计算 数据库 数据安全/隐私保护
阿里云服务器真香宝典之Calibre-Web个人图书馆云端部署
在阿里云ECS(2核2G,SSD40G,3M带宽)上,安装Ubuntu 22.04,然后配置Docker和FTP。创建 `/config` 和 `/books` 目录,设置权限,开放端口,拉取 `johngong/calibre-web` Docker镜像,以`calibre-web`命名容器,映射端口,配置环境变量,挂载卷,确保重启策略。本地安装Calibre客户端,上传metadata.db到服务器。在Calibre-web服务端配置数据库,启用上传权限,修改管理员账户信息。完成配置后,开始上传电子书并进行阅读。
187 2
阿里云服务器真香宝典之Calibre-Web个人图书馆云端部署
|
20天前
|
弹性计算 小程序 应用服务中间件
云服务器 ECS产品使用问题之怎么一键部署幻兽帕鲁服务器
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
20天前
|
关系型数据库 Linux 数据库
如何在Linux云服务器上通过Docker Compose部署安装Halo,搭建个人博客网站?
本文指导用户如何在Linux服务器上使用Docker Compose部署Halo博客系统。首先确保拥有Linux服务器并安装Docker及Docker Compose。接着创建文件夹(例如`~/halo`),用于存放所有Halo相关数据。可以选择不同的Halo Docker镜像源,推荐使用具体版本而非`latest`标签以避免误操作。示例中提供了三种`docker-compose.yaml`配置方法:Halo+PostgreSQL、Halo+MySQL以及使用默认的H2数据库。每种配置都包括网络设置、健康检查和环境变量。
51 1
|
20天前
|
弹性计算 数据安全/隐私保护 云计算
云服务器 ECS产品使用问题之如何进行计算巢一键部署
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
24天前
|
关系型数据库 Java 分布式数据库
PolarDB产品使用问题之部署到服务器上的Java应用(以jar包形式运行)无法连接,如何解决
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
20天前
|
弹性计算 云计算 Windows
云服务器 ECS产品使用问题之如何查看部署是否生效
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
20天前
|
弹性计算 数据安全/隐私保护 虚拟化
云服务器 ECS产品使用问题之服务器上传如何在部署的机器上进行
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。