Denis
да вроде жив
Denis
docker ps -a выдаёт список активных контейнеров
Maxim
облин, а до тлс я не дочитал
Maxim
извиняюсь
Maxim
показывай параметры запуска кьюблета
Maxim
только с другого хоста уже ;)
Maxim
ps -p `pgrep kubelet` -o args
Etki
ключевая аномалия у тебя какая-то там
Maxim
а все потому, что кто-то ленится читать мануалы до конца ;)
Maxim
еще и вместо официальных читает короосные
Maxim
если внимательно почитать официальную документацию в части аутентификации: http://kubernetes.io/docs/admin/authentication/
Maxim
то станет понятно, что городить весь этот хитрый SSL-огород вовсе необязательно
Maxim
и можно ограничиться публичной частью CA и токеном
Denis
даже так
Maxim
там ps из бизибокса чтоли?
Denis
Не исключено :)
Maxim
ну короче, покажи, как запускается кьюблет
Denis
Конкретно на этой машине:
ExecStart=/opt/bin/kubelet \
--address=0.0.0.0 \
--port=10250 \
--hostname-override=${COREOS_PRIVATE_IPV4} \
--api-servers=${MASTER_PRIVATE_IPV4}:8080 \
--allow-privileged=true \
--logtostderr=true \
--cadvisor-port=4194 \
--healthz-bind-address=0.0.0.0 \
--tls-cert-file=/etc/kubernetes/ssl/www1-worker.pem \
--tls-private-key-file=/etc/kubernetes/ssl/www1-worker-key.pem \
--cluster-dns=10.100.0.100 \
--cluster-domain="kube.local" \
--healthz-port=10248
Maxim
эээ
Maxim
а почему 8080?
Maxim
ты к апишечке по plain-http идешь?
Denis
Это фрагмент из cloud-init, я вот сейчас смотрю и тут явно ключи указаны старые, для прошлого ca.pem
Denis
Там же kube-proxy поднят
Denis
Я чё-то не помню зачем)
Denis
на 8080
Maxim
чочо?
Maxim
какой кубепрокси на 8080
Denis
а не, не так прочитал
Denis
там kube-apiserver
Maxim
kube-proxy - это та штука, которая тебе на хостах iptables настраивает
Denis
ExecStart=/opt/bin/kube-apiserver \
--allow-privileged=true \
--etcd-servers=http://127.0.0.1:2379 \
--secure-port=6443 \
--bind-address=0.0.0.0 \
--insecure-port=8080 \
--insecure-bind-address=0.0.0.0 \
--service-cluster-ip-range=10.100.0.0/24 \
--runtime-config=extensions/v1beta1=true,extensions/v1beta1/thirdpartyresources=true \
--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota \
--tls-cert-file=/etc/kubernetes/ssl/apiserver.pem \
--tls-private-key-file=/etc/kubernetes/ssl/apiserver-key.pem \
--client-ca-file=/etc/kubernetes/ssl/ca.pem \
--service-account-key-file=/etc/kubernetes/ssl/apiserver-key.pem \
--kubelet-certificate-authority=/etc/kubernetes/ssl/ca.pem \
--kubelet-client-certificate=/etc/kubernetes/ssl/apiserver.pem \
--kubelet-client-key=/etc/kubernetes/ssl/apiserver-key.pem \
--service-node-port-range='70-32767' \
--logtostderr=true
Maxim
она должна быть на всех нодах
Denis
да, она на всех хостах, просто туда же смотрит на master:8080
Maxim
--insecure-port=8080 \
--insecure-bind-address=0.0.0.0 \
Denis
да
Maxim
ты можешь сертификаты выкидывать
Maxim
они тебе не нужны
Denis
приехали
Maxim
ну я серьезно
Maxim
ты всему миру разрешил входить в апи не представляясь
Denis
не всё так просто :) там iptables только 80 и 443 разрешает с мира
Maxim
я не об этом
Denis
но надо выпилить insecure да?
Maxim
те, кто может дойти до http://<apiserver>:8080, получают рут-акцесс до кубернетеса забесплатно
Maxim
ну то есть внутри кластера тебе сертификаты не нужны
Maxim
ты сам сделал их использование ненужным
Denis
ок, тут дилемма - стоит ли разрешать доступ без сертификатов с других серверов кластера?
Denis
вроде как нет
Denis
это может быть неустойчиво к man-in-the-middle атакам
Maxim
не стоит конечно
Maxim
более того, если ты решил развивать тему с аутентификацией посредством сертификатов, то выпускай уникальную пару для каждого сервера
Maxim
с рестриктом по айпи
Maxim
потому что отозвать, в случае чего, ты их не сможешь
Denis
сейчас уже сертификаты уникальные для каждой машины
Denis
а как restrict по IP задать?
Maxim
покажи openssl x509 -in /где/там/сертификат/любого/хоста.pem -text -noout|grep DNS
Denis
а, ты про это
Maxim
?
Denis
шаблон такой:
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
IP.1 = \$ENV::MINION_IP
EOL
Maxim
а, во
Maxim
то есть с другой машины этим сертификатом уже не воспользоваться
Denis
фак-оф им всем :)
Maxim
ну хоть так
Denis
надо изменить параметры запуска apiserver тогда
Maxim
ты там с кьюблетом-то разобрался на .18?
Denis
как я понял
Maxim
ну да
Maxim
у меня там ... --bind-address=0.0.0.0 --secure-port=8443 --insecure-bind-address=127.0.0.1 --insecure-port=8080 ...
Denis
сейчас в мануале COS:
- apiserver
- --bind-address=0.0.0.0
- --etcd-servers=${ETCD_ENDPOINTS}
- --allow-privileged=true
- --service-cluster-ip-range=${SERVICE_IP_RANGE}
- --secure-port=443
- --advertise-address=${ADVERTISE_IP}
- --admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota
- --tls-cert-file=/etc/kubernetes/ssl/apiserver.pem
- --tls-private-key-file=/etc/kubernetes/ssl/apiserver-key.pem
- --client-ca-file=/etc/kubernetes/ssl/ca.pem
- --service-account-key-file=/etc/kubernetes/ssl/apiserver-key.pem
- --runtime-config=extensions/v1beta1=true,extensions/v1beta1/networkpolicies=true
Denis
у тебя тоже insecure?
Maxim
у меня insecure только для локалхоста
Maxim
а учитывая, что оно в контейнере, считай для никого
Denis
а какого фига они тут тут apiserver в поде запускают? https://coreos.com/kubernetes/docs/latest/deploy-master.html
Maxim
на самый критический случай чтобы можно было попасть в апи, когда вообще все сломается
Maxim
Maxim
у меня так же
Maxim
# ls /etc/kubernetes/manifests/
addon-manager.yaml apiserver.yaml controller-manager.yaml etcd.yaml proxy.yaml scheduler.yaml
Maxim
весь кубернетес стартует в контейнерах