fix public ip selfcheck logic
This commit is contained in:
1 parent
a6f9646da5
commit
67adc6670e
18 files changed
+209
-90
No files matched your search
+25
-16
@@ -38,7 +38,7 @@ flowchart TB
|
||||
end
|
||||
|
||||
subgraph CAPI["control-api (управляющая машина, 1 экземпляр)"]
|
||||
HTTP["HTTP API<br/>/api/v1/agents/*<br/>/api/v1/probers/*<br/>/api/v1/admin/*<br/>/healthz · /whatsmyip"]
|
||||
HTTP["HTTP API<br/>/api/v1/agents/*<br/>/api/v1/probers/*<br/>/api/v1/admin/*<br/>/healthz"]
|
||||
ORCH["Оркестратор: Tick раз в<br/>poll_interval_seconds<br/>claim → associate FIP →<br/>ожидание self-check →<br/>checking → aggregate → release<br/>+ lease sweep + heartbeat sweep"]
|
||||
DB[("SQLite<br/>validators / ip_queue<br/>checks / events")]
|
||||
OSCLIENT["OpenStack-клиент<br/>(mode: mock | real)"]
|
||||
@@ -85,8 +85,9 @@ flowchart LR
|
||||
AGENT["validator-agent"]
|
||||
end
|
||||
|
||||
CAPI["control-api"]
|
||||
FIP(["Floating IP<br/>203.0.113.10<br/>(адрес под проверкой,<br/>привязан оркестратором заранее)"])
|
||||
IPECHO["Внешний IP-echo сервис<br/>(api.ipify.org и т.п.,<br/>вне облака)"]
|
||||
CAPI["control-api"]
|
||||
|
||||
subgraph TARGETS["Целевые серверы (targets из конфига)"]
|
||||
T1["hub.docker.com"]
|
||||
@@ -94,25 +95,33 @@ flowchart LR
|
||||
T3["packages.ubuntu.com"]
|
||||
end
|
||||
|
||||
AGENT -->|"1 GET /api/v1/whatsmyip<br/>(self-check)"| CAPI
|
||||
CAPI -.->|"2 наблюдаемый исходящий IP"| AGENT
|
||||
AGENT ==>|"3 весь исходящий трафик ВМ<br/>идёт через FIP (SNAT облака)"| FIP
|
||||
AGENT ==>|"1 self-check: исходящий трафик<br/>ВМ идёт через FIP (SNAT облака)"| FIP
|
||||
FIP ==>|"1 GET"| IPECHO
|
||||
IPECHO -.->|"2 наблюдаемый исходящий IP"| AGENT
|
||||
AGENT -->|"3 POST self-check {success}"| CAPI
|
||||
AGENT ==>|"4 проверки: тоже через FIP"| FIP
|
||||
FIP ==>|"4 HTTPS GET"| T1
|
||||
FIP ==>|"4 HTTPS GET"| T2
|
||||
FIP ==>|"4 ICMP echo"| T3
|
||||
```
|
||||
|
||||
**Пояснение.** Шаги 1–2 — самопроверка (self-check): агент обращается к
|
||||
`control-api` и сравнивает адрес, с которого пришёл его собственный
|
||||
запрос, с адресом, который ему назначен. Поскольку весь исходящий трафик
|
||||
ВМ реально идёт через привязанный Floating IP (шаг 3, SNAT на стороне
|
||||
облака), совпадение подтверждает, что назначение применилось корректно —
|
||||
только после этого агент переходит к шагу 4 и выполняет проверки из
|
||||
`check_config` (HTTPS/ICMP/опционально SSH) против целей из конфига.
|
||||
Каждый результат отправляется обратно в control-api сразу после
|
||||
выполнения (см. диаграмму телеметрии ниже) — сам этот data-plane трафик
|
||||
(шаги 3–4) в control-api не проходит и им не наблюдается напрямую,
|
||||
control-api видит только заявленный агентом результат.
|
||||
**Пояснение.** Шаги 1–2 — самопроверка (self-check): агент сам (без
|
||||
участия control-api) обращается к внешнему IP-echo сервису и сравнивает
|
||||
адрес, с которого пришёл его собственный запрос, с адресом, который ему
|
||||
назначен. Ресурс для сравнения обязан быть вне облака: OpenStack
|
||||
применяет SNAT через Floating IP только к трафику, уходящему через
|
||||
внешнюю сеть — обращение к чему-либо внутри проекта (включая сам
|
||||
control-api, если он в той же внутренней сети) показало бы приватный
|
||||
адрес валидатора независимо от корректности привязки FIP. Итог
|
||||
самопроверки агент затем сообщает control-api отдельным вызовом (шаг 3) —
|
||||
это уже управляющий, а не проверяемый трафик. Только после успешного
|
||||
self-check агент переходит к шагу 4 и выполняет проверки из
|
||||
`check_config` (HTTPS/ICMP/опционально SSH) против целей из конфига —
|
||||
тем же путём, через тот же FIP. Каждый результат отправляется обратно в
|
||||
control-api сразу после выполнения (см. диаграмму телеметрии ниже) — сам
|
||||
этот data-plane трафик (шаги 1 и 4) в control-api не проходит и им не
|
||||
наблюдается напрямую, control-api видит только заявленный агентом
|
||||
результат.
|
||||
|
||||
### Дополнительно: обратное направление (пробер к валидатору)
|
||||
|
||||
|
||||
Reference in new issue
Block a user