在 Meshery 中一键部署 AWS VPC 网络工作流:基于 aws-ec2-controller 的 VPC-WORKFLOW-DESIGN 实战指南
2026/9/18 13:49:48 网站建设 项目流程

在 Meshery 中一键部署 AWS VPC 网络工作流:基于 aws-ec2-controller 的 VPC-WORKFLOW-DESIGN 实战指南

【免费下载链接】mesheryMeshery, the cloud native manager项目地址: https://gitcode.com/GitHub_Trending/me/meshery

本指南围绕 Meshery Catalog 中的VPC-WORKFLOW-DESIGN(版本 0.0.11)展开,讲解如何借助 Meshery 的可视化设计与部署能力,在 Kubernetes 集群中通过 ACK(AWS Controllers for Kubernetes)EC2 控制器编排创建一套完整的 AWS 网络环境(VPC、公网/私网子网、IGW、NAT 网关、EIP、安全组与路由表),并为后续部署 EC2 实例(Bastion Host 与 Private Instance)铺平网络基础。读完本文,你将掌握该设计的组件构成、底层引用关系(design.yml 中的Ref引用与 annotation 标注)、前置条件(EC2 Controller 设计)以及通过 Meshery UI 与mesheryctl部署的完整操作流程。

设计概览:一次部署一套 EC2 就绪的网络基础设施

VPC-WORKFLOW-DESIGN是 Meshery Catalog 中一个类型为deployment的官方可部署设计,其目录入口位于 docs/catalog/deployment/2f7597bd-9713-461e-b64f-c571415d2a86.md,实际的设计清单(design.yml)与包元数据(artifacthub-pkg.yml)位于 docs/data/catalog/2f7597bd-9713-461e-b64f-c571415d2a86/0.0.11/。

按照设计文档的原始说明(patternInfo),该设计包含创建 VPC 及其 EC2 实例所需网络组件的全部必要资源:

This design contains all the necessary resources required to create the VPC and other networking components for EC2 instances. The resources that will be deployed include VPC, Private and Public Subnet, Internet gateway, NAT gateway, Elastic IP, Security Group, Route tables.

部署完成后你将得到以下 AWS 网络资源:

资源类型Kubernetes 组件(kind)实例名称(displayName)关键配置
VPCec2.services.k8s.aws/v1alpha1VPCtutorial-vpcCIDR10.0.0.0/16,启用 DNS Support 与 DNS Hostnames
公网子网Subnettutorial-public-subnet1CIDR10.0.0.0/20mapPublicIPOnLaunch: true,可用区 us-east-1a
私网子网Subnettutorial-private-subnet1CIDR10.0.128.0/20,可用区 us-east-1a
互联网网关InternetGatewaytutorial-igw绑定 tutorial-vpc
弹性 IPElasticIPAddresstutorial-eip1带 tagname=eip-tutorial
NAT 网关NATGatewaytutorial-natgateway1挂在公网子网,关联上述 EIP
公网路由表RouteTabletutorial-public-route-table默认路由经 IGW 出公网(0.0.0.0/0
私网路由表RouteTabletutorial-private-route-table-az1默认路由经 NAT 网关出公网
安全组SecurityGrouptutorial-security-group放行 22 端口(SSH)入站

前置条件:先部署 EC2 Controller 设计

本设计有一个硬性前置依赖:EC2 Controller 必须已部署在目标 Kubernetes 集群上。这一要求同时体现在两个地方:

  • 目录文档的patternCaveats字段:Ensure the EC2 Controller has been deployed on your Kubernetes Cluster.
  • 设计画布中的文字注释(annotation TextBox):"To deploy this design, you have to ensure that the [EC2 controller design] has been deployed first. Clone the Controller design from the catalog and deploy it first."

EC2 Controller 设计对应的目录条目是 docs/catalog/deployment/8f7e1431-3885-4ebf-9ef7-d2ec64bd4eb5.md(EC2-CONTROLLER-DESIGN)。它的作用是在集群中安装 ACK EC2 控制器,包括 CRD、RBAC 权限和控制器 Pod,从而让 Kubernetes 能直接管理 EC2 资源。其前置要求包括:

  1. 集群连接:确保你的 Kubernetes 集群已经连接到 Meshery;
  2. AWS 凭据 Secret:将 AWS access key 与 secret access key 做 Base64 编码后存入 Kubernetes Secret;
  3. 环境变量注入:控制器设计已预配置为从该 Secret 读取凭据作为环境变量,只需填入编码后的密钥;
  4. AWS 区域:在控制器 Pod 配置中指定正确的区域(该设计使用us-east-1,与本文 VPC 设计保持一致);
  5. 专用命名空间:控制器资源部署在ack-system命名空间内。

完成控制器部署后,返回 Catalog 克隆VPC-WORKFLOW-DESIGN,即可进行下一步部署。

组件拆解:design.yml 中的九类 AWS 资源

该设计的真实可执行定义是 JSON 格式的 design.yml,其schemaVersiondesigns.meshery.io/v1beta1。所有可部署组件均来自aws-ec2-controller模型(版本 v1.2.28),CRD 组为ec2.services.k8s.aws/v1alpha1,可证明它们是 ACK 托管资源。下面逐一解析各组件及其引用关系。

VPC(tutorial-vpc)

VPC 是整个网络的地基,配置如下:

"configuration": { "spec": { "tags": [{"key": "name", "value": "vpc-tutorial"}], "cidrBlocks": ["10.0.0.0/16"], "enableDNSSupport": true, "enableDNSHostnames": true }, "metadata": {"name": "tutorial-vpc"} }
  • cidrBlocks:VPC 网段,10.0.0.0/16提供了 65536 个 IP,足以划分两个/20子网并预留扩展空间;
  • enableDNSSupport/enableDNSHostnames:启用 DNS 解析与主机名分配,是后续 EC2 实例通过 DNS 通信的基础。

公网与私网子网

两个子网都通过vpcRef引用tutorial-vpc,并通过routeTableRefs绑定各自的路由表,体现了设计内部的组件引用关系:

// tutorial-public-subnet1 "spec": { "vpcRef": {"from": {"name": "tutorial-vpc"}}, "cidrBlock": "10.0.0.0/20", "routeTableRefs": [{"from": {"name": "tutorial-public-route-table"}}], "availabilityZone": "us-east-1a", "mapPublicIPOnLaunch": true } // tutorial-private-subnet1 "spec": { "vpcRef": {"from": {"name": "tutorial-vpc"}}, "cidrBlock": "10.0.128.0/20", "routeTableRefs": [{"from": {"name": "tutorial-private-route-table-az1"}}], "availabilityZone": "us-east-1a" }

关键差异:公网子网设置了mapPublicIPOnLaunch: true(实例启动自动获得公网 IP),私网子网则没有,这正是公网/私网分层的实现方式。

互联网网关与弹性 IP

IGW 通过vpcRef绑定 VPC;EIP 通过 tag 标记用途:

// tutorial-igw "spec": {"tags": [], "vpcRef": {"from": {"name": "tutorial-vpc"}}} // tutorial-eip1 "spec": {"tags": [{"key": "name", "value": "eip-tutorial"}]}

NAT 网关

NAT 网关是私网子网访问公网的关键:它位于公网子网(subnetRef),并复用 EIP(allocationRef):

"spec": { "subnetRef": {"from": {"name": "tutorial-public-subnet1"}}, "allocationRef": {"from": {"name": "tutorial-eip1"}} }

公网与私网路由表

两条路由表都引用 VPC,并在routes中定义默认路由,分别指向 IGW 与 NAT 网关:

// 公网路由表:默认路由经 IGW "routes": [{"gatewayRef": {"from": {"name": "tutorial-igw"}}, "destinationCIDRBlock": "0.0.0.0/0"}] // 私网路由表:默认路由经 NAT 网关 "routes": [{"natGatewayRef": {"from": {"name": "tutorial-natgateway1"}}, "destinationCIDRBlock": "0.0.0.0/0"}]

由此形成完整的数据通路:公网流量Internet -> IGW -> Public Subnet,私网出站流量Private Subnet -> NAT Gateway -> IGW -> Internet,而私网入站则依赖后续设计中部署的 Bastion Host。

安全组

安全组同样通过vpcRef归属 VPC,并放行 SSH 入站:

"spec": { "name": "tutorial-sg", "vpcRef": {"from": {"name": "tutorial-vpc"}}, "description": "ack security group", "ingressRules": [{ "toPort": 22, "fromPort": 22, "ipRanges": [{"cidrIP": "0.0.0.0/0", "description": "ingress"}], "ipProtocol": "tcp" }] }

注意:0.0.0.0/0表示对全网开放 22 端口,生产环境建议将其收敛为运维跳板机的固定 IP 段。

画布设计逻辑:注解组件如何辅助部署

设计文件中除了可部署的 AWS 资源外,还包含大量 Meshery 注解(annotation)组件与 annotation 关系(edge,subType: annotation),它们仅用于画布展示与说明,不参与实际资源下发。从 design.yml 可以清晰还原画布的分区布局:

  • 标题区:标注AWS VPC WORKFLOW DESIGNDESIGN LEGEND的 TextBox;
  • 步骤说明区:带编号 1/2/3 的 Circle 节点,对应三步操作(部署控制器 → 点击 Actions 部署 → 部署 EC2 实例);
  • 分区框:名为Public SubnetPrivate SubnetRoutesvirtual private network的 Rectangle,用于视觉上圈定资源归属;
  • 角色图例InternetUsers图片注解,以及 Bastion Host、Private Instance 两个 EC2 图标注解;
  • 图例说明:"The green arrows are annotations that indicate the traffic flow between the AWS resources."

从源码结构可以推断,这些 annotation 关系(如Internet -> IGWUsers -> Bastion HostBastion Host -> Private Instance)用于在画布上绘制绿色箭头,表达流量走向,帮助使用者直观理解网络的访问路径,这是 Meshery 设计文件用注解表达架构语义的典型做法。

部署步骤:从 Catalog 到 AWS 控制台

方式一:Meshery UI(推荐)

  1. 打开 Meshery UI,进入Catalog页面,找到VPC-WORKFLOW-DESIGN(也可按类型deployment筛选);
  2. 点击Clone/Import,将设计导入到My Designs
  3. Designer中打开设计画布,核对组件与注解说明;
  4. 点击右上角Actions按钮,选择Deploy,将设计下发到已连接且装有 EC2 Controller 的集群;
  5. 等待 ACK 控制器调和完成,导航到AWS Management Console查看已部署的 VPC、子网、IGW、NAT 网关、EIP、安全组与路由表资源。

方式二:mesheryctl CLI

Meshery CLI 提供等价的导入与部署能力。导入设计:

mesheryctl design import --file <PATH/URL> --source-type <TYPE>

例如,将本设计的 design.yml 导入:

mesheryctl design import -f docs/data/catalog/2f7597bd-9713-461e-b64f-c571415d2a86/0.0.11/design.yml -s manifest

导入成功后,可通过mesheryctl design子命令(如listviewdeploydelete)管理并部署该设计。导入过程中,Meshery 会对设计文件进行解析、校验与格式转换(参见 导入与导出设计指南),将组件与注册表中的kindapiVersion匹配,并把非 Meshery 格式转换为 Meshery Design 后存储。

部署后的验证与后续衔接

部署完成后,可按以下顺序验证网络是否按设计生效:

  1. 在 AWS 控制台的VPC Dashboard中确认 VPCvpc-tutorial(CIDR10.0.0.0/16)及两个子网存在,且分别关联了正确的路由表;
  2. 检查公网路由表是否包含指向 IGW 的0.0.0.0/0路由,私网路由表是否包含指向 NAT 网关的0.0.0.0/0路由;
  3. 确认 NAT 网关状态为Available,且与 EIPtutorial-eip1正确绑定;
  4. 确认安全组放行 22 端口,后续实例可以 SSH 接入。

本设计是完整 EC2 工作流的第一步。设计画布中的注解明确提示:后续还需要从 Catalog 部署两个 EC2 实例——Bastion Host(公网子网,作为 SSH 跳板)与Private Instance(私网子网,无公网 IP)。由于本设计已在画布中预留了这两个实例的注解占位,网络资源就绪后,直接导入实例部署设计并执行 Actions > Deploy 即可完成整条链路。

注意事项与局限

  • 硬性前置:必须在集群中先完成 EC2 Controller 设计 的部署,且 AWS 凭据、区域(本设计为us-east-1)需配置正确,否则 ACK 无法调和任何资源;
  • 单可用区设计:本设计仅使用us-east-1a一个可用区,属于低成本教学/演示形态,生产环境应扩展为多可用区以保障高可用;
  • 安全组策略:22 端口对0.0.0.0/0开放仅适合演示,请根据实际安全策略收紧来源网段;
  • 云资源成本:NAT 网关与 EIP 均会产生 AWS 费用,演练完毕后建议及时删除设计资源,避免持续计费;
  • 区域一致性:VPC 设计中指定的区域必须与 EC2 Controller 中配置的区域一致。

延伸阅读

  • 设计元数据与下载入口:docs/catalog/deployment/2f7597bd-9713-461e-b64f-c571415d2a86.md
  • 设计清单(含全部组件与引用关系):docs/data/catalog/2f7597bd-9713-461e-b64f-c571415d2a86/0.0.11/design.yml
  • 包元数据(ArtifactHub 格式):docs/data/catalog/2f7597bd-9713-461e-b64f-c571415d2a86/0.0.11/artifacthub-pkg.yml
  • 前置控制器设计:docs/catalog/deployment/8f7e1431-3885-4ebf-9ef7-d2ec64bd4eb5.md
  • 设计的导入/导出方法:docs/content/en/guides/configuration-management/import-export-designs.md
  • 设计(Designs)概念文档:docs/content/en/concepts/

【免费下载链接】mesheryMeshery, the cloud native manager项目地址: https://gitcode.com/GitHub_Trending/me/meshery

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询