此产品的文档集力求使用非歧视性语言。在本文档集中,非歧视性语言是指不隐含针对年龄、残障、性别、种族身份、族群身份、性取向、社会经济地位和交叉性的歧视的语言。由于产品软件的用户界面中使用的硬编码语言、基于 RFP 文档使用的语言或引用的第三方产品使用的语言,文档中可能无法确保完全使用非歧视性语言。 深入了解思科如何使用包容性语言。
思科采用人工翻译与机器翻译相结合的方式将此文档翻译成不同语言,希望全球的用户都能通过各自的语言得到支持性的内容。 请注意:即使是最好的机器翻译,其准确度也不及专业翻译人员的水平。 Cisco Systems, Inc. 对于翻译的准确性不承担任何责任,并建议您总是参考英文原始文档(已提供链接)。
本文档介绍如何在Amazon AWS云上部署CSR1000v路由器以实现高可用性的配置指南。它旨在向用户提供高可用性实用知识以及部署全功能测试平台的能力。
有关AWS和HA的更多深入背景,请参阅部分。
Cisco 建议您了解以下主题:
本文档中的信息基于Cisco IOS-XE® Denali 16.7.1。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
在多可用区环境中,模拟从专用数据中心(VM)到互联网的连续流量。模拟HA故障切换,观察到HA成功时,路由表确认流量从CSRHA切换到CSRHA1的专用接口。
在配置开始之前,必须完全了解拓扑和设计。这有助于排除以后可能出现的任何问题。
根据网络要求有多种高可用性部署方案。在本示例中,HA冗余使用以下设置进行配置:
一个高可用性对中有2个CSR1000v路由器,位于两个不同的可用区域中。将每个可用性区域视为独立的数据中心,以提供额外的硬件恢复能力。
第三个区域是模拟专用数据中心中的设备的VM。目前,通过上的公共接口启用互联网访问,以便您可以访问和配置VM。通常,所有正常流量应流经专用路由表。
从CSRHA 8.8.8.8→流量模→中→VM的专用接口和专用路由表。在故障切换场景中,观察专用路由表已将路由切换到指向CSRHA1的专用接口。
RTB — 路由表ID。
CIDR — 要在路由表中更新的路由的目标地址。
ENI — 流量路由到的CSR 1000v千兆接口的网络接口ID。
例如,如果CSRHA发生故障,则CSRHA1会接管并更新AWS路由表中的路由,以指向自己的ENI。
区域 — CSR 1000v的AWS区域。
一般配置流程是从最顶层的功能(区域/VPC)开始,然后向下移动到最具体的功能(接口/子网)。 但是,没有特定的配置顺序。开始之前,首先了解拓扑很重要。
提示:为您的所有设置(VPC、接口、子网、路由表等)指定名称。
本示例使用US West(俄勒冈)。
安全组类似于允许或拒绝流量的ACL。
IAM授予您对Amazon API的CSR访问权限。
CSR1000v用作代理,以调用AWS API命令来修改路由表。默认情况下,不允许AMI访问API。此过程将创建IAM角色,并在CSR实例启动期间使用此角色。IAM为CSR提供使用和修改AWS API的访问凭证。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AssociateRouteTable", "ec2:CreateRoute", "ec2:CreateRouteTable", "ec2:DeleteRoute", "ec2:DeleteRouteTable", "ec2:DescribeRouteTables", "ec2:DescribeVpcs", "ec2:ReplaceRoute", "ec2:DisassociateRouteTable", "ec2:ReplaceRouteTableAssociation" ], "Resource": "*" } ] }
每个CSR1000v路由器有2个接口(1个公共接口,1个专用接口),并且位于自己的可用区中。您可以将每个CSR视为位于单独的数据中心。
注意:在上一步骤中创建的子网可能不会出现在此下拉列表中。您可能需要刷新或取消页面,然后重新开始才能显示子网。
注意:如果您丢失了私钥,则无法再次登录您的CSR。没有恢复密钥的方法。
注意:公共术语/私人术语可能会让您感到困惑。在本示例中,公共接口的定义是Eth0,它是面向互联网的接口。从AWS的角度来看,我们的公共接口是他们的私有IP。
默认情况下,所有ENI都启用此源/目标检查。一种反欺骗功能,通过验证ENI是流量的目的地后再转发流量,避免让ENI出现并非真正针对它的流量。路由器很少是数据包的实际目的地。必须在所有CSR传输ENI上禁用此功能,否则无法转发数据包。
注意:AWS提供的通过SSH连接到CSR1000v的用户名可能错误地列为根。如有必要,请将其更改为ec2-user。
注意:在中必须能ping通SSH的DNS地址。此处为ec2-54-208-234-64.compute-1.amazonaws.com。检查路由器的公共子网/eni是否与公共路由表关联。简要转到步骤8,了解如何将该子网与路由表关联。
公共子网: 10.16.1.0/24
专用子网:10.16.5.0/24
如果无法ping通这个新AMI的弹性IP地址,请简要转到步骤8,确保公共子网与公共路由表关联。
在本示例中,请在市场中使用Ubuntu Server 14.04 LTS。
公共子网: 10.16.2.0/24
专用子网:10.16.6.0/24
如果无法ping通这个新AMI的弹性IP地址,请简要转到步骤8,确保公共子网与公共路由表关联。
ubuntu@ip-10-16-2-139:~$ cd /etc/network/interfaces.d/ ubuntu@ip-10-16-2-139:/etc/network/interfaces.d$ sudo vi eth1.cfg auto eth1 iface eth1 inet static address 10.16.6.131 netmask 255.255.255.0 network 10.16.6.0 up route add -host 8.8.8.8 gw 10.16.6.1 dev eth1
ubuntu@ip-10-16-2-139:/etc/network/interfaces.d$ sudo ifdown eth1 && sudo ifup eth1 ubuntu@ip-10-16-2-139:/etc/network/interfaces.d$ sudo reboot
ubuntu@ip-10-16-2-139:~$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.16.2.1 0.0.0.0 UG 0 0 0 eth0 8.8.8.8 10.16.6.1 255.255.255.255 UGH 0 0 0 eth1 <-------------- 10.16.3.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 10.16.6.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
如果表中未列出8.8.8.8,请手动添加:
ubuntu@ip-10-16-2-139:~$ sudo route add -host 8.8.8.8 gw 10.16.6.1 dev eth1
3个公共接口与公共路由表关联:
公共子网:10.16.0.0/24,10.16.1.0/24,10.16.2.0/24
3个专用接口与专用路由表关联:
专用子网:10.16.4.0/24,10.16.5.0/24,10.16.6.0/24
通过CSR 1000v的弹性IP配置通用路由封装(GRE)隧道(建议避免检测虚假故障的DHCP租用续约问题。) 如果需要更快的收敛,则可以将双向转发检测(BFD)值配置为比本示例所示值更主动。但是,这可能会导致在间歇性连接期间发生BFD对等体关闭事件。本示例中的值在1.5秒内检测对等体故障。执行AWS API命令的时间与VPC路由表更改生效的时间之间大约有几秒的可变延迟。
GRE和BFD — 用于观察HA故障切换条件
interface Tunnel1 ip address 192.168.1.1 255.255.255.0 bfd interval 500 min_rx 500 multiplier 3 tunnel source GigabitEthernet1 tunnel destination 52.10.183.185 /* Elastic IP of the peer CSR */ ! router eigrp 1 bfd interface Tunnel1 network 192.168.1.0 passive-interface GigabitEthernet1
NAT和路由 — 用于通过专用接口访问虚拟机互联网
interface GigabitEthernet1 ip address dhcp ip nat outside no shutdown ! interface GigabitEthernet2 ip address dhcp ip nat inside no shutdown ! ip nat inside source list 10 interface GigabitEthernet1 overload ! access-list 10 permit 10.16.6.0 0.0.0.255 ! ip route 10.16.6.0 255.255.255.0 GigabitEthernet2 10.16.4.1
GRE和BFD — 用于观察HA故障切换条件
interface Tunnel1 ip address 192.168.1.2 255.255.255.0 bfd interval 500 min_rx 500 multiplier 3 tunnel source GigabitEthernet1 tunnel destination 50.112.227.77 /* Elastic IP of the peer CSR */ ! router eigrp 1 bfd interface Tunnel1 network 192.168.1.0 passive-interface GigabitEthernet1
NAT和路由 — 用于通过专用接口访问虚拟机互联网
interface GigabitEthernet1 ip address dhcp ip nat outside no shutdown ! interface GigabitEthernet2 ip address dhcp ip nat inside no shutdown ! ip nat inside source list 10 interface GigabitEthernet1 overload ! access-list 10 permit 10.16.6.0 0.0.0.255 ! ip route 10.16.6.0 255.255.255.0 GigabitEthernet2 10.16.5.1
使用下面指定的cloud provider aws命令配置每个CSR 1000v,监控BFD对等体关闭事件。在检测到AWS HA错误(例如BFD对等体关闭)后,使用此命令定义对(VPC)Route-table-id、Network-interface-id和CIDR的路由更改。
CSR(config)# redundancy CSR(config-red)# cloud provider [aws | azure] node-id # bfd peer ipaddr # route-table table-name # cidr ip ipaddr/prefix # eni elastic-network-intf-name # region region-name
CSRHA#show bfd neighbors IPv4 Sessions NeighAddr LD/RD RH/RS State Int 192.168.1.2 4097/4097 Up Up Tu1
CSRHA上的冗余配置示例
redundancy cloud provider aws 1 bfd peer 192.168.1.2 route-table rtb-ec081d94 cidr ip 8.8.8.8/32 eni eni-90b500a8 region us-west-2
CSRHA1上的冗余配置示例
redundancy cloud provider aws 1 bfd peer 192.168.1.1 route-table rtb-ec081d94 cidr ip 8.8.8.8/32 eni eni-10e3a018 region us-west-2
CSRHA#show bfd nei IPv4 Sessions NeighAddr LD/RD RH/RS State Int 192.168.1.2 4097/4097 Up Up Tu1 CSRHA#show ip eigrp neighbors EIGRP-IPv4 Neighbors for AS(1) H Address Interface Hold Uptime SRTT RTO Q Seq (sec) (ms) Cnt Num 0 192.168.1.2 Tu1 12 00:11:57 1 1470 0 2
CSRHA#show redundancy cloud provider aws 1 Cloud HA: work_in_progress=FALSE Provider : AWS node 1 State : idle BFD peer = 192.168.1.2 BFD intf = Tunnel1 route-table = rtb-ec081d94 cidr = 8.8.8.8/32 eni = eni-90b500a8 region = us-west-2
ubuntu@ip-10-16-3-139:~$ ping -I eth1 8.8.8.8 PING 8.8.8.8 (8.8.8.8) from 10.16.6.131 eth1: 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=50 time=1.60 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=50 time=1.62 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=50 time=1.57 ms
CSRHA(config)#int Tun1 CSRHA(config-if)#shut
show redundancy cloud provider [aws | azure] node-id debug redundancy cloud [all | trace | detail | error] debug ip http all
分辨率:Http用于从CSR向AWS发送API调用。确保DNS可以解析实例中列出的DNS名称。确保http流量未被阻止。
*May 30 20:08:06.922: %VXE_CLOUD_HA-3-FAILED: VXE Cloud HA BFD state transitioned, AWS node 1 event httpc_send_request failed *May 30 20:08:06.922: CLOUD-HA : AWS node 1 httpc_send_request failed (0x12) URL=http://ec2.us-east-2b.amazonaws.com
分辨率:不同网络中的区域名称和ENI配置不正确。区域和ENI应与路由器处于同一区域。
*May 30 23:38:09.141: CLOUD-HA : res content iov_len=284 iov_base=<?xml version="1.0" encoding="UTF-8"?> <Response><Errors><Error><Code>InvalidParameterValue</Code><Message>route table rtb-9c0000f4 and interface eni-32791318 belong to different networks</Message></Error></Errors><RequestID>af3f228c-d5d8-4b23-b22c-f6ad999e70bd</RequestID></Response>
分辨率:IAM JSON角色/策略创建错误或未应用于CSR。IAM角色授权CSR进行API调用。
*May 30 22:22:46.437: CLOUD-HA : res content iov_len=895 iov_base=<?xml version="1.0" encoding="UTF-8"?> <Response><Errors><Error><Code>UnauthorizedOperation</Code><Message>You are not authorized to perform this operation. Encoded
authorization failure message: qYvEB4MUdOB8m2itSteRgnOuslAaxhAbDph5qGRJkjJbrESajbmF5HWUR-MmHYeRAlpKZ3Jg_y-_tMlYel5l_ws8Jd9q2W8YDXBl3uXQqfW_cjjrgy9jhnGY0nOaNu65aLpfqui8kS_4RPOpm5grRFfo99-8uv_N3mYaBqKFPn3vUcSYKBmxFIIkJKcjY9esOeLIOWDcnYGGu6AGGMoMxWDtk0K8nwk4IjLDcnd2cDXeENS45w1PqzKGPsHv3wD28TS5xRjIrPXYrT18UpV6lLA_09Oh4737VncQKfzbz4tPpnAkoW0mJLQ1vDpPmNvHUpEng8KrGWYNfbfemoDtWqIdABfaLLLmh4saNtnQ_OMBoTi4toBLEb2BNdMkl1UVBIxqTqdFUVRS**MSG 00041 TRUNCATED** **MSG 00041 CONTINUATION #01**qLosAb5Yx0DrOsLSQwzS95VGvQM_n87LBHYbAWWhqWj3UfP_zmiak7dlm9P41mFCucEB3Cs4FRsFtb-9q44VtyQJaS2sU2nhGe3x4uGEsl7F1pNv5vhVeYOZB3tbOfbV1_Y4trZwYPFgLKgBShZp-WNmUKUJsKc1-6KGqmp7519imvh66JgwgmU9DT_qAZ-jEjkqWjBrxg6krw</Message></Error></Errors><RequestID>4cf31249-2a6e-4414-ae8d-6fb825b0f398</RequestID></Response>