Когда несколько разрозненных кусков "хер знает как работает и почему" стройно срастаются в единое понимание, простую и ясную модель, из которой естественным образом выводятся самые странные свойства (которые раньше заставляли грызть зубы от нелогичности и неожиданности) - в этот момент ощущаешь реальный кайф (мозг обнаруживает, что больше не нужно помнить 100500 мелочей в виде хаоса и можно построить изящную компактную нейтронную сеть?).
Только что проебался примерно два дня (и это уже третий заход был), пытаясь понять, почему neutron не работает.
Симптомы: трафик из виртуалки выходит, между виртуалками на хосте ходит, за пределы хоста - нет. Глазами видно, что трафик выходит из виртуалки, но gre-трафика не видно. При этом гре-интерфейсы внутри openvswitch создаются, но там нет никакого трафика.
Симптомы второго порядка: ovs-ofctl dump-flows br-tun показывает, что у table 21 только drop, без полагающегося strip_vlan, set_segment, output.
После того, как я раза три все конфиги новы и нейтрона вылизал вдоль и вглубь, после вычитывания сырцов и отладочного лога ovs-agent'а (адское развлечение), я нашёл причину: сеть помечена как local. А должна быть gre.
Это в базе. Видно даже руками:
neutron net-show d1ae41a1-502a-4b30-a9ff-61c00cf51df1 +---------------------------+--------------------------------------+ | admin_state_up | True | | id | d1ae41a1-502a-4b30-a9ff-61c00cf51df1 | | name | internal | | provider:network_type | local | | provider:physical_network | | | provider:segmentation_id | | | router:external | False | | shared | False | | status | ACTIVE | | subnets | 91a7ec38-bcc0-4ae7-8f83-06cec509718d | | tenant_id | 3458268fc2ea455f84c5ef1eeaeb4849 | +---------------------------+--------------------------------------+
После пересоздания сети, она начинает работать. Легко понять почему:
neutron net-show 51027d33-af34-43d4-a123-f24edef88b9a +---------------------------+--------------------------------------+ | Field | Value | +---------------------------+--------------------------------------+ | admin_state_up | True | | id | 51027d33-af34-43d4-a123-f24edef88b9a | | name | internal | | provider:network_type | gre | | provider:physical_network | | | provider:segmentation_id | 1 | | router:external | False | | shared | False | | status | ACTIVE | | subnets | | | tenant_id | 3458268fc2ea455f84c5ef1eeaeb4849 | +---------------------------+--------------------------------------+
Почему же получилась local network? Потому что на момент создания сети не был отконфигурирован должным образом (тут надо уточнить что именно надо конфигурировать) neutron-server. А потом конфиг нормализовали, а сеть осталась такой же, и никакие ребуты не помогают.