VMware 合作伙伴网关提供了不同的配置选项。在安装网关之前,应准备一个工作表。

工作表

SD-WAN Gateway
  • 版本 (Version)
  • OVA/QCOW2 文件位置
  • 激活密钥 (Activation Key)
  • SD-WAN Orchestrator(IP 地址/vco-fqdn-hostname)
  • 主机名
Hypervisor 地址/集群名称
存储 根卷数据存储(建议大于 40 GB)
注: 建议合作伙伴网关主机上的 /tmp/partition 目录中的可用磁盘空间至少是内存 (RAM) 大小的两倍。
CPU 分配 KVM/VMware 的 CPU 分配。
安装选择 DPDK - 此选项是可选的,默认情况下处于启用状态以实现更高的吞吐量。如果您选择禁用 DPDK,请与 VMware 客户支持部门联系。
OAM 网络(可选,请参阅“自定义配置”
  • DHCP
  • OAM IPv4 地址
  • OAM IPv4 网络掩码
  • DNS 服务器 - 主
  • DNS 服务器 - 辅助
  • 静态路由
ETH0 – 面向 Internet 的网络
  • IPv4 地址
  • IPv4 网络掩码
  • IPv4 默认网关
  • DNS 服务器 - 主
  • DNS 服务器 - 辅助
切换 (ETH1) - 网络
  • MGMT VRF IPv4 地址
  • MGMT VRF IPv4 网络掩码
  • MGMT VRF IPv4 默认网关
  • DNS 服务器 - 主
  • DNS 服务器 - 辅助
  • 切换(QinQ (0x8100)、QinQ (0x9100)、无、802.1Q、802.1ad)
  • C 标记
  • S 标记
控制台访问
  • Console_Password
  • SSH:
    • 已启用(是/否)
    • SSH 公钥
NTP(可选,请参阅“自定义配置”一节
  • 公用 NTP:
    • 服务器 0.ubuntu.pool.ntp.org
    • 服务器 1.ubuntu.pool.ntp.org
    • 服务器 2.ubuntu.pool.ntp.org
    • 服务器 3.ubuntu.pool.ntp.org
  • 内部 NTP 服务器 - 1
  • 内部 NTP 服务器 - 2

SD-WAN Gateway 部分

SD-WAN Gateway 部分的大部分内容无需加以说明。

SD-WAN Gateway
  • 版本 - 应等于或低于 SD-WAN Orchestrator
  • OVA/QCOW2 文件位置 - 提前计划文件位置和磁盘分配
  • 激活密钥 (Activation Key)
  • SD-WAN Orchestrator(IP 地址/vco-fqdn-hostname)
  • 主机名 - 有效的 Linux 主机名“RFC 1123”

创建网关并获取激活密钥

  1. 转到操作员 (Operator) > 网关池 (Gateway Pool),然后创建新的 SD-WAN Gateway 池。要在服务提供商网络中运行 SD-WAN Gateway,请选中允许合作伙伴网关 (Allow Partner Gateway) 复选框。这会启用将合作伙伴网关包含在此网关池中的选项。

    vcg-new-pool

  2. 转到操作员 (Operator) > 网关 (Gateway),然后创建一个新网关并将其分配给该池。此处输入的网关的 IP 地址必须与网关的公用 IP 地址 (public IP address) 相匹配。如果不确定,您可以从 SD-WAN Gateway 中运行 curl ipinfo.io/ip,这会返回 SD-WAN Gateway 的公用 IP。

    vcg-create-new-gateway

  3. 记下激活密钥并将其添加到工作表中。

    vcg-gateway-activation-key

启用合作伙伴网关模式

  1. 转到操作员 (Operator) > 网关 (Gateways),然后选择 SD-WAN Gateway。选中合作伙伴网关 (Partner Gateway) 复选框以启用合作伙伴网关。

    vcg-properties-partner-gateway-checkbox

    此外,还有其他一些参数可以配置。最常配置的参数如下:

    通告 0.0.0.0/0,且不加密 (Advertise 0.0.0.0/0 with no encrypt)

    vcg-advanced-handoff-static-routes

此选项将使合作伙伴网关能够通告 SAAS 应用程序的云流量路径。由于“加密”(Encrypt) 标记已关闭,因此,是否使用此路径将取决于业务策略上的客户配置。

第二个建议的选项是“以 /32 形式通告 SD-WAN Orchestrator IP,且进行加密”(advertise the SD-WAN Orchestrator IP as a /32 with encrypt)。

vcg-advanced-handoff-static-routes-encrypt-checkbox

这会强制从 Edge 发送到 SD-WAN Orchestrator 的流量采用网关路径。建议选择该选项,因为它可以预测 SD-WAN Edge 访问 SD-WAN Orchestrator 时采取的行为。

网络连接

重要说明: 以下过程和屏幕截图重点介绍最常见的部署,即网关的双臂安装。标题为 OAM 接口和静态路由的一节中说明了如何添加 OAM 网络。

vcg-partner-gateway-pe-image

上图显示了双臂部署中的 SD-WAN Gateway。在此示例中,我们假定 eth0 是面向公用网络 (Internet) 的接口,eth1 是面向内部网络的接口(切换或 VRF 接口)。

注: 管理 VRF 是在 SD-WAN Gateway 上创建的,用于向默认网关 IP 发送定期 ARP 刷新以检查切换接口是否已实际启动并缩短故障切换时间。为此,建议在 PE 路由器上设置专用 VRF。(可选)PE 路由器也可以使用相同的管理 VRF 向 SD-WAN Gateway 发送 IP SLA 探测以检查 SD-WAN Gateway 状态( SD-WAN Gateway 具有一个有状态 ICMP 响应程序,只有在其服务已启动时,该响应程序才会响应 ping 操作)。如果未设置专用管理 VRF,您可以将其中的一个客户 VRF 作为管理 VRF,但不建议这样做。

对于面向 Internet 的网络,您只需进行基本网络配置。

ETH0 – 面向 Internet 的网络
  • IPv4_Address
  • IPv4_Netmask
  • IPv4_Default_gateway
  • DNS_server_primary
  • DNS_server_secondary

对于切换接口,您必须知道要配置的切换类型,以及管理 VRF 的切换配置。

ETH1 – 切换网络
  • MGMT_IPv4_Address
  • MGMT_IPv4_Netmask
  • MGMT_IPv4_Default gateway
  • DNS_Server_Primary
  • DNS_Server_Secondary
  • 切换(QinQ (0x8100)、QinQ (0x9100)、无、802.1Q、802.1ad)
  • C_TAG_FOR_MGMT_VRF
  • S_TAG_FOR_MGMT_VRF

控制台访问 (Console Access)

控制台访问
  • Console_Password
  • SSH:
    • 已启用(是/否)
    • SSH 公钥

要访问网关,必须创建控制台密码和/或 SSH 公钥。

创建 cloud-init

在工作表中定义的网关的配置选项将在 cloud-init 配置中使用。cloud-init 配置由两个主要配置文件组成,即,元数据文件和用户数据文件。元数据文件中包含网关的网络配置,用户数据文件中包含网关软件配置。该文件提供了相应的信息以标识要安装的 SD-WAN Gateway 实例。

以下是 Meta_data 文件和 User_data 文件的模板。

使用工作表中的信息填充这两个模板。需要替换所有 #_VARIABLE_#,同时还检查任何 #ACTION#。

重要说明: 模板假定您为接口使用静态配置。此外,还假定您对所有接口都使用 SR-IOV,或者对任何接口都不使用 SR-IOV。有关更多信息,请参阅 OAM - 使用 vmxnet3 的 SR-IOV 或使用 VIRTIO 的 SR-IOV
meta-data 文件:
instance-id: #_Hostname_#
local-hostname: #_Hostname_#
 
network-interfaces: |
   auto eth0
      iface eth0 inet static
         address #_IPv4_Address_# 
         mac_address #_mac_Address_#       
         netmask #_IPv4_Netmask_# 
         gateway #_IPv4_Gateway_# 
         dns-nameservers 
            #_DNS_server_primary_# 
            #_DNS_server_secondary_# 
   auto eth1
      iface eth1 inet static
         metric '13'
         address #_MGMT_IPv4_Address_# 
         mac_address #_MGMT_mac_Address_# 
         netmask #_MGMT_IPv4_Netmask_# 
         gateway #_MGMT_IPv4_Gateway_# 
         dns-nameservers 
            #_DNS_server_primary_# 
            #_DNS_server_secondary_# 
 
user-data 文件:
#cloud-config
hostname: #_Hostname_#
password: #_Console_Password_# 
chpasswd: 
  expire: false

ssh_authorized_keys: 
  - #_SSH_public_Key_#
ssh_pwauth: true

velocloud: 
  vcg: 
    activation_code: #_Activation_Key_#
    vco: #_VCO_#

runcmd: 
  - "echo \"[]\" > /opt/vc/etc/vc_blocked_subnets.json"
  - "sed -iorig \"s/wan=\\\".*/wan=\\\"eth0 eth1\\\"/\" /etc/config/gatewayd-tunnel"
  - /var/lib/cloud/scripts/per-boot/config_gateway
  - "sleep 10"
  - "/opt/vc/bin/vc_procmon restart"

write_files: 
  - 
    content: |
        #!/usr/bin/python
        import json
        ### EDIT GATEWAYD ###
        with open("/etc/config/gatewayd", "r") as jsonFile:
          data = json.load(jsonFile)
        data["global"]["vcmp.interfaces"] = ["eth0"]
        data["global"]["wan"] = ["eth1"]
        # NOTE FOR HAND OFF IT CAN BE "QinQ (0x8100)" "QinQ (0x9100)" "none" "802.1Q" "802.1ad"
        data["vrf_vlan"]["tag_info"][0]["mode"] = "#_Handoff_" 
        data["vrf_vlan"]["tag_info"][0]["interface"] = "eth1"
        data["vrf_vlan"]["tag_info"][0]["c_tag"] = "#_C_TAG_FOR_MGMT_VRF_#" 
        data["vrf_vlan"]["tag_info"][0]["s_tag"] = "#_S_TAG_FOR_MGMT_VRF_" 
        with open("/etc/config/gatewayd", "w") as jsonFile:
          jsonFile.write(json.dumps(data,sort_keys=True,indent=4, separators=(",", ": ")))
        ### EDIT DPDK ###
        with open("/opt/vc/etc/dpdk.json", "r") as jsonFile:
          data = json.load(jsonFile)
        #SET 0 or 1 for enabled or DISABLED example data["dpdk_enabled"] = 0
        data["dpdk_enabled"] = #_DKDP_ENABLED_(1)_OR_DISABLED_(0)_# 
        with open("/opt/vc/etc/dpdk.json", "w") as jsonFile:
          jsonFile.write(json.dumps(data,sort_keys=True,indent=4, separators=(",", ": ")))
    path: /var/lib/cloud/scripts/per-boot/config_gateway
    permissions: "0755"

final_message: "==== Cloud-init completed ===="

power_state: 
  condition: true
  delay: "+1"
  message: "Bye Bye"
  mode: reboot
  timeout: 30
重要说明:
  • VMware 建议为所有生产 Orchestrator 配置正确的完全限定域名 (FQDN),以便可以为它们颁发正确的 TLS 证书。
  • 如果使用 Orchestrator 的 IP 地址进行激活是唯一的选项,请使用以下示例,它指示 Edge 跳过 TLS 验证。
    commands.getoutput("/opt/vc/bin/ activate.py -s myvco.example.com -i #_activation_key_#")
  • 建议不要在生产环境中使用该配置,我们强烈建议您尽早针对 Orchestrator 的主机名进行重新激活。
注: 始终使用 http://www.yamllint.com/ 验证用户数据和元数据。在 cloud-init 完成后,元数据还应是 network-interface ( /etc/network/interfaces) 部分中的有效网络配置。有时,在使用 Windows/Mac 复制粘贴功能时,引入智能引号将会出现问题,这可能会损坏文件。请运行以下命令以确保没有智能引号。
sed s/[”“]/'"'/g /tmp/user-data > /tmp/user-data_new

创建 ISO 文件

完成上述文件后,需要将这些文件打包到一个 ISO 映像中。此 ISO 映像用作虚拟机的虚拟配置 CD。此 ISO 映像(名为 vcg01-cidata.iso)是在 Linux 系统上使用以下命令创建的:

genisoimage -output vcg01-cidata.iso -volid cidata -joliet -rock user-data meta-data

如果您使用的是 MAC OSX,请改用以下命令:

mkisofs -output vcg01-cidata.iso -volid cidata -joliet -rock {user-data,meta-data}

我们将此 iso 文件命名为 #CLOUD_INIT_ISO_FILE#,此文件将在 OVA 和 VMware 安装中使用。