Вопрос или проблема
Когда я запускаю команду ниже, я получаю ошибку, и мой код выхода равен 1. Может ли кто-нибудь объяснить, почему я получаю эту ошибку и как ее исправить?
Спасибо
kubectl exec etcd-master -- etcdctl member list
{"level":"warn","ts":"2024-12-28T12:28:32.978637Z","logger":"etcd-client","caller":"[email protected]/retry_interceptor.go:63","msg":"retrying of unary invoker failed","target":"etcd-endpoints://0xc000370000/127.0.0.1:2379","attempt":0,"error":"rpc error: code = DeadlineExceeded desc = последняя ошибка балансировщика: последняя ошибка соединения: ошибка соединения: desc = \"ошибка чтения начальной фразы сервера: EOF\""}
Ошибка: превышен срок ожидания контекста
команда завершена с кодом выхода 1
также мои логи etcd выглядят так. мой брандмауэр выключен, а selinux также в разрешающем режиме. Моя операционная система – rocky linux 9.3.
{"level":"warn","ts":"2024-12-28T12:42:13.018454Z","caller":"embed/config_logging.go:170","msg":"rejected connection on client endpoint","remote-addr":"127.0.0.1:52198","server-name":"","error":"tls: первая запись не похожа на TLS рукопожатие"}
{"level":"warn","ts":"2024-12-28T12:42:14.022364Z","caller":"embed/config_logging.go:170","msg":"rejected connection on client endpoint","remote-addr":"127.0.0.1:52214","server-name":"","error":"tls: первая запись не похожа на TLS рукопожатие"}
{"level":"warn","ts":"2024-12-28T12:42:15.330400Z","caller":"embed/config_logging.go:170","msg":"rejected connection on client endpoint","remote-addr":"127.0.0.1:52222","server-name":"","error":"tls: первая запись не похожа на TLS рукопожатие"}
{"level":"warn","ts":"2024-12-28T12:44:21.880909Z","caller":"embed/config_logging.go:170","msg":"rejected connection on client endpoint","remote-addr":"192.168.56.101:42196","server-name":"","error":"tls: первая запись не похожа на TLS рукопожатие"}
{"level":"warn","ts":"2024-12-28T12:44:22.883450Z","caller":"embed/config_logging.go:170","msg":"rejected connection on client endpoint","remote-addr":"192.168.56.101:42210","server-name":"","error":"tls: первая запись не похожа на TLS рукопожатие"}
{"level":"warn","ts":"2024-12-28T12:44:24.622810Z","caller":"embed/config_logging.go:170","msg":"rejected connection on client endpoint","remote-addr":"192.168.56.101:42220","server-name":"","error":"tls: первая запись не похожа на TLS рукопожатие"}
{"level":"warn","ts":"2024-12-28T12:44:26.821834Z","caller":"embed/config_logging.go:170","msg":"rejected connection on client endpoint","remote-addr":"192.168.56.101:42222","server-name":"","error":"tls: первая запись не похожа на TLS рукопожатие"}
{"level":"info","ts":"2024-12-28T12:46:45.062979Z","caller":"mvcc/index.go:214","msg":"компактизация индексного дерева","revision":228269}
{"level":"info","ts":"2024-12-28T12:46:45.079467Z","caller":"mvcc/kvstore_compaction.go:69","msg":"завершена запланированная компактизация","compact-revision":228269,"took":"10.947531ms","hash":4017906930,"current-db-size-bytes":3809280,"current-db-size":"3.8 MB","current-db-size-in-use-bytes":1859584,"current-db-size-in-use":"1.9 MB"}
{"level":"info","ts":"2024-12-28T12:46:45.079800Z","caller":"mvcc/hash.go:137","msg":"сохранение нового хэша","hash":4017906930,"revision":228269,"compact-revision":227809}
Ответ или решение
Проблема, с которой вы столкнулись при попытке проверить работу кластера etcd, заключается в ошибке при выполнении команды kubectl exec etcd-master -- etcdctl member list
. Давайте разберемся в причинах этой ошибки и способах ее устранения.
Анализ ошибки
-
Сообщение об ошибке:
- Основное сообщение об ошибке — "context deadline exceeded". Это обычно указывает на то, что операция превысила установленное время ожидания.
- Дополнительное сообщение: "tls: first record does not look like a TLS handshake" — предполагает, что проблема может быть связана с неправильной конфигурацией TLS.
-
Логи etcd:
- Логи содержат предупреждения об отклоненных соединениях по клиентской конечной точке с указанием ошибки TLS.
- В дополнение к этому, логи показывают информацию об успешных действиях, таких как компактификация и хеширование.
Варианты решения проблемы
-
Проверка конфигурации TLS:
- Убедитесь, что etcd настроен для работы с TLS соединениями. Это включает правильную конфигурацию сертификатов и ключей в конфигурации etcd и etcdctl.
- Проверьте, чтобы соответствующие файлы сертификатов были доступны и корректно указаны в конфигурационном файле etcd.
-
Пример конфигурации подключения с TLS:
export ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/path/to/ca.pem --cert=/path/to/etcd-client.pem --key=/path/to/etcd-client-key.pem member list
-
Проверка сетевых настроек и межсерверного взаимодействия:
- Убедитесь, что IP-адрес и порт, указанный в команде и конфигурации etcd, доступны и правильно настроены.
- Проверьте, чтобы конфигурация брандмауэра не препятствовала соединениям по необходимым портам (по умолчанию etcd использует порты 2379 и 2380).
-
Диагностика временного интервала операций:
- Возможно, необходимо увеличить значение тайм-аута, если операции требуют больше времени.
- Проверьте настройки тайм-аута в конфигурации, чтобы определить, увеличение времени ожидания может решить проблему.
-
Логирование и отладка:
- Активируйте более детализованный уровень логирования для etcd и kubectl, чтобы получить больше информации о происходящем на каждом этапе операции.
- Это поможет изолировать проблему, связанную с сетью, конфигурацией или чем-то еще.
Резюме
Ошибка context deadline exceeded
и предупреждения о TLS указывают на проблему в разрешении TLS или сетевых конфигурациях. Проверьте настройки TLS и убедитесь, что брандмауэр и другой сетевой софт не блокируют требуемые соединения. Эти шаги помогут разобраться в текущей конфигурации и внести необходимые коррективы для стабилизации работы кластера etcd.
Подписывайтесь на документацию: регулярно проверяйте какие изменения были внесены в последние версии, возможны изменения в оптимальных конфигурациях.