Dépannage du pool d’adresses IP flottantes dans Contrail
Ce document fournit des méthodes de dépannage à utiliser lorsque vous rencontrez des erreurs avec le pool d’adresses IP flottantes lors de l’utilisation de Contrail.
Exemple de cluster
Les exemples de ce document font référence à un cluster virtuel configuré comme suit :
Config Nodes : ['nodec6', 'nodec7', 'nodec8'] Control Nodes : [‘nodec7', 'nodec8'] Compute Nodes : ['nodec9', 'nodec10'] Collector : ['nodec6', 'nodec8'] WebUI : nodec7 Openstack : nodec6
Les réseaux virtuels suivants sont utilisés dans les exemples de ce document :
Réseau virtuel public :
Nom du réseau virtuel :
public_vn
Plage d’adresses publiques :
10.204.219.32 to 10.204.219.37
Route cible :
64512:10003
Nom du pool IP flottant :
public_pool
Réseau virtuel privé :
Nom du réseau virtuel :
vn1
Sous-réseau:
10.1.1.0/24
Exemple

Une machine virtuelle est créée dans le réseau virtuel VN1 avec le nom VN1_VM1 et l’adresse IP 10.1.1.253. Une adresse IP flottante 10.204.219.37 est associée à l’instance VN1_VM1.

Un routeur MX80 est configuré comme passerelle d’appairage avec les nœuds de contrôle nodec7 et nodec8.

Exemple : configuration MX80 pour la passerelle
Voici la configuration du système d’exploitation Junos pour la passerelle MX80. La route 10.204.218.254 est la route vers le monde extérieur.
chassis { fpc 1 { pic 0 { tunnel-services; } } } interfaces { ge-1/0/1 { unit 0 { family inet { address 10.204.218.1/24; } } } ge-1/0/2 { unit 0 { family inet { address 10.204.216.253/24; } } } } routing-options { static { route 0.0.0.0/0 next-hop 10.204.216.254; } router-id 10.204.216.253; route-distinguisher-id 10.204.216.253; autonomous-system 64512; dynamic-tunnels { tun1 { source-address 10.204.216.253; gre; destination-networks { 10.204.216.0/24; 10.204.217.0/24; } } } } protocols { bgp { group control-nodes { type internal; local-address 10.204.216.253; keep all; family inet-vpn { unicast; } neighbor 10.204.216.64; neighbor 10.204.216.65; } } } routing-instances { public { instance-type vrf; interface ge-1/0/1.0; vrf-target target:64512:10003; vrf-table-label; routing-options { static { route 0.0.0.0/0 next-hop 10.204.218.254; } } } }
Ping l’adresse IP flottante à partir du réseau public
À partir du réseau public, envoyez un ping à l’adresse IP flottante 10.204.219.37.
user1-test:~ user1$ ping 10.204.219.37 PING 10.204.219.37 (10.204.219.37): 56 data bytes 64 bytes from 10.204.219.37: icmp_seq=0 ttl=54 time=62.439 ms 64 bytes from 10.204.219.37: icmp_seq=1 ttl=54 time=56.018 ms 64 bytes from 10.204.219.37: icmp_seq=2 ttl=54 time=55.915 ms 64 bytes from 10.204.219.37: icmp_seq=3 ttl=54 time=57.755 ms ^C --- 10.204.219.37 ping statistics --- 5 packets transmitted, 4 packets received, 20.0% packet loss round-trip min/avg/max/stddev = 55.915/58.032/62.439/2.647 ms
Détails de dépannage
Les sections suivantes détaillent les moyens d’obtenir des informations connexes, d’afficher, de dépanner et de valider des adresses IP flottantes dans un système Contrail.
Obtenez l’UUID du réseau virtuel
Utilisez ce qui suit pour obtenir l’identificateur universel unique (UUID) du réseau virtuel.
[root@nodec6 ~]# (source /etc/contrail/openstackrc; quantum net-list -F id -F name) 2>/dev/null +--------------------------------------+-------------------------+ | id | name | +--------------------------------------+-------------------------+ | 43707766-75f3-4d48-80d9-1b7240fb161d | public_vn | | 2ab7ea04-8f5f-4b8d-acbf-a7c29c9b4112 | VN1 | | 1c59ded0-38e8-4168-b91f-4c51aba10d30 | default-virtual-network | | 5b0a1040-91e4-47ff-bd4c-0a81e1901a1f | ip-fabric | | 7efddf64-ff3c-44d2-aeb2-45d7472b7a64 | __link_local__ | +--------------------------------------+-------------------------+
Afficher l’objet IP flottant dans le serveur API
Utilisez ce qui suit pour afficher les informations du pool d’adresses IP flottantes dans le serveur API. Les requêtes de serveur API peuvent être effectuées sur le port http 8082.
Les serveurs API Contrail ont l’objet public_vn de réseau virtuel qui contient des informations de pool d’adresses IP flottantes. Utilisez ce qui suit pour afficher les informations de l’objet floating-ip-pools.
curl http://<API-Server_IP>:8082/virtual-network/<UUID_of_VN>
Exemple
root@nodec6 ~]# curl http://nodec6:8082/virtual-network/43707766-75f3-4d48-80d9-1b7240fb161d | python -m json.tool { "virtual-network": { "floating_ip_pools": [ { "href": "http://127.0.0.1:8095/floating-ip-pool/663737c1-f3ab-40ff-9442-bdb6c225e3c3", "to": [ "default-domain", "admin", "public_vn", "public_pool" ], "uuid": "663737c1-f3ab-40ff-9442-bdb6c225e3c3" } ], "fq_name": [ "default-domain", "admin", "public_vn" ], "href": "http://127.0.0.1:8095/virtual-network/43707766-75f3-4d48-80d9-1b7240fb161d", "id_perms": { "created": "2014-02-07T08:58:40.892803", "description": null, "enable": true, "last_modified": "2014-02-07T10:06:42.234423", "permissions": { "group": "admin", "group_access": 7, "other_access": 7, "owner": "admin", "owner_access": 7 }, "uuid": { "uuid_lslong": 9284482284331406877, "uuid_mslong": 4859515279882014024 } }, "name": "public_vn", "network_ipam_refs": [ { "attr": { "ipam_subnets": [ { "default_gateway": "10.204.219.38", "subnet": { "ip_prefix": "10.204.219.32", "ip_prefix_len": 29 } } ] }, "href": "http://127.0.0.1:8095/network-ipam/39b0e8da-fcd4-4b35-856c-8d18570b1483", "to": [ "default-domain", "default-project", "default-network-ipam" ], "uuid": "39b0e8da-fcd4-4b35-856c-8d18570b1483" } ], "parent_href": "http://127.0.0.1:8095/project/deef6549-8e6c-4e3e-9cde-c9bc2b72ce6f", "parent_type": "project", "parent_uuid": "deef6549-8e6c-4e3e-9cde-c9bc2b72ce6f", "route_target_list": { "route_target": [ "target:64512:10003" ] }, "routing_instances": [ { "href": "http://127.0.0.1:8095/routing-instance/3c6254ac-cfde-417e-916d-e7a1c0efad92", "to": [ "default-domain", "admin", "public_vn", "public_vn" ], "uuid": "3c6254ac-cfde-417e-916d-e7a1c0efad92" } ], "uuid": "43707766-75f3-4d48-80d9-1b7240fb161d", "virtual_network_properties": { "extend_to_external_routers": null, "forwarding_mode": "l2_l3", "network_id": 4, "vxlan_network_identifier": null } } }
Afficher floating-ips dans floating-ip-pools dans le serveur API
Une fois que vous avez localisé l’objet floating-ip-pools, utilisez ce qui suit pour examiner son objet floating-ips.
L’objet floating-ips doit afficher l’adresse IP flottante affichée dans l’interface utilisateur de Contrail. L’adresse IP flottante doit avoir une référence à l’objet VMI (Virtual Machine Interface) lié à l’adresse IP flottante.
Exemple
[root@nodec6 ~]# curlhttp://nodec6:8082/floating-ip-pool/663737c1-f3ab-40ff-9442-bdb6c225e3c3 | python -m json.tool { "floating-ip-pool": { "floating_ips": [ { "href": "http://127.0.0.1:8095/floating-ip/f3eec4d6-889e-46a3-a8f0-879dfaff6ca0", "to": [ "default-domain", "admin", "public_vn", "public_pool", "f3eec4d6-889e-46a3-a8f0-879dfaff6ca0" ], "uuid": "f3eec4d6-889e-46a3-a8f0-879dfaff6ca0" } ], "fq_name": [ "default-domain", "admin", "public_vn", "public_pool" ], "href": "http://127.0.0.1:8095/floating-ip-pool/663737c1-f3ab-40ff-9442-bdb6c225e3c3", "id_perms": { "created": "2014-02-07T08:58:41.136572", "description": null, "enable": true, "last_modified": "2014-02-07T08:58:41.136572", "permissions": { "group": "admin", "group_access": 7, "other_access": 7, "owner": "admin", "owner_access": 7 }, "uuid": { "uuid_lslong": 10683309858715198403, "uuid_mslong": 7365417021744038143 } }, "name": "public_pool", "parent_href": "http://127.0.0.1:8095/virtual-network/43707766-75f3-4d48-80d9-1b7240fb161d", "parent_type": "virtual-network", "parent_uuid": "43707766-75f3-4d48-80d9-1b7240fb161d", "project_back_refs": [ { "attr": {}, "href": "http://127.0.0.1:8095/project/deef6549-8e6c-4e3e-9cde-c9bc2b72ce6f", "to": [ "default-domain", "admin" ], "uuid": "deef6549-8e6c-4e3e-9cde-c9bc2b72ce6f" } ], "uuid": "663737c1-f3ab-40ff-9442-bdb6c225e3c3" } }
Vérifier les objets IP flottants dans l’interface de la machine virtuelle
Utilisez ce qui suit pour récupérer l’interface de machine virtuelle de la machine virtuelle à partir de la commande quantum port-list ou de l’interface utilisateur Contrail. Obtenez ensuite l’identificateur de l’interface de la machine virtuelle et vérifiez ses associations d’objets IP flottants.
Vérification des objets IP flottants sur l’interface de la machine virtuelle
Une fois que vous avez obtenu l’identificateur d’interface de machine virtuelle, vérifiez les objets floating-ip associés à l’interface de machine virtuelle.
[root@nodec6 ~]# curl http://127.0.0.1:8095/floating-ip/f3eec4d6-889e-46a3-a8f0-879dfaff6ca0 | python -m json.tool { "floating-ip": { "floating_ip_address": "10.204.219.37", "fq_name": [ "default-domain", "admin", "public_vn", "public_pool", "f3eec4d6-889e-46a3-a8f0-879dfaff6ca0" ], "href": "http://127.0.0.1:8095/floating-ip/f3eec4d6-889e-46a3-a8f0-879dfaff6ca0", "id_perms": { "created": "2014-02-07T10:07:05.869899", "description": null, "enable": true, "last_modified": "2014-02-07T10:36:36.820926", "permissions": { "group": "admin", "group_access": 7, "other_access": 7, "owner": "admin", "owner_access": 7 }, "uuid": { "uuid_lslong": 12173378905373109408, "uuid_mslong": 17577202821367744163 } }, "name": "f3eec4d6-889e-46a3-a8f0-879dfaff6ca0", "parent_href": "http://127.0.0.1:8095/floating-ip-pool/663737c1-f3ab-40ff-9442-bdb6c225e3c3", "parent_type": "floating-ip-pool", "parent_uuid": "663737c1-f3ab-40ff-9442-bdb6c225e3c3", "project_refs": [ { "attr": null, "href": "http://127.0.0.1:8095/project/deef6549-8e6c-4e3e-9cde-c9bc2b72ce6f", "to": [ "default-domain", "admin" ], "uuid": "deef6549-8e6c-4e3e-9cde-c9bc2b72ce6f" } ], "uuid": "f3eec4d6-889e-46a3-a8f0-879dfaff6ca0", "virtual_machine_interface_refs": [ { "attr": null, "href": "http://127.0.0.1:8095/virtual-machine-interface/cdca35ce-84ad-45da-9331-7bc67b7fcca6", "to": [ "54bb44e1-50e4-43d7-addd-44be809f1e40", "cdca35ce-84ad-45da-9331-7bc67b7fcca6" ], "uuid": "cdca35ce-84ad-45da-9331-7bc67b7fcca6" } ] } }
Afficher l’état de l’homologue BGP sur le nœud de contrôle
Utilisez l’interface utilisateur de Contrail ou le nœud de contrôle http introspect sur le port 8083 pour afficher l’état de l’homologue BGP. Dans l’exemple suivant, les nœuds de contrôle sont nodec7 et nodec8.
Assurez-vous que l’état d’appairage BGP est affiché comme Établi pour les nœuds de contrôle et le MX de passerelle.
Exemple
Utilisation de l’interface utilisateur de Contrail :
Utilisation du nœud de contrôle Introspect :
http://nodec7:8083/Snh_BgpNeighborReq?ip_address=&domain=
http://nodec8:8083/Snh_BgpNeighborReq?ip_address=&domain=
Interrogation d’itinéraires dans le réseau virtuel public
Sur chaque nœud de contrôle, une requête sur les routes du public_vn répertorie les routes poussées par la passerelle MX, qui dans l’exemple suivant sont 0.0.0.0/0 et 10.204.218.0/24.
Dans les résultats suivants, la route IP flottante 10.204.217.32 est installée par le nœud de calcul (nodec10) qui héberge cette machine virtuelle.
Exemple
Utilisation de l’interface utilisateur de Contrail :
Utilisation de http Introspect :
Voici le format d’utilisation d’une requête d’introspection.
http://<nodename/ip>:8083/Snh_ShowRouteReq?x=<RoutingInstance of public VN>.inet.0
Exemple
http://nodec8:8083/Snh_BgpNeighborReq?ip_address=&domain=
Voir les routes BGP LL3VPN correspondantes
Utilisez l’interface utilisateur de Contrail ou l’introspect http pour afficher les routes BGP L3VPN correspondantes de la route publique, comme indiqué ci-dessous.
Exemple
Utilisation de l’interface utilisateur de Contrail :
Utilisation du nœud de contrôle Introspect :
http://nodec7:8083/Snh_ShowRouteReq?x=bgp.l3vpn.0
http://nodec8:8083/Snh_ShowRouteReq?x=bgp.l3vpn.0
Vérification à partir de la passerelle MX80
Cette section fournit des options pour vérifier les pools IP flottants à partir de la passerelle MX80.
Vérifier que les sessions BGP sont établies
Utilisez les commandes suivantes de la passerelle pour vérifier que les sessions BGP sont établies avec les nœuds de contrôle nodec7 et nodec8 :
root@mx-host> show bgp neighbor 10.204.216.64 Peer: 10.204.216.64+59287 AS 64512 Local: 10.204.216.253+179 AS 64512 Type: Internal State: Established Flags: <Sync> Last State: OpenConfirm Last Event: RecvKeepAlive Last Error: Hold Timer Expired Error Options: <Preference LocalAddress KeepAll AddressFamily Rib-group Refresh> Address families configured: inet-vpn-unicast Local Address: 10.204.216.253 Holdtime: 90 Preference: 170 Number of flaps: 216 Last flap event: HoldTime Error: 'Hold Timer Expired Error' Sent: 68 Recv: 0 Error: 'Cease' Sent: 0 Recv: 43 Peer ID: 10.204.216.64 Local ID: 10.204.216.253 Active Holdtime: 90 Keepalive Interval: 30 Group index: 0 Peer index: 3 BFD: disabled, down NLRI for restart configured on peer: inet-vpn-unicast NLRI advertised by peer: inet-vpn-unicast NLRI for this session: inet-vpn-unicast Peer does not support Refresh capability Stale routes from peer are kept for: 300 Peer does not support Restarter functionality Peer does not support Receiver functionality Peer does not support 4 byte AS extension Peer does not support Addpath
Afficher les itinéraires appris des nœuds de contrôle
À partir du MX80, utilisez show route pour afficher les itinéraires de la machine virtuelle 10.204.219.37 qui sont appris des deux nœuds de contrôle.
Dans l’exemple suivant, les routes apprises sont 10.204.216.64 et 10.204.216.65, pointant vers un saut suivant de tunnel GRE dynamique avec une étiquette de 16 (de la machine virtuelle).
public.inet.0: 4 destinations, 5 routes (4 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 0.0.0.0/0 *[Static/5] 10w6d 18:47:50 > to 10.204.218.254 via ge-1/0/1.0 10.204.218.0/24 *[Direct/0] 10w6d 18:47:51 > via ge-1/0/1.0 10.204.218.1/32 *[Local/0] 10w6d 18:48:07 Local via ge-1/0/1.0 10.204.219.37/32 *[BGP/170] 09:42:43, localpref 100, from 10.204.216.64 AS path: ?, validation-state: unverified > via gr-1/0/0.32779, Push 16 [BGP/170] 09:42:43, localpref 100, from 10.204.216.65 AS path: ?, validation-state: unverified > via gr-1/0/0.32779, Push 16
Affichage de l’agent VNSW du nœud de calcul
Le nœud de calcul introspect est accessible à partir du port 8085. Dans les exemples suivants, les nœuds de calcul sont nodec9 et nodec10.
Afficher les sauts suivants des instances de routage
Sur l’instance de routage de VN1, les routes 0.0.0.0/0 et 10.204.218.0/24 doivent avoir le saut suivant pointant vers la passerelle MX (10.204.216.253).
Exemple
Utilisation de l’interface utilisateur de Contrail :
Utilisation de l’index de table de routage unicast pour afficher les sauts suivants
Alternativement, à partir de l’introspection de l’agent, vous pouvez afficher les sauts suivants dans la table de routage unicast.
Tout d’abord, utilisez ce qui suit pour obtenir l’index de table de routage unicast (ucindex) pour l’instance de routage default-domain:admin:public_vn:public_vn.
http://nodec10:8085/Snh_VrfListReq?x=default-domain:admin:public_vn:public_vn
Exemple
Dans l’exemple suivant, l’index de table de routage unicast est 2.
Ensuite, effectuez une requête de demande de routage sur ucindex 2, comme indiqué ci-dessous. Le détail du tunnel indique les points de terminaison source et de destination du tunnel et l’étiquette MPLS 16 (étiquette de la machine virtuelle).
La requête doit également afficher un itinéraire pour 10.204.219.37 avec une interface suivant saut de tap-interface. http://nodec10:8085/Snh_Inet4UcRouteReq?x=2


Un ping de la passerelle MX vers l’adresse IP flottante de la machine virtuelle dans l’instance de routage publique devrait fonctionner.
Dépannage avancé
Si vous rencontrez toujours des problèmes d’accessibilité après avoir effectué tous les tests de cet article, par exemple, un ping entre la machine virtuelle et l’adresse IP MX ou vers des adresses publiques échoue, essayez ce qui suit :
Vérifiez que tous les processus Contrail requis sont en cours d’exécution à l’aide de la
contrail-status
commande sur tous les nœuds.Sur le nœud de calcul où la machine virtuelle est présente (nodec10 dans cet exemple), effectuez un tcpdump sur l’interface tap (
tcpdump –ni tapcdca35ce-84
). La sortie doit afficher les paquets entrants de la machine virtuelle.Vérifiez si des pertes de paquets se produisent dans le module vrouter du noyau :
http://nodec10:8085/Snh_KDropStatsReq?
Dans la sortie, faites défiler vers le bas pour trouver des gouttes. Remarque : Vous pouvez ignorer les incréments de ds_invalid_arp.
Sur l’interface physique où les paquets sont transmis au nœud de calcul, effectuez un tcpdump correspondant à l’adresse IP hôte du MX pour afficher les paquets encapsulés GRE, comme dans ce qui suit.
[root@nodec10 ~]# cat /etc/contrail/agent.conf |grep -A 1 eth-port <eth-port> <name>p1p0p0</name> </eth-port> <metadata-proxy> [root@nodec10 ~]# tcpdump -ni p1p0p0 host 10.204.216.253 -vv tcpdump: WARNING: p1p0p0: no IPv4 address assigned tcpdump: listening on p1p0p0, link-type EN10MB (Ethernet), capture size 65535 bytes 02:06:51.729941 IP (tos 0x0, ttl 64, id 57430, offset 0, flags [DF], proto GRE (47), length 112) 10.204.216.253 > 10.204.216.67: GREv0, Flags [none], length 92 MPLS (label 16, exp 0, [S], ttl 54) IP (tos 0x0, ttl 54, id 35986, offset 0, flags [none], proto ICMP (1), length 84) 172.29.227.6 > 10.204.219.37: ICMP echo request, id 53240, seq 242, length 64 02:06:51.730052 IP (tos 0x0, ttl 64, id 324, offset 0, flags [none], proto GRE (47), length 112) 10.204.216.67 > 10.204.216.253: GREv0, Flags [none], length 92 MPLS (label 16, exp 0, [S], ttl 64) IP (tos 0x0, ttl 64, id 33909, offset 0, flags [none], proto ICMP (1), length 84) 10.204.219.37 > 172.29.227.6: ICMP echo reply, id 53240, seq 242, length 64 02:06:52.732283 IP (tos 0x0, ttl 64, id 12675, offset 0, flags [DF], proto GRE (47), length 112) 10.204.216.253 > 10.204.216.67: GREv0, Flags [none], length 92 MPLS (label 16, exp 0, [S], ttl 54) IP (tos 0x0, ttl 54, id 54155, offset 0, flags [none], proto ICMP (1), length 84) 172.29.227.6 > 10.204.219.37: ICMP echo request, id 53240, seq 243, length 64 02:06:52.732355 IP (tos 0x0, ttl 64, id 325, offset 0, flags [none], proto GRE (47), length 112) 10.204.216.67 > 10.204.216.253: GREv0, Flags [none], length 92 MPLS (label 16, exp 0, [S], ttl 64) IP (tos 0x0, ttl 64, id 33910, offset 0, flags [none], proto ICMP (1), length 84) 10.204.219.37 > 172.29.227.6: ICMP echo reply, id 53240, seq 243, length 64 ^C 4 packets captured 5 packets received by filter 0 packets dropped by kernel [root@nodec10 ~]#
Sur la passerelle MX, utilisez les éléments suivants pour inspecter le nombre de paquets rx/tx (reçus/transmis) du tunnel GRE :
root@mx-host> show interfaces gr-1/0/0.32779 |grep packets Input packets : 542 Output packets: 559 root@blr-mx1> show interfaces gr-1/0/0.32779 |grep packets Input packets : 544 Output packets: 561
Recherchez les pertes de paquets dans le FPC, comme dans les éléments suivants :
show pfe statistics traffic fpc <id>
Inspectez également les tunnels dynamiques à l’aide des éléments suivants :
show dynamic-tunnels database