Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 

Contrail 浮动 IP

 

在相同或不同的命名空间内的两个箱之间讨论和测试通信,但到’目前为止,它已在同一个群集中。如何与群集外部的设备通信?

您可能已经知道,在传统(OpenStack) Contrail 环境中,叠加实体(通常是虚拟机)访问互联网有多种方式。最常用的三种方法是:

  • 浮动 IP

  • 结构 SNAT

  • 逻辑路由器

首选 Kubernetes 解决方案是通过以下方式公开任何服务 serviceIngress对象,您可以’在第3章中阅读。在 Contrail Kubernetes 环境中,浮动 IP 用于服务和入口实施中,使其向群集外部的’内容公开。本章稍后将讨论这两个对象中的每一个。但首先,让’我们回顾一下浮动 IP 基础,并了解它如何与 Kubernetes 协同工作。

Note

T4000 路由器不支持 fabric SNATlogical router叠加工作负载(VM 和 pod)用于到达互联网,但不可能从相反方向初始化通信。但是 floatingIP 支持从两个方向–初始化的流量您可以将其配置为支持入口流量、外出流量或两者兼有,默认值为双向。这本书仅关注 floatingIP。有关结构 SNAT 和逻辑路由器的详细信息,请参阅 Contrail 文档:https://www.juniper.net/ documentation/en_US/contrail5.0/information-products/pathway-pages/contrail-feature-guide-pwp.html.

浮动 IP 和浮动 IP 池

T4000 路由器不支持 floatingIP 或 FIP 对于短期而言是一种传统概念,Contrail 自其早期版本以来受到支持。本质上,’它是将虚拟机 IP (通常是专用 ip 地址)映射到可从群集外部到达的公共 ip (此上下文中的浮动 ip)的一种 OpenStack 概念。在内部,由 NAT 实施一对一映射。每当 vRouter 从群集外部接收发往浮动 IP 的数据包时,它都会将其转换为 VM’的专用 ip,并将数据包转发至 vm。同样,它将按相反的方向进行转换。最终,VM 和 Internet 主机可以相互对话,并且两者都可以发起通信。

Note

VRouter 是一种 Contrail 转发平面,驻留在处理工作负载流量的每个计算节点中。

Figure 1显示了浮动 IP 的基本工作流。

Figure 1: 浮动 IP 工作流
浮动 IP 工作流

以下是有关要牢记的浮动 IP 的一些要点:

  • 与虚拟机’相关联的浮动 IP port或 VMI (虚拟机接口)。

  • 浮动 IP 从 FIP pool.

  • 浮动 IP 池基于虚拟网络创建(FIP-VN) 中减去衰减或链路损耗 (LL) 之后可用的功率。

  • 通过设置匹配,FIP-VN 将在群集外部提供 route-target (RT)网关路由器’VRF 表的属性。

  • 当网关路由器在 RT 中看到与其路由导入策略的匹配项时,它会将路由加载到其 VRF 表中。连接到 VRF 表的所有远程客户端都将能够与该浮动 IP 通信。

Contrail Kubernetes 环境中没有关于浮动 IP 概念和角色的新增内容。但在 Kubernetes 扩展了浮动 IP 的使用 serviceingress对象实施,它对访问 Kubernetes 起着重要的作用 serviceingress外置. 您可查看本章节的稍后部分了解更多详细信息。

创建 FIP 池

让’我们以三步的过程创建一个浮动 IP 池:

  1. 创建公共浮动 IP-VN。

  2. 为虚拟网络设置 RT (路由目标),使其可被通告并导入网关路由器’的 VRF 表中。

  3. 基于公共浮动 IP 虚拟网络创建浮动 IP 池。

同样,这里没有什么新内容。不 Kubernetes 的其他 Contrail 环境中也需要相同的步骤。但是,正如’您在前几节中了解的那样,借助 Contrail Kubernetes 集成,浮动 IP 虚拟网络现在可以 Kubernetes 样式中创建。

创建名为 vn 的公共浮点 IP 虚拟网络-ns-默认值

现在设置路由目标。

如果您需要通过网关路由器从互联网访问的浮动 IP,您’需要为在网关路由器’VRF 表中导入的虚拟网络前缀设置路由目标(见Figure 2)。只要需要互联网接入,就必须执行此步骤。

用于设置 RT 的 UI 导航路径为:Contrail 命令 > 主菜单 > 叠加 > 虚拟网络 > k8s-vn-ns-default-pod-网络 > 编辑 > 路由、桥接和策略。

Figure 2: Contrail 命令:设置 RT
Contrail 命令:设置 RT

现在,’让我们基于公共虚拟网络创建一个浮动 IP 池。

这是最后一步。从 Contrail 命令 UI 中,基于公共虚拟网络创建一个浮动 IP 池。此设置的 UI 导航路径如Figure 3所示:Contrail 命令 > 主菜单 > 叠加 > 浮动 IP > Create。

Tip

Contrail 用户界面还允许您在虚拟网络高级选项中设置外部标志,以便自动创建名为public的浮动 IP 池。

Figure 3: Contrail 命令:创建浮动 IP 池
Contrail 命令:创建浮动 IP 池

浮动 IP 池作用域

在 Contrail Kubernetes 环境中引用浮动 IP 池的方式不同,并且相应的池范围也将有所不同。具有降序优先级的三个可能的级别为:

  • 特定对象

  • 命名空间级别

  • 全局级别

特定对象

这是最特定的范围级别。对象特定的浮动 IP 池仅将自身绑定到您指定的对象,它不会影响同一命名空间或群集中的任何其他对象。例如,您可以指定一个服务对象 web从浮动 IP 池中获取浮动 IP pool1、服务对象 dns从另一个浮动 IP 池获取浮动 IP pool2等. 这为对象–提供了对浮动 IP 的分配位置的最细粒度控制,您需要在 YAML 文件中为每个对象明确指定此开销。

命名空间级别

在多租户环境中,每个命名空间都将与一个租户相关联,并且每个租户都将具有专用的浮动 IP 池。在这种情况下,最好具有在 NS 级别定义浮动 IP 池的选项,以便在该命名空间中创建的所有对象都将从该池中获取浮点 IP 分配。定义了命名空间级别池(例如, pool-ns-default),无需再在每个对象’的 YAML 文件中指定浮动 IP 池名称。您仍然可以提供不同的池名称,例如 my-webservice-pool对象中 webservice. 在这种情况下,对象 webservice 将从 my-webservice-pool而不是从命名空间级别池 pool-ns-default,因为前者更具体一些。

全局级别

全局级别池的范围将是整个群集。任何命名空间中的对象均可使用全局浮动 IP 池。

您可以结合这三种方法来利用其组合的灵活性。下面’是一个切实可行的示例:

  • 定义全局池 pool-global-default,因此命名空间中未定义命名空间级或 ject 级池的任何对象都将从该池获取一个浮动 IP。

  • 对于 ns dev,请定义一个浮动 IP 池 pool-dev,因此在 ns 中创建的所有对象 dev默认情况下将从 pool-dev.

  • 对于 ns sales,请定义一个浮动 IP 池 pool-sales,因此在 ns 中创建的所有对象 sales默认情况下将从 pool-sales.

  • 对于 ns test-only,不要定义任何命名空间级池,因此在其中创建的默认对象将从 pool-global-default.

  • 当服务 dev-webservicens 开发环境中的浮动 IP 需要 pool-sales而不是 pool-dev,指定 pool-salesin dev-webservice对象 YAML 文件将实现此目标。

Note

只需记住经验–最明确的领域的规则。

对象浮动 IP 池

让’我们先来了解特定于对象的浮动 IP 池:

在此示例中,服务 service-web-lb-pool-public-1将从池中获取浮动 IP pool-public-1,基于虚拟网络创建 vn-public-1在当前项目下 k8s-ns-user-1. 相应的 Kubernetes 命名空间为 ns-user-1. 由于仅为此特定对象分配对象级浮动 IP 池,因此使用此方法时,需要为每个新对象显式分配一个浮动 IP 池。

NS 浮动 IP 池

下一个浮动 IP 池作用域位于命名空间级别。每个命名空间都可以定义其自己的浮动 IP 池。与 Kubernetes 注释对象相同,用于向虚拟网络提供子网,也用于指定浮动 IP 池。YAML 文件如下所示:

列出 ns-user-1给定命名空间级别的浮动 IP 池名为 pool-ns-default,并且相应的虚拟网络 vn-ns-default. 一旦 ns-user-1创建时使用此 YAML 文件,任何需要浮动 IP 的新服务(如果不使用其 YAML 文件中的对象特定池名称创建)都将获得从此池中分配的浮动 IP。在实践中,大多数命名空间(尤其是孤立的命名空间)都需要自己的命名空间默认池,因此您会经常在现场看到这种类型的配置。

全局浮动 IP 池

要指定全局级别的浮动 IP 池,您需要提供完全限定的池名称(domain > project > net- work > name)在 contrail-kube-manager (KM)Docker’配置文件(/etc/contrail/contrail-kubernetes.conf) 中减去衰减或链路损耗 (LL) 之后可用的功率。此文件根据其环境参数在启动期间由 Docker 自动生成,可在以下页面中找到: /etc/contrail/common_kubemanage主节点中的 r env 文件:

您可以看到,这 .env文件包含有关设置的重要环境参数。要指定 global FIP pool,请添加以下行:

KUBERNETES_PUBLIC_FIP_POOL={'domain': 'default-domain','name': 'pool-global-default','network': 'vn-global-default','project': 'k8s-ns-user-1'}

它可读:全局浮动 IP 池称为 pool-global-default它是基于虚拟网络定义的 vn-global-default在项目 k8s-ns-user-1. 这表示相应的 Kubernetes 命名空间为 ns-user-1.

现在放置了这一配置,您可以重新编写 contrail-kube-managerDocker 容器以使更改生效。实质上,您需要将其拉出,然后重新启动:

现在,为群集指定全局浮动 IP 池。

Note

在所有三个作用域中,浮动 IP 自动分配并与服务和入口对象相关联。如果必须将浮动 IP 与盒相关联,则必须手动执行此操作。我们’将在下一节中讨论这一点。

用于盒式浮动 IP

创建并提供浮动 IP 池后,可以从需要的盒式 IP 池中为其分配一个浮动 ip。通过将浮动 IP 与 VMI (VM 或 pod 接口)相关联,您可以在 Contrail UI 中手动创建浮动 IP 池的浮动 IP,然后将其与 VMI 和Figure 4和4.9 中的 pod)相关联Figure 5

Figure 4: 创建浮动 IP
创建浮动 IP
Figure 5: 在 Pod 接口中关联浮动 IP
在 Pod 接口中关联浮动 IP
Note

确保浮动 IP 池已共享到将要创建浮动 IP 的项目。

公布浮动 IP

将浮动 IP 与 pod 接口相关联后,即可将其通告至 MP BGP 对等方,这些对等端通常是网关路由器。以下数字、 Figure 6Figure 7Figure 8显示了如何添加和编辑 BGP 对等体。

Figure 6: Contrail 命令:选择主菜单 > 基础架构:群集 > 高级选项
Contrail 命令:选择主菜单 > 基础架构:群集 > 高级选项
Figure 7: Contrail 命令:选择 BGP 路由器 > 创建
Contrail 命令:选择 BGP 路由器 > 创建
Figure 8: 编辑 BGP 对等方参数
编辑 BGP 对等方参数

输入所有 BGP 对等体信息,并不要’忘记关联控制器,如Figure 9中所示。

Figure 9: 将对等方连接到控制器
将对等方连接到控制器

从下拉 peerAssociated Peers,请选择您尝试添加的此新 BGP 路由器对等方的控制器。单击 save完成时。将弹出一个带有路由器类型路由器的新 BGP 对等体。

Figure 10: BGP 路由器列表中的新 BGP 路由器
BGP 路由器列表中的新 BGP 路由器

现在,’我们添加了一方 BGP 路由器作为类型路由器。对于本地 BGP 发言者(使用类型控制节点),只需通过单击 Edit 按钮再次检查参数。在此测试中,我们想要在 Contrail 控制器和网关路由器之间构建一个 MP IBGP neighborship,因此请确保 ASN 和地址系列字段两端匹配,请参阅Figure 11

Figure 11: Contrail 控制器 BGP 参数:加入
Contrail 控制器 BGP 参数:加入

现在您可以在网关路由器中检查 BGP neighborship 状态:

建立 neighborship 后,将在两个扬声器之间交换 BGP 路由,也就是说,当我们’看到分配给 Kubernetes 对象的浮动 IP 由主节点(10.169.25.19)通告并在网关路由器中获知时:

T4000 路由器不支持 detail相同命令的版本告诉更多:浮动 IP 路由将从 Contrail troller 中反映出来,但 Protocol next hop成为计算节点(10.169.25.20)表示将浮动 IP 分配给计算节点。此计算节点中当前运行的一个实体拥有浮动 IP:

动态软 GRE 配置使网关路由器自动创建软 GRE 通道接口:

T4000 路由器不支持 IP-Header指示 GRE 外部 IP 标头,因此通道基于当前 BGP 本地地址的网关路由器 192.168.0.204到远程节点 10.169.25.20,在这种情况’下,它是 Contrail 计算节点之一。浮动 IP 通告过程如Figure 12所示。

Figure 12: 浮动 IP 通告
浮动 IP 通告