Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

AWS EKS 中的 VPC 到 CN2 通信

总结 瞻博网络云原生 Contrail 网络 (CN2) 版本 23.1 支持 AWS 虚拟私有云 (VPC) 网络、外部网络和 CN2 集群之间的通信。此功能仅适用于使用 CN2 作为 CNI 的 AWS EKS 环境。本文提供有关 CN2 如何实现此功能的信息。

了解 Kubernetes 和 VPC 网络

通常,您无法从 VPC 访问在 Amazon Elastic Kubernetes Service (EKS) 上运行的叠加网络中的 Kubernetes 工作负载。为了实现 AWS VPC 到 Kubernetes 的通信,您必须向 VPC 公开 Kubernetes 集群的主机网络。尽管某些公共云 Kubernetes 发行版提供了支持此功能的解决方案,但这些解决方案是为传统虚拟机工作负载而不是 Kubernetes 工作负载量身定制的。因此,这些解决方案具有以下缺点:

  • 您必须将 Pod IP 配置为节点接口上的辅助 IP 地址。这会对节点施加资源限制,从而减少可以支持的 Pod 数量。

  • 服务通过公共负载均衡器公开。每次创建服务时,负载均衡器都会开始一个实例化过程,这可能会导致服务公开之前的更多时间

CN2 版本 23.1 通过引入网关服务实例 (GSI) 解决了此问题。GSI 是 Amazon Web Service (AWS) 和 Kubernetes 资源的集合,它们协同工作,将 CN2 与 VPC 和外部网络无缝互连。应用 GSI 清单和 CN2 可促进 Amazon EKS 集群中的 Pod 和服务与同一 VPC 中的工作负载之间的通信。

先决条件

要启用 VPC 到 CN2 的通信,需要满足以下条件:

  • 用于 cRPD 的许可证。要购买许可证,请访问 https://www.juniper.net/us/en/products/routers/containerized-routing-protocol-daemon-crpd.html

    • 您必须将许可证作为命名空间中的 contrail-gsi 安装Secret到 EKS 集群中。

    • 密钥必须包含 的 crpd 许可证密钥下的 base64 编码版本的许可证。数据。

    • 以下是 Secret 引用许可证的示例:

  • 运行 CN2 版本 23.1 或更高版本的 EKS 集群

  • AWS 身份和访问管理 (IAM) 角色访问。有关如何配置服务账户以代入 IAM 角色的说明,请参阅以下链接: 将服务账户配置为代入 IAM 角色

  • EKS 集群中的节点必须具有以下标签: core.juniper.net/crpd-node: ""

    • 控制器将仅在具有以下键的节点上调度 cRPD 容器: core.juniper.net/crpd-node。将此标签添加到节点后,任何 CN2 控制器(包括 vRouter)都不会在此节点上运行。这可确保为 cRPD 容器保留适当数量的节点。

网关服务实例组件

以下是网关服务实例 (GSI) 清单的示例:

请注意, awsRegioniamRoleARNvpcID 字段是用户定义的。该 iamRoleARN 值是您作为此功能先决条件的一部分创建的 IAM 角色的 Amazon 资源名称 (ARN)。

应用 GSI 清单会创建一个自定义控制器,用于创建和管理以下内容:

AWS 资源:

  • 中转网关:中转网关是可以互连 VPC 的网络中转枢纽。一个中转网关可以有 Attachments 一个或多个 VPC。

  • 连接附件:中转网关连接附件在中转网关与 VPC 中运行的第三方虚拟设备 (JCNR) 之间建立连接。创建连接附件后,可以在连接附件上创建一个或多个通用路由封装 (GRE) 隧道或中转网关连接对等方,以连接中转网关和第三方设备。中转网关连接对等方由 GRE 隧道上的两个 BGP 对等会话组成,它们提供路由冗余。安装中转网关资源后,CN2 会自动执行此过程。

  • VPC 附件:VPC Attachment 连接到中转网关。当您将 VPC 附加到中转网关时,资源和路由规则将应用于该网关。

Kubernetes 资源:

  • 连接的对等方:中转网关连接对等方是一种 GRE 隧道,可促进中转网关与第三方设备或 JCNR 之间的通信。

CN2 GSI 资源:

  • 瞻博网络云原生路由器 (JCNR):JCNR 是 CN2 的扩展,充当 EC2 实例和其他 AWS 资源与运行 CN2 的 EKS 集群之间的网关。

JCNR 执行以下操作:

  • 通过多协议 BGP (MP-BGP) 连接到 CN2 控制节点,并在数据平面中使用 MPLSoUDP

  • 在 CN2 EKS 节点之间提供主动/主动 L3 和 L4 负载平衡

您可以将 JCNR 及其连接的对等方扩展到最多四个实例。在这种情况下,中转网关可在 JCNR 之间提供主动/主动 L3 和 L4 负载平衡。作为 JCNR 功能的示例,如果在要公开的 VN 上添加 label ,JCNR 会将该 VN 的子网播发到中转网关。VN 子网与中转网关之间的下一跃点路由将添加到 VPC 的路由表中。因此,VN 在 VPC 的网络中路由,并通过 VPC 内的工作负载进行访问。此功能类似于传统的物理 SDN 网关,其中中转网关和 JCNR 充当 EKS 集群与 AWS 环境其余部分之间的物理网关,而不存在 的缺点 hostNetwork

下图描述了典型 Amazon EKS 集群中的连接。请注意,CN2 自动生成 VPC 路由表。

图 1:EKS 集群流量 EKS Cluster Traffic Flow

自定义资源实现

CN2 通过以下自定义资源 (CR) 实现此功能:

  • TransitGateway:表示 AWS TransitGateway 资源。

  • Route:表示 VPC 路由表中的条目。A Route 是内部创建的对象,不需要用户输入。

  • ConnectedPeer:表示与中转网关建立 BGP 会话的设备(CN2 中的 JCNR)。A ConnectedPeer 是内部创建的对象,不需要用户输入。

下面是清单的示例 TransitGateway

使用以下命令了解有关规范的详细信息 TransitGateway

自定义控制器实现

GSI 是通过使用带有客户端/服务器插件的自定义 Kubernetes 控制器来实现的。服务器端自定义控制器在 CN2 控制平面节点上运行。客户端与 JCNR 一起运行。应用 TransitGateway 和 GSI 对象时会自动配置这些控制器。

故障 排除

本节提供有关排查各种 ConnectedPeer 连接问题、自定义控制器问题和工作负载可达性问题的信息。

对于自定义控制器问题:

  • 应用 GSI 清单后,请确保与 GSI 清单关联的所有自定义控制器 Pod(服务器、客户端)都处于活动状态。

    CLI 输出应在常规 EKS 部署中显示三个活动控制器 Pod。如果您没有收到正确的 CLI 输出,请使用以下命令验证是否已安装 GSI 插件。

    检查容器的 contrail-k8s-deployer 日志。过滤 GSI 插件协调器的结果并查找任何错误。

  • 确保自定义控制器可以向所需的 AWS 资源发出创建、读取、更新、删除 (CRUD) 请求。

    • 检查 Pod 的 contrail-gsi 日志;三个 Pod 中的一个应处于活动状态,并将输出日志消息。

    • 验证活动 Pod 的日志不包含有关无法对 AWS 进行 API 调用的错误。如果您确实看到这些错误,请确保已正确配置授予 的 contrail-gsi-serviceaccount IAM 角色(请参阅本主题的 先决条件 部分)。

对于 TransitGateway 问题:

  • 安装 TransitGateways后,请确保其状态从“挂起”更改为“可用”。

  • ConnectedPeer确保 /cRPD Pod 处于活动状态。

    如果输出中未显示任何 Pod,请确保有一个节点可用于 ConnectedPeer 调度 Pod。有效的容器包含以下标签: core.juniper.net/crpd-node: ""

对于 ConnectedPeer 问题:

  • ConnectedPeer Pod 处于活动状态后,请确保 cRPD 可以与 CN2 控制节点和 AWS 的中转网关建立 BGP 会话。在 cRPD 的 CLI 中运行以下命令:

    此过程可能会由于以下原因而失败:

    • 群集中未安装有效的活动许可证

    • BGP 的 IP 连接不正确

对于工作可访问性问题:

  • 如果您无法从 EC2 实例访问 EKS 集群:

    • 确保工作负载的 VN 已向 .TransitGateway

    • 确保从公开的 VN 到 VPC 的路由显示在 VPC 的路由表中。

    • 确保 EC2 实例具有配置为访问 VN 的 CIDR 的安全组。

      • 自定义控制器会自动创建一个安全组 (gsi-sg),该安全组允许访问向中转网关公开的所有路由。