在 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) | 关键配置 |
|---|---|---|---|
| VPC | ec2.services.k8s.aws/v1alpha1VPC | tutorial-vpc | CIDR10.0.0.0/16,启用 DNS Support 与 DNS Hostnames |
| 公网子网 | Subnet | tutorial-public-subnet1 | CIDR10.0.0.0/20,mapPublicIPOnLaunch: true,可用区 us-east-1a |
| 私网子网 | Subnet | tutorial-private-subnet1 | CIDR10.0.128.0/20,可用区 us-east-1a |
| 互联网网关 | InternetGateway | tutorial-igw | 绑定 tutorial-vpc |
| 弹性 IP | ElasticIPAddress | tutorial-eip1 | 带 tagname=eip-tutorial |
| NAT 网关 | NATGateway | tutorial-natgateway1 | 挂在公网子网,关联上述 EIP |
| 公网路由表 | RouteTable | tutorial-public-route-table | 默认路由经 IGW 出公网(0.0.0.0/0) |
| 私网路由表 | RouteTable | tutorial-private-route-table-az1 | 默认路由经 NAT 网关出公网 |
| 安全组 | SecurityGroup | tutorial-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 资源。其前置要求包括:
- 集群连接:确保你的 Kubernetes 集群已经连接到 Meshery;
- AWS 凭据 Secret:将 AWS access key 与 secret access key 做 Base64 编码后存入 Kubernetes Secret;
- 环境变量注入:控制器设计已预配置为从该 Secret 读取凭据作为环境变量,只需填入编码后的密钥;
- AWS 区域:在控制器 Pod 配置中指定正确的区域(该设计使用
us-east-1,与本文 VPC 设计保持一致); - 专用命名空间:控制器资源部署在
ack-system命名空间内。
完成控制器部署后,返回 Catalog 克隆VPC-WORKFLOW-DESIGN,即可进行下一步部署。
组件拆解:design.yml 中的九类 AWS 资源
该设计的真实可执行定义是 JSON 格式的 design.yml,其schemaVersion为designs.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 DESIGN、DESIGN LEGEND的 TextBox; - 步骤说明区:带编号 1/2/3 的 Circle 节点,对应三步操作(部署控制器 → 点击 Actions 部署 → 部署 EC2 实例);
- 分区框:名为
Public Subnet、Private Subnet、Routes、virtual private network的 Rectangle,用于视觉上圈定资源归属; - 角色图例:
Internet、Users图片注解,以及 Bastion Host、Private Instance 两个 EC2 图标注解; - 图例说明:"The green arrows are annotations that indicate the traffic flow between the AWS resources."
从源码结构可以推断,这些 annotation 关系(如Internet -> IGW、Users -> Bastion Host、Bastion Host -> Private Instance)用于在画布上绘制绿色箭头,表达流量走向,帮助使用者直观理解网络的访问路径,这是 Meshery 设计文件用注解表达架构语义的典型做法。
部署步骤:从 Catalog 到 AWS 控制台
方式一:Meshery UI(推荐)
- 打开 Meshery UI,进入Catalog页面,找到
VPC-WORKFLOW-DESIGN(也可按类型deployment筛选); - 点击Clone/Import,将设计导入到My Designs;
- 在Designer中打开设计画布,核对组件与注解说明;
- 点击右上角Actions按钮,选择Deploy,将设计下发到已连接且装有 EC2 Controller 的集群;
- 等待 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子命令(如list、view、deploy、delete)管理并部署该设计。导入过程中,Meshery 会对设计文件进行解析、校验与格式转换(参见 导入与导出设计指南),将组件与注册表中的kind、apiVersion匹配,并把非 Meshery 格式转换为 Meshery Design 后存储。
部署后的验证与后续衔接
部署完成后,可按以下顺序验证网络是否按设计生效:
- 在 AWS 控制台的VPC Dashboard中确认 VPC
vpc-tutorial(CIDR10.0.0.0/16)及两个子网存在,且分别关联了正确的路由表; - 检查公网路由表是否包含指向 IGW 的
0.0.0.0/0路由,私网路由表是否包含指向 NAT 网关的0.0.0.0/0路由; - 确认 NAT 网关状态为
Available,且与 EIPtutorial-eip1正确绑定; - 确认安全组放行 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),仅供参考