Skip to content

k3s: починить logs/exec, открыть NodePort по мешу - #109

Merged
gistrec merged 1 commit into
mainfrom
feat/k3s-workload-base
Sep 19, 2026
Merged

gistrec merged 1 commit into
mainfrom
feat/k3s-workload-base

Conversation

@gistrec

@gistrec gistrec commented Sep 19, 2026

Copy link
Copy Markdown
Member

Всплыло при попытке запустить в кластере первый под.

kubectl logs и exec не работали

502 Bad Gateway: proxy error from 127.0.0.1:6443 while dialing <node>:10250

Причина — мой же --kubelet-arg=address=<node-ip> из #101. k3s гоняет apiserver→kubelet через внутренний туннель, и тот дозванивается на 127.0.0.1:10250 со стороны агента. Привязка к конкретному адресу снимала kubelet с петли, и ломались logs, exec, port-forward — то есть всё, чем отлаживают нагрузку.

Проверено по шагам: kubelet слушал только <node-ip>:10250, локальный curl туда отвечал 401 (то есть порт жив), а https://127.0.0.1:10250 не отвечал вовсе.

Безопасности эта привязка не давала ничего: 10250 закрыт дефолтным deny в ufw, allow-правил для него роль не заводит — проверял с постороннего хоста, «blocked». Аргумент убран.

NodePort по мешу

Ingress-контроллера на этом хосте не будет: 80 и 443 принадлежат соседскому сервису, traefik и servicelb отключены намеренно. Значит до сервисов в кластере ходят так:

клиент → nginx на публичном хосте → wg → <узел в меше>:<NodePort>

Ровно тот же приём, что у *-rf вхостов, которые уже работают.

Диапазон 30000:32767 открывается одним правилом на интерфейсе меша (k3s_nodeport_interface). Снаружи остаётся закрытым — ufw пинит интерфейс, как и для 6443.

Проверено

--check --diff, failed=0. В диффе конфига уходит ровно строка address=, в ufw добавляется одно правило.


Не в диффе (гитигнор): host_vars/germany-02.yml — k3s_nodeport_interface.

Нужен выкат: --tags k3s на germany-02. Хендлер перезапустит k3s (apiserver недоступен пару секунд, поды переживают).

kubectl logs, exec и port-forward не работали: 502 Bad Gateway от apiserver
при дозвоне до kubelet. Причина — мой же --kubelet-arg=address=<node-ip>:
k3s гоняет apiserver→kubelet через внутренний туннель, а тот стучится на
127.0.0.1:10250 со стороны агента. Привязка к адресу снимала kubelet с петли.

Безопасности это не давало: 10250 закрыт дефолтным deny в ufw, allow-правил
для него роль не заводит — проверено с постороннего хоста. Аргумент убран.

Ingress-контроллера на этом хосте не будет: 80 и 443 заняты соседским
сервисом, traefik и servicelb отключены. Значит до сервисов ходить через
NodePort, а nginx на публичном хосте проксирует на адрес узла в меше — тот же
приём, что у *-rf вхостов. Диапазон открывается на интерфейсе меша одним
правилом (k3s_nodeport_interface), снаружи остаётся закрыт.
@gistrec
gistrec merged commit d115b2f into main Sep 19, 2026
3 checks passed
@gistrec
gistrec deleted the feat/k3s-workload-base branch September 19, 2026 18:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant