
Maxim
26.08.2016
15:32:03
и стал нот реди по этому поводу
ну тейлом или лессом

Denis
26.08.2016
15:32:36
евенты = только ошибки по kubedns

Maxim
26.08.2016
15:33:04
а в --namespace=default

Google

Maxim
26.08.2016
15:33:05
?
(я честно говоря не помню, к какому неймспейсу ноды прибиты)

Denis
26.08.2016
15:34:25
да, ноды в default и там сплошные Starting kubelet. для 18й

Maxim
26.08.2016
15:35:35
ну тогда только логи кьюблета

Denis
26.08.2016
15:42:28
хм
$ sudo journalctl -u kubelet
-- No entries --
$ sudo journalctl -u kubelet.service
-- No entries --
а он по другому
сколько всего интересного
Aug 26 15:43:11 www1 kubelet[38805]: F0826 15:43:11.279169 38805 server.go:118] crypto/tls: private key does not match public key
Видимо вот эта проблема

Maxim
26.08.2016
15:46:16
ну написато аглицким по черному: контейнер рантайм из даун
докер там умер
или рокет
или чем ты там контейнеры ворочаешь

Google

Denis
26.08.2016
15:47:10
да вроде жив
docker ps -a выдаёт список активных контейнеров

Maxim
26.08.2016
15:48:00
облин, а до тлс я не дочитал
извиняюсь
показывай параметры запуска кьюблета
только с другого хоста уже ;)
ps -p `pgrep kubelet` -o args

Fike
26.08.2016
15:51:25
ключевая аномалия у тебя какая-то там

Maxim
26.08.2016
15:52:08
а все потому, что кто-то ленится читать мануалы до конца ;)
еще и вместо официальных читает короосные
если внимательно почитать официальную документацию в части аутентификации: http://kubernetes.io/docs/admin/authentication/

Denis
26.08.2016
15:53:32

Maxim
26.08.2016
15:53:52
то станет понятно, что городить весь этот хитрый SSL-огород вовсе необязательно
и можно ограничиться публичной частью CA и токеном

Denis
26.08.2016
15:54:17
даже так

Maxim
26.08.2016
15:55:50
там ps из бизибокса чтоли?

Denis
26.08.2016
15:58:38
Не исключено :)

Maxim
26.08.2016
16:05:00
ну короче, покажи, как запускается кьюблет

Denis
26.08.2016
16:11:55
Конкретно на этой машине:
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

Google

Maxim
26.08.2016
16:14:01
эээ
а почему 8080?
ты к апишечке по plain-http идешь?

Denis
26.08.2016
16:14:31
Это фрагмент из cloud-init, я вот сейчас смотрю и тут явно ключи указаны старые, для прошлого ca.pem
Там же kube-proxy поднят
Я чё-то не помню зачем)
на 8080

Maxim
26.08.2016
16:16:54
чочо?
какой кубепрокси на 8080

Denis
26.08.2016
16:17:25
а не, не так прочитал
там kube-apiserver

Maxim
26.08.2016
16:17:35
kube-proxy - это та штука, которая тебе на хостах iptables настраивает


Denis
26.08.2016
16:17:38
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
26.08.2016
16:17:43
она должна быть на всех нодах

Denis
26.08.2016
16:17:58
да, она на всех хостах, просто туда же смотрит на master:8080

Maxim
26.08.2016
16:18:10
--insecure-port=8080 \
--insecure-bind-address=0.0.0.0 \

Denis
26.08.2016
16:18:16
да

Maxim
26.08.2016
16:18:21
ты можешь сертификаты выкидывать
они тебе не нужны

Denis
26.08.2016
16:18:31
приехали

Google

Maxim
26.08.2016
16:18:46
ну я серьезно
ты всему миру разрешил входить в апи не представляясь

Denis
26.08.2016
16:19:59
не всё так просто :) там iptables только 80 и 443 разрешает с мира

Maxim
26.08.2016
16:20:19
я не об этом

Denis
26.08.2016
16:20:36
но надо выпилить insecure да?

Maxim
26.08.2016
16:20:58
те, кто может дойти до http://<apiserver>:8080, получают рут-акцесс до кубернетеса забесплатно
ну то есть внутри кластера тебе сертификаты не нужны
ты сам сделал их использование ненужным

Denis
26.08.2016
16:22:51
ок, тут дилемма - стоит ли разрешать доступ без сертификатов с других серверов кластера?

Admin
ERROR: S client not available

Denis
26.08.2016
16:23:01
вроде как нет
это может быть неустойчиво к man-in-the-middle атакам

Maxim
26.08.2016
16:24:27
не стоит конечно
более того, если ты решил развивать тему с аутентификацией посредством сертификатов, то выпускай уникальную пару для каждого сервера
с рестриктом по айпи
потому что отозвать, в случае чего, ты их не сможешь

Denis
26.08.2016
16:26:16
сейчас уже сертификаты уникальные для каждой машины
а как restrict по IP задать?

Maxim
26.08.2016
16:28:59
покажи openssl x509 -in /где/там/сертификат/любого/хоста.pem -text -noout|grep DNS

Denis
26.08.2016
16:29:22
а, ты про это

Google

Maxim
26.08.2016
16:29:40
?

Denis
26.08.2016
16:29:55
шаблон такой:
[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
26.08.2016
16:30:09
а, во
то есть с другой машины этим сертификатом уже не воспользоваться

Denis
26.08.2016
16:30:39
фак-оф им всем :)

Maxim
26.08.2016
16:31:09
ну хоть так

Denis
26.08.2016
16:31:30
надо изменить параметры запуска apiserver тогда

Maxim
26.08.2016
16:31:34
ты там с кьюблетом-то разобрался на .18?

Denis
26.08.2016
16:31:35
как я понял

Maxim
26.08.2016
16:31:40
ну да
у меня там ... --bind-address=0.0.0.0 --secure-port=8443 --insecure-bind-address=127.0.0.1 --insecure-port=8080 ...

Denis
26.08.2016
16:33:40
сейчас в мануале 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
у тебя тоже insecure?

Maxim
26.08.2016
16:34:15
у меня insecure только для локалхоста
а учитывая, что оно в контейнере, считай для никого

Denis
26.08.2016
16:34:56
а какого фига они тут тут apiserver в поде запускают? https://coreos.com/kubernetes/docs/latest/deploy-master.html

Maxim
26.08.2016
16:34:59
на самый критический случай чтобы можно было попасть в апи, когда вообще все сломается
у меня так же
# ls /etc/kubernetes/manifests/
addon-manager.yaml apiserver.yaml controller-manager.yaml etcd.yaml proxy.yaml scheduler.yaml
весь кубернетес стартует в контейнерах

Denis
26.08.2016
16:36:20