ETCD kubeadm getsockopt: в соединении отказано

Я хотел бы использовать функции etcdctl моего модуля etcd из моего кластера kurnetes, но я не могу. Я установил свои кубернеты из kubeadm, и у меня есть 1 мастер и 1 узел.

Когда я пытаюсь выполнить команды etcdctl из своего модуля etcd, я получаю следующие ошибки:

клиент: кластер etcd недоступен или неправильно настроен;
ошибка № 0: неверный HTTP-ответ «\ x15 \ x03 \ x01 \ x00 \ x02 \ x02»;
ошибка № 1: наберите tcp 127.0.0.1:4001: getsockopt : В соединении отказано

Но когда я проверяю свой журнал пода etcd, он кажется нормальным:

введите здесь описание изображения


person Yummel    schedule 30.07.2018    source источник
comment
Вы выставляли свой ETCD от кубернетов? потому что он находится внутри кластера и не может прослушивать порт 4001 на локальном хосте.?   -  person Nick Rak    schedule 31.07.2018


Ответы (2)


Похоже, у вас etcd прослушивание клиентских подключений на https://127.0.0.1:2379, и у вас включена проверка подлинности сертификата клиента, насколько я могу судить. После этого вы сможете выполнить следующую команду для подключения к etcd:

ETCDCTL_API=3 etcdctl member list \
  --endpoints=https://127.0.0.1:2379 \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key

Обычно etcd ожидает, что вы аутентифицируетесь с помощью сертификата клиента.

Кроме того, поскольку вы используете версию 3.x из etcd, вы должны сообщить об этом etcdctl, указав переменную среды ETCDCTL_API.

РЕДАКТИРОВАТЬ:

Для справки:

Я использовал kubeadm версию 1.11.1, которая установила версию 3.2.18 из etcd на сервере под управлением Ubuntu 18.04 при тестировании приведенной выше команды.

person mikejoh    schedule 01.08.2018
comment
Кажется, лучше, но проблема все еще возникает У меня это сообщение об ошибке: warning: ignoring ServerName for user-provided CA for backwards compatibility is deprecated Error: grpc: timed out when dialing - person Yummel; 02.08.2018
comment
@Yummel Хорошо, что ты сделал хотя бы один шаг вперед! Это может быть проблема аутентификации TLS ... возможно, я ошибся, используя сертификат, который использовал в своем ответе. AFAIK kubeadm генерирует сертификаты с правильными SAN (альтернативными именами субъектов) и 127.0.0.1 туда включены. Проверьте сети хранения данных с помощью: openssl x509 -in /etc/kubernetes/pki/etcd/server.crt -text -noout, найдите их в разделе расширений x509v2. В файле манифеста (yaml), который kubeadm генерирует для etcd, настроен зонд живучести, протестируйте его с помощью этой команды etcdctl один раз. Используемый там сертификат может работать. - person mikejoh; 02.08.2018
comment
@Yummel Я безуспешно пытался воспроизвести вашу ошибку, используя главный узел Ubuntu 18.04, инициализированный с помощью kubeadm init, чтобы я мог получить доступ к контейнеру etcd. У меня все работает нормально на etcd версии 3.2.18, они увеличили версию etcd по умолчанию в kubeadm с 3.1.12 до 3.2.18 около 5 месяцев назад, может быть, это будет лучше, если вы обновите kubeadm до последней версии (у меня 1.11 .1) и перезапустите свой кластер. Кроме того, это предупреждение о ServerName исчезло в последней версии etcd, насколько я понимаю, они его удалили. - person mikejoh; 03.08.2018
comment
Хорошо, спасибо за ответ! У меня есть проверка SAN, это localhost, но у меня только версия v3, а не v2. Затем я проверяю манифест и пытаюсь безуспешно запустить ту же команду - person Yummel; 03.08.2018
comment
@Yummel Выглядит нормально, я думаю, и если вы введете эту команду etcdctl с member list вместо get foo, вы увидите список ваших etcd участников кластера, верно? В etcd 3.2.18 команда в моем ответе работает безупречно с использованием файлов server.key и server.crt для аутентификации, но для вас это заканчивается этой timed out when dialing ошибкой. - person mikejoh; 03.08.2018
comment
Я пытаюсь обновить свой кластер, но тоже не получается из-за etcd - person Yummel; 03.08.2018
comment
Я не уверен, как выглядит ваша среда, используется ли этот кластер для тестирования или вы используете его в производственной среде? kubeadm версии следуют за kubernetes выпусками, если вы не возражаете, вы можете разорвать их и повторно инициализировать с более новой версией всех двоичных файлов, необходимых для запуска kubeadm. Думаю, вы видели следующий раздел в руководстве по установке kubeadm: kubernetes.io/docs/setup/independent/install-kubeadm/. Я никогда не обновлял только etcd на kubeadm, хотя подозреваю, что это возможно. - person mikejoh; 03.08.2018
comment
Спасибо, это работает ! но если я хочу изучить данные кубернетов, какую команду мне следует использовать? - person Yummel; 03.08.2018
comment
Большой! Я бы порекомендовал вам просмотреть эти данные через сервер API. Но с etcdctl вы могли бы сделать что-то вроде get "" --prefix=true. Пожалуйста, перейдите по этой ссылке для получения дополнительной информации о том, как получить доступ к API кластера: kubernetes .io / docs / tasks / administer-cluster / access-cluster-api, я обновлю свой ответ версией etcd, с которой я тестировал исходную команду. Не забудьте пометить его как ответ, если чувствуете, что он у вас есть :) - person mikejoh; 03.08.2018

ETCDCTL_API = 3 etcdctl --endpoints = localhost: 2379 --cacert = / etc / kubernetes / pki / etcd / ca.crt --cert = / etc / kubernetes / pki / etcd / healthcheck-client.crt --key = / etc / kubernetes / pki / etcd / healthcheck-client.key список участников

person Yummel    schedule 03.08.2018