- 云原生
- 微服务
- 运维
- DevOps
【免费下载链接】meshery
Meshery, the cloud native manager
AWS VPC CNI 是 EKS(Amazon Elastic Kubernetes Service)集群默认使用的网络插件,负责为每个 Pod 分配 VPC 私有 IP 并打通节点与容器的网络路径。在 Meshery 中,AWS VPC CNI 被封装为一个独立的集成模型(Integration Model),使你可以在图形化画布上以“基础设施即代码(Infrastructure as Code)”的方式创建、配置和编排其核心 CRD(Custom Resource Definition),并借助组件关系自动建立与 AWS EC2 网络资源(子网、安全组)的可视化关联。读完本文,你将掌握 AWS VPC CNI 模型在 Meshery 中的完整结构——包括ENIConfig、PolicyEndpoint两个组件的配置 Schema、三条内建关系绑定规则以及组件可用的扩展能力,并能在自己的 Meshery 设计(Design)中直接复用这些定义。
模型概览:从 Artifact Hub 注册到 Meshery 的 Cloud Native Network 集成
本文的核心事实来源为 AWS VPC CNI 集成模型的索引文档,该文档定义了集成页面的全部元数据;与之配套的模型定义文件则存放在仓库的 models/aws-vpc-cni 目录下。
根据索引文档的 front matter,该模型的基本信息如下:
| 元数据字段 | 值 |
|---|---|
| 模型名称(displayName) | AWS VPC CNI |
| 集成分类(integrations-category) | Cloud Native Network(云原生网络) |
| 集成子分类(integrations-subcategory) | Networking Content Delivery |
| 注册方(registrant) | Artifact Hub |
| 组件数量(components-count) | 2 |
| 关系数量(relationship-count) | 3 |
从 model.json 可以看出,模型采用models.meshery.io/v1beta2Schema,注册源类型为artifacthub(即通过 Artifact Hub 注册表自动发现并纳入 Meshery 的模型目录),模型状态为enabled。仓库中实际保留了该模型的 5 个插件版本:1.22.2、1.22.3、1.22.4、1.23.0与1.23.2,每个版本目录下都带有独立的v1.0.0模型定义。组件的source_uri字段表明其定义源自 aws.github.io 托管的 eks-charts 仓库中的aws-vpc-cniHelm Chart,也就是说,Meshery 中的这些组件定义与 EKS 官方 Chart 中的 CRD 保持同源。
索引文档还记录了本集成的两种“叙事性”描述:
- How it works(工作机制):Collaborative Infrastructure as Design —— 协作式基础设施设计;
- How it works details:与同事同步共享同一设计(Design),协同管理基础设施。
这正是 Meshery 模型体系的通用工作方式:所有资源以可视化组件的形式出现在画布中,团队成员可以实时同步编辑同一份设计,再通过 Meshery 一键部署到目标集群。
需要说明的是,索引文档的 featureList 中记录的文案(“使用 Meshery 探索你的 App Mesh 配置”“在 EKS 集群上部署 Meshery 以进行 App Mesh 管理”)与 AWS VPC CNI 主题并不一致,从内容判断应属于从其他 AWS 集成页面复制时遗留的占位文本,阅读时以实际模型定义为准。
组件一:ENIConfig —— 自定义辅助网段的 ENI 配置
ENIConfig是 AWS VPC CNI 用于自定义辅助子网与安全组的 CRD:当集群默认子网无法满足 Pod 数量或网络隔离需求时,可以通过ENIConfig为节点指定独立的 VPC 子网与安全组,由 CNI 插件按该配置为 Pod 分配 ENI(Elastic Network Interface)。其定义见 ENIConfig.json:
- API 版本 / Kind:
crd.k8s.amazonaws.com/v1alpha1/ENIConfig - 作用域(isNamespaced):
false,属于集群级资源 - 描述:ENIConfig is the Schema for the eniconfigs API(eniconfigs API 的 Schema)
- Schema 特性:
x-kubernetes-preserve-unknown-fields: true,即允许保留未识别的扩展字段
其spec包含两个核心字段:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
spec.subnet | string | 是(required) | 指定该 ENIConfig 绑定的 VPC 子网 |
spec.securityGroups | array of string | 否 | 附加到 Pod ENI 上的安全组 ID 列表 |
一个典型的ENIConfig资源示例如下(字段来自上述 Schema):
apiVersion: crd.k8s.amazonaws.com/v1alpha1 kind: ENIConfig metadata: name: my-eni-config spec: subnet: subnet-0123456789abcdef0 securityGroups: - sg-0123456789abcdef0 - sg-abcdef0123456789在 Meshery 中,该组件会以ENI Config的显示名称出现在画布上,并继承模型的主题色(primaryColor#ff9900,即 AWS 品牌橙)与圆形图形(shapecircle)。值得注意的版本差异是:ENIConfig组件在1.22.2至1.23.2的全部版本中均存在,而PolicyEndpoint组件仅出现在1.22.2与1.22.3两个版本目录中,1.22.4及之后版本的定义里已不再包含该组件——这意味着策略端点相关的功能在较新的 CNI 版本模型中已从组件清单中移除,使用时应以目标版本目录下的实际组件为准。
组件二:PolicyEndpoint —— 网络策略解析后的端点清单
PolicyEndpoint是 AWS VPC CNI 的 Network Policy 实现(amazon-vpc-cni-k8s 的 network-policy-agent)使用的 CRD:它将 KubernetesNetworkPolicy规则解析为具体的目标端点信息,供 CNI 数据面执行。完整定义见 PolicyEndpoint.json:
- API 版本 / Kind:
networking.k8s.aws/v1alpha1/PolicyEndpoint - 作用域(isNamespaced):
true,属于命名空间级资源 - 描述:PolicyEndpoint is the Schema for the policyendpoints API
其spec结构相当完整,逐一说明如下:
spec.podSelector 与 spec.podSelectorEndpoints
podSelector:从策略资源中继承的标签选择器,支持matchLabels(键值对映射)与matchExpressions(表达式列表,包含key、operator、values,operator 合法值为In、NotIn、Exists、DoesNotExist),语义与 Kubernetes 标签选择器一致,多个条件之间为 AND 关系。podSelectorEndpoints:匹配该podSelector的 Pod 端点摘要列表,每个元素包含name、namespace、podIP、hostIP四个必填字段。
spec.ingress 与 spec.egress
入站与出站规则列表,每条规则是一个 EndpointInfo 对象,字段如下:
| 字段 | 类型 | 说明 |
|---|---|---|
cidr | string | 端点的网络地址(CIDR) |
domainName | string | 端点的 FQDN,仅用于 egress 规则(与 cidr 互斥),支持*.example.com形式的通配符 |
except | array of string | 从上述 CIDR 范围中排除的例外网段 |
ports | array of object | 端口列表,每个端口含port(数值端口,为空则匹配所有端口)、endPort(端口区间上限,需大于 port)、protocol(传输协议,默认TCP) |
spec.podIsolation 与 spec.policyRef
podIsolation:指定 Pod 需要在哪个流量方向上被隔离(Ingress / Egress),语义遵循NetworkPolicy的spec.PolicyTypes。policyRef:对 KubernetesNetworkPolicy资源的引用,包含name与namespace两个必填字段,用于把该端点清单关联回原始策略。
将上述字段组合起来,一个最小可用的PolicyEndpoint定义大致如下:
apiVersion: networking.k8s.aws/v1alpha1 kind: PolicyEndpoint metadata: name: example-policy-endpoint namespace: default spec: podSelector: matchLabels: app: web podIsolation: - Ingress ingress: - cidr: 10.0.0.0/8 ports: - port: 8080 protocol: TCP policyRef: name: allow-ingress namespace: default三条内建关系:从 PolicyEndpoint / ENIConfig 到 AWS 网络资源
索引文档声明该模型包含 3 条non-binding(非绑定)类型的edge(边)关系。在 Meshery 中,“非绑定边”表示一种松耦合的提示性关联:它并不强制组件归属,而是在画布上绘制关系连线,并可附带配置注入逻辑。三条关系的具体定义分别见三个关系文件:
关系一:PolicyEndpoint → SecurityGroup(firewall)
edge-binding-firewall-wqnjo.json 定义了一条subType: firewall的关系:
- 起点(from):
PolicyEndpoint(模型aws-vpccni-controller) - 终点(to):
SecurityGroup(模型aws-ec2-controller) - 配置注入(patch):将起点组件
configuration.spec.securityGroups的值,以replace策略写入终点组件,mutatedRef指向终点的displayName
也就是说,当你在画布中把一个 PolicyEndpoint 与一个 SecurityGroup 相连时,Meshery 会以替换策略把安全组配置同步到 PolicyEndpoint 的spec.securityGroups字段。
关系二:PolicyEndpoint → ENIConfig(network)
edge-binding-network-gidyk.json 定义了一条subType: network的关系,用于把策略端点与 ENI 配置关联:
- 起点(from):
PolicyEndpoint(模型aws-vpc-cni) - 终点(to):
ENIConfig(模型aws-vpc-cni) - 配置注入:将起点
configuration.spec.eni的值以replace策略写入终点displayName
关系三:ENIConfig → Subnet(network)
edge-binding-network-ubyob.json 定义了一条subType: network的关系:
- 起点(from):
ENIConfig(模型aws-vpc-cni) - 终点(to):
Subnet(模型aws-ec2-controller) - 配置注入:将起点
configuration.spec.subnet的值以replace策略写入终点displayName
三条关系共同勾勒出 AWS VPC CNI 在 Meshery 中的资源拓扑:PolicyEndpoint 关联安全组与 ENIConfig,ENIConfig 关联 VPC 子网。由于关系明确指向aws-ec2-controller模型下的SecurityGroup与Subnet,你可以在画布中跨模型把 CNI 的网络策略组件与 EC2 网络资源直接连线,Meshery 会据此建立可视化依赖并完成配置字段的自动填充。
组件扩展能力(Capabilities):不只是画布上的图标
两个组件的定义文件都内嵌了能力清单(capabilities,Schema 版本capability.meshery.io/v1alpha1),说明这些组件在 Meshery 中不仅仅是被渲染的图形,还具备可交互的操作能力:
| 能力名称 | kind / subType | 作用对象 | 作用 |
|---|---|---|---|
| Performance Test | action / perf-test | instance | 发起性能测试,Meshery 执行负载生成并采集、呈现指标 |
| Workload Configuration | mutate / config | declaration | 配置组件的工作负载专属设置 |
| Labels and Annotations Configuration | mutate / labels-and-annotations | declaration | 配置组件的标签与注解 |
| Relationships | view / relationship | declaration、instance | 查看组件关系 |
| Json Schema | view / definition | declaration、instance | 查看组件定义(即上文剖析的 CRD Schema) |
| Styling | mutate / style | declaration | 配置组件的视觉样式 |
| Change Shape | mutate / shape | declaration | 修改组件图形形状 |
| Compound Drag And Drop | interaction / compoundDnd | declaration | 在图形视图中把组件拖拽到父组件内 |
值得注意的是,Performance Test能力作用于instance(已部署实例),这意味着你可以对实际部署到集群中的 ENIConfig / PolicyEndpoint 实例发起性能测试,其余配置与查看类能力则作用于declaration(设计声明阶段)。
在 Meshery 中的落地实践:设计、协作与审计
结合索引文档声明的特性与模型定义,AWS VPC CNI 集成在实际使用中遵循如下路径:
- 加载模型:在 Meshery 的模型目录中启用
aws-vpc-cni(状态为enabled),即可在画布组件面板中检索到ENI Config与Policy Endpoint两个组件,以及它们的关系定义。 - 拖拽设计:把组件拖入设计画布,通过 Workload Configuration 能力打开配置表单,按上文 Schema 填写
subnet、securityGroups、podSelector、ingress/egress等字段。 - 建立关系:利用三条内建的非绑定边,把 PolicyEndpoint 连向 SecurityGroup / ENIConfig,把 ENIConfig 连向 Subnet;Meshery 将按
replace策略自动回填关联配置,并在图形视图中以连线呈现依赖。 - 协同与审计:设计与同事同步共享,所有人对同一份设计的修改实时可见;模型体系保留了全部配置变更的修订历史与审计轨迹,可随时回溯每次调整。
- 部署与验证:设计经审查后由 Meshery 下发到 EKS 集群;对已部署实例可借助 Json Schema 能力核对实际配置,或通过 Performance Test 能力验证网络插件支撑下的服务性能。
深入阅读指引
- 集成模型元数据与组件/关系总览:docs/content/en/extensions/models/aws-vpc-cni/index.md
- 模型级定义(注册源、分类、配色、版本):models/aws-vpc-cni/1.23.2/v1.0.0/model.json
ENIConfig组件完整 Schema:models/aws-vpc-cni/1.23.2/v1.0.0/components/ENIConfig.jsonPolicyEndpoint组件完整 Schema:models/aws-vpc-cni/1.22.2/v1.0.0/components/PolicyEndpoint.json- 关系定义(firewall / network 三条边):models/aws-vpc-cni/1.23.2/v1.0.0/relationships/edge-binding-firewall-wqnjo.json、edge-binding-network-gidyk.json、edge-binding-network-ubyob.json
本文所剖析的所有字段、关系与能力均直接取自仓库中的模型定义文件,你在 Meshery 画布上看到的每个组件配置项,都能在上述 JSON 中追根溯源。
- 云原生
- 微服务
- 运维
- DevOps
【免费下载链接】meshery
Meshery, the cloud native manager
相关推荐
Meshery AWS Lambda 集成模型全解析:组件 Schema、关系建模与可视化设计实践
Meshery AWS Lambda 集成模型全解析:组件 Schema、关系建模与可视化设计实践 导读 本文围绕 Meshery 中 AWS Lambda 集
云原生微服务运维DevOps使用 Meshery 可视化管理 AWS Route 53:aws-route53-controller 模型组件与关系详解
使用 Meshery 可视化管理 AWS Route 53:aws route53 controller 模型组件与关系详解 Meshery 以"可协作的基础设
云原生微服务运维DevOps用 Meshery 可视化编排 AWS CloudFront:aws-cloudfront-controller 模型组件与关系深度解析
用 Meshery 可视化编排 AWS CloudFront:aws cloudfront controller 模型组件与关系深度解析 本篇技术指南以 Mes
云原生微服务运维DevOps
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考