Nebula advertise_addrs чи static_host_map: обирайте за власником
Статичну карту підтримує кожен peer, який до неї звертається; оголошену адресу публікує хост. Обирайте за тим, хто знає кінцеву точку.
Параметри static_host_map і advertise_addrs обидва ставлять адресу перед peer, і вони відповідають на різні питання. Один — це локальний файл зі списком overlay-адреси й кінцевої точки underlay, до якої треба підключитися. Інший — це хост, який повідомляє своїм маякам, які додаткові кінцеві точки можуть до нього дістатися. Справжня різниця — володіння: карту підтримують усі, кому вона потрібна, а оголошення — сам хост.
Вирішуйте за тим, кому належить інформація
| Setting | Where it lives | Best for |
|---|---|---|
static_host_map | Every peer that needs the entry | Bootstrap endpoints, deliberately fixed paths |
advertise_addrs | The host's own config | Endpoints the host cannot otherwise discover |
Кожен змінний peer у статичному файлі кожного peer — це робота з обслуговування, яка зростає як квадрат флоту. Це практична причина звернутися до іншого параметра, коли сам хост знає відповідь.
Питання володіння також передбачає, що станеться, коли адреса зміниться. Зі статичною картою хтось має пам'ятати кожен peer, який має старий запис. З оголошенням хост публікує нову кінцеву точку, і його маяки передають її далі, тож зміна залишається локальною на машині, яка переїхала.
Bootstrap усе ще потребує статичних записів
Клієнт має досягти хоча б одного маяка, перш ніж когось запитати про інших peer. Цей перший стрибок не може прийти з виявлення, тому він спирається на статичного запису в конфігурації клієнта. Зробіть цей єдиний запис правильним, і решту overlay можна вивчити.
Запис карти зіставляє адресу Nebula з однією або кількома доступними кінцевими точками IP чи DNS і портами. Тримати там маяки — нормально; тримати там кожен peer — це шаблон, який погано старіє, бо кожен новий peer означає редагування файлів на машинах, якими ви можете не керувати. Тримайте список достатньо коротким, щоб людина ще могла перевірити його читанням.
Оголошуйте, коли хост знає кінцеву точку
Хост за переадресацією портів доступний за публічною адресою, яка не призначена жодному з його власних інтерфейсів. Він не може виявити цю адресу, дивлячись на себе. advertise_addrs дозволяє йому опублікувати кінцеву точку через свої маяки, щоб інші peer вивчили шлях, який справді працює. Параметр існує саме тому, що хост — єдина сторона, яка знає, що зіставлення було зроблено.
Використовуйте адресу й порт, до яких інші peer справді можуть дістатися. Ті самі міркування стосуються хоста з кількома мережевими шляхами, де один шлях кращий для peer у певній мережі. Оголошення — це твердження про underlay, а не запит чогось. Коли зіставлення змінюється, оновіть оголошення на хості й дозвольте виявленню його нести, замість редагувати статичні файли по всьому флоту.
Оголошення — це не доступність
Публікація кінцевої точки не створює правило переадресації маршрутизатора, не відкриває вищого firewall і не змушує ім'я DNS розв'язуватися. Це окремі частини роботи, і правильне оголошення з відсутньою переадресацією порту створює саме той збій, який ви намагалися виправити. Оголошення — це твердження про доступність, а не механізм, що її встановлює.
Перевірте шлях ззовні, перш ніж звинувачувати виявлення. Peer, який вивчає кінцеву точку, але не може завершити handshake, має проблему маршрутизації або фільтрації на underlay, і повторення тієї ж адреси в обох параметрах цього не змінить.
Тримайте overlay-адресу окремо від кінцевої точки
Сертифікат вузла ідентифікує його адресу Nebula. Оголошені адреси належать нижчій мережі, і їх можна змінювати, не торкаючись сертифіката. Випуск нового сертифіката з іншою overlay-IP — це інша операція, зі своїми наслідками для кожного довірчого зв'язку, який закріпив старий. Тримайте дві зміни окремо в runbook, інакше переміщення кінцевої точки буде записано як перевипуск.
Коли тріаж застрягає, чітко розділіть два шари: чи повертає виявлення очікувану кінцеву точку і чи досягає її handshake? Якщо виявлення правильне, а пакети не проходять, проблема нижче overlay. Якщо виявлення хибне, проблема в карті або оголошенні, і виправлення належить туди.