Кэш пакетов и хосты без интернета
Хосты качают пакеты через хаб, и каждый .deb уходит в интернет один раз на все хосты. Публичный адрес хабу не нужен, новых открытых портов у хостов нет.
Как устроено
- Хаб держит к каждому хосту с галочкой «пакеты через кэш хаба» (в форме хоста, по умолчанию включена) отдельную SSH-сессию с обратным пробросом порта: на хосте
127.0.0.1:3142(NKT_HUB_APTCACHE_PORT) ведёт в кэширующий прокси хаба. Сессия переподключается сама; значок в колонке «Канал» показывает, держится ли проброс. - На хосте лежат
/etc/apt/apt.conf.d/99nkt-hub-proxyи/usr/local/bin/nkt-apt-proxy— штатныйAcquire::http::Proxy-Auto-Detect: скрипт отвечает адресом прокси, если порт открыт, иDIRECT, если хаб не подключён, — apt тогда работает как обычно. Файлы кладутся при установке nkt с хаба, а на уже установленный хост — сразу при включении галочки (нужен root или sudo без пароля). - Кэшируется только неизменяемое —
pool/…иby-hash/…; индексы (dists/…) идут насквозь;https-репозитории туннелируются как есть — внутрь TLS прокси не смотрит. - Строка «localhost» через кэш не ходит.
«О системе» → «Кэш пакетов»: размер, число файлов, попадания и промахи, трафик, сколько хостов на пробросе, лимит в гигабайтах (NKT_HUB_APTCACHE_MAX_GB, по умолчанию 20; 0 — без лимита; значение из интерфейса важнее) и очистка. При переполнении вытесняется давно не спрошенное.
Файлы по ссылке
Тот же порт умеет больше, чем apt. Всё, что хосту нужно из интернета для кластеров и машин, при открытом порте идёт через хаб и оседает в его кэше: хост без выхода наружу получает это с хаба, хост с выходом не качает по разу на узел то, что хаб уже видел. Хост проверяет, что порт отвечает как кэш nkt (/nkt/ping): чужой прокси на том же порту за свой не примется. Порт закрыт — всё идёт напрямую.
GET http://127.0.0.1:3142/nkt/artifact?url=… — хаб качает ссылку сам и отдаёт из кэша. Так берутся установщик и бинарник k3s с airgap-образами (k3s ставится с INSTALL_K3S_SKIP_DOWNLOAD), Cilium CLI, ключ репозитория pkgs.k8s.io, манифест Flannel, облачные образы машин. Ссылки с версией в пути и .deb лежат бессрочно, остальное (get.k3s.io, …/latest/…, «текущий» образ Ubuntu) перекачивается, если старше 6 часов; недоступен источник — отдаётся копия.
Зеркало registry
/v2/… на том же адресе — pull-through cache образов контейнеров. containerd на узле кластера настраивается брать docker.io, quay.io, registry.k8s.io, ghcr.io и gcr.io через зеркало (k3s — /etc/rancher/k3s/registries.yaml, kubeadm — /etc/containerd/certs.d/<registry>/hosts.toml).
- Слои и манифесты по digest лежат бессрочно, «тег → digest» — 5 минут; при недоступном источнике берётся прошлое значение.
- К источникам хаб ходит анонимно (Bearer по вызову
WWW-Authenticate); приватные образы через зеркало не идут. .debсhttps-репозиториев (pkgs.k8s.io) по-прежнему туннелируются без оседания.
Сухой прогон кластера проверяет ссылки через кэш хаба, если он есть, а с галочкой «заодно подготовить» хаб заранее кладёт в кэш всё, что узлы возьмут потом.