Поиск и устранение неполадок
В следующих разделах описывается, как устранять неполадки с сервером Chef Infra Server, клиентом Chef Infra Client и рабочей станцией Chef Workstation.
401 Неавторизован
Существует несколько причин ошибки Chef 401 «Неавторизован», поэтому, пожалуйста, воспользуйтесь разделами ниже, чтобы найти сообщение об ошибке, наиболее соответствующее вашему выводу. Если вы не сможете найти соответствующую ошибку или предоставленные шаги не окажутся полезными, пожалуйста, отправьте запрос в службу поддержки.
Не удалось аутентифицироваться как ORGANIZATION-валидатор
Если вы получаете ошибку, подобную следующей, скорее всего, потребуется перегенерировать файл ORGANIZATION-validator.pem:
INFO: Client key /etc/chef/client.pem is not present - registering
INFO: HTTP Request Returned 401 Unauthorized: Failed to authenticate as ORGANIZATION-validator. Ensure that your node_name and client key are correct.
FATAL: Stacktrace dumped to c:/chef/cache/chef-stacktrace.out
FATAL: Net::HTTPClientException: 401 "Unauthorized"
Шаги по устранению неполадок
-
Проверьте, существует ли файл ORGANIZATION-validator.pem в одном из следующих расположений:
~/.chef ~/projects/current_project/.chef /etc/chefЕсли такой файл существует, убедитесь, что он имеет правильные разрешения на чтение.
-
Если файл ORGANIZATION-validator.pem отсутствует, перегенерируйте его.
Пересоздайте этот файл, перейдя на веб-интерфейс консоли управления Chef и выбрав Организации в правом верхнем углу экрана.
Затем вы можете выбрать Сбросить ключ валидации рядом с организацией, для которой нужно сбросить ключ.
Не удалось аутентифицироваться на
Если значения некоторых параметров в файле client.rb — node_name и client_key — неверны, аутентификация на сервере Chef Infra Server не удастся. Будет показана ошибка, похожая на следующую:
ERROR: Failed to authenticate to https://api.opscode.com/organizations/ORGANIZATION as USERNAME with key /path/to/USERNAME.pem
Response: Failed to authenticate as USERNAME. Ensure that your node_name and client key are correct.
Шаги по устранению неполадок
Убедитесь, что вы указали правильные значения в вашем файле config.rb, особенно для параметров
node_nameиclient_key.-
Проверьте, существует ли файл, на который ссылается параметр
client_key(обычно USER.pem). Некоторые распространенные места расположения:- ~/.chef - ~/projects/current_project/.chef - /etc/chefЕсли такой файл существует, убедитесь, что он имеет правильные разрешения на чтение.
Если файл client.rb отсутствует, перегенерируйте его и убедитесь, что значения параметров
node_nameиclient_keyверны.
Организация не найдена
Если при попытке пересоздания ORGANIZATION-validator.pem появляется эта ошибка, возможно, сам клиент Chef Infra Client был удален. В этой ситуации ORGANIZATION-validator.pem нужно будет пересоздать. В этих инструкциях ORGANIZATION следует заменить на имя вашей организации.
Для сброса ключа chef-validator:
Откройте консоль управления Chef.
Нажмите Политика.
Нажмите Клиенты.
Выберите ключ chef-validator.
Перейдите на вкладку Подробности.
Нажмите Сбросить ключ.
-
В диалоговом окне «Сбросить ключ» подтвердите, что ключ нужно перегенерировать, и нажмите кнопку «Сбросить ключ»:
-
Скопируйте закрытый ключ:
или загрузите и сохраните закрытый ключ локально:
Синхронизируйте время на вашем хосте
Если системные часы отклоняются более чем на 15 минут от реального времени, будет показана ошибка следующего типа:
INFO: Client key /etc/chef/client.pem is not present - registering
INFO: HTTP Request Returned 401 Unauthorized: Failed to authenticate as ORGANIZATION-validator. Synchronize the clock on your host.
FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
FATAL: Net::HTTPClientException: 401 "Unauthorized"
Для устранения этой ошибки синхронизируйте время с NTP-сервером.
Все остальные ошибки 401
Общее сообщение об ошибке Net::HTTPClientException: 401 "Unauthorized" обычно возникает по одной из двух причин.
Шаги по устранению неполадок
-
Убедитесь, что ваш
client.pemдействителен.Это можно исправить, удалив
client.pemв/etc/chefи удалив клиента и узел с помощью knife.На станции управления:
# Dump the current node to JSON knife node show NODE_NAME -fJ > NODE_NAME.json knife client delete FQDN -y knife node delete FQDN -yНа узле, который пострадал (как root):
rm /etc/chef/client.pem chef-clientПри запуске Chef Infra Client клиент API зарегистрируется и сгенерируется правильный ключ.
После успешного запуска Chef Infra Client на узле перезагрузите атрибуты
run_listи узла:knife node from file NODE_NAME.json -
Убедитесь, что вы используете тот же
node_name, что и при первоначальном запуске Chef Infra Client.Это может произойти по нескольким причинам. Например, если в файле client.rb не указано правильное имя узла, а имя хоста системы изменилось.
Выполнение
chef-client -l debugпозволит определить имя узла, используемое Chef Infra Client для попыток аутентификации:DEBUG: Signing the request as SOME_NODE_NAMEЭто можно исправить, явно установив
node_nameв файле client.rb так, чтобы оно соответствовало имени, первоначально использовавшемуся при регистрации.node_node ‘mynode.mycompany.com’
В качестве альтернативы, зарегистрируйте узел снова, используя описанный ранее метод.
403 Запрещено
Если вы видите вывод, похожий на этот:
FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
FATAL: Net::HTTPClientException: 403 "Forbidden"
это указывает на проблему с правами доступа на сервере Chef Infra Server.
Шаги по устранению неполадок
В Chef существуют два типа проблем с правами доступа: специфичные для объекта и глобальные права. Чтобы определить, с каким типом проблемы вы столкнулись, запустите Chef Infra Client еще раз, используя опции -l debug для получения отладочного вывода.
Вы должны увидеть что-то вроде этого в стеке исключений:
DEBUG: Sending HTTP Request to https://api.opscode.com/organizations/ORGNAME/nodes
ERROR: Running exception handlers
URL поможет определить тип проблемы с правами. Если URL относится к действию индекса (т. е. выполняется с коллекцией ресурсов, например, /nodes), то это глобальная проблема с правами. Если URL относится к экземпляру коллекции (например, /nodes/NODENAME), то это проблема с правами на объект.
Для исправления глобальных прав:
Войдите в консоль управления Chef и нажмите на тип объекта, вызвавшего ошибку (вероятно, Узлы).
-
Перейдите на вкладку Разрешения. Необходимые разрешения зависят от того, какой запрос завершился ошибкой:
GET - в разделе группы убедитесь, что включена опция LIST. POST - в разделе группы убедитесь, что включена опция CREATE.
Установите необходимые флажки и сохраните изменения.
Для исправления прав на объекты:
Войдите в консоль управления Chef и нажмите на тип объекта, вызвавшего ошибку (вероятно, Узлы).
Выберите объект в списке, вызвавший ошибку.
-
Перейдите на вкладку Разрешения. Необходимые разрешения зависят от типа завершившегося ошибкой запроса:
GET - убедитесь, что включена опция READ. PUT - убедитесь, что включена опция UPDATE. DELETE - убедитесь, что включена опция DELETE.
Установите необходимые флажки и сохраните изменения.
500 (Неожиданная)
HTTP 500 — это неспецифическое сообщение об ошибке. Полное сообщение об ошибке, которое получает Chef Infra Client, можно найти в одном из следующих журналов:
/var/log/opscode/opscode-account/current/var/log/opscode/opscode-erchef/current
Вероятно, ошибка будет найдена в стеке исключений приложения. В некоторых случаях сообщение об ошибке явно указывает на проблему с другой службой, которую можно дополнительно исследовать. Для неявных ошибок, пожалуйста, свяжитесь с Chef и приложите журналы.
502 / 504 (Шлюз)
Определите, какая служба API возвращает 504, используя журналы доступа Nginx. Запросы API, возвращающие 504, можно найти с помощью следующей команды на фронте:
grep 'HTTP/1.1" 504' /var/log/opscode/nginx/access.log
Следующее извлечет URL-адреса и отсортирует их по количеству uniq:
grep 'HTTP/1.1" 504' nginx-access.log | cut -d' ' -f8 | sort | uniq -c | sort
В большой установке может потребоваться ограничить это подмножеством запросов:
tail -10000 nginx-access.log | grep 'HTTP/1.1" 504' | cut -d' ' -f8 | sort | uniq -c | sort
Также можно использовать утилиту ntail.
Если проблемная служба основана на Ruby, а на машинах фронта достаточно оперативной памяти или ЦП, рассмотрите возможность увеличения числа рабочих процессов. Если проблемная служба — opscode-erchef, используйте журнал запросов, чтобы определить, какой конкретный компонент запросов работает медленно.
Проблемы с рабочим процессом
При работе с Chef, скорее всего, вы столкнетесь с проблемами в обычном рабочем процессе. Эта страница содержит сборник распространенных ошибок, сообщенных нашими пользователями при работе с Chef. Используйте аккордеон ниже, чтобы выбрать сообщение об ошибке, наиболее соответствующее вашему выводу. Если вы не сможете найти соответствующую ошибку или предоставленные шаги не окажутся полезными, пожалуйста, отправьте запрос в службу поддержки.
Файл или директория не найдены
Если вы видите ошибку, подобную:
Client key /etc/chef/client.pem is notresent - registering
WARN: Failed to read the private key /etc/che/validation.pem: #<Errno::ENOENT: No such file or directory - /etc/chef/validation.pem>
FATAL: Stacktrace dumped to /etc/chef/cache/chef-stacktrace.out
FATAL: Chef::Exceptions::PrivateKeyMissing: I cannot read /etc/chef/validation.pem, which you told me to use to sign requests
это означает, что Chef Infra Client не смог найти ваш validation.pem.
Шаги по устранению неполадок
- Убедитесь, что ваш
validation.pemилиORGANIZATION-validator.pemскачан и доступен для текущего пользователя. - Убедитесь, что ваш client.rb указывает на расположение вашего validator pem.
Сохраните или заархивируйте свои изменения
Это не ошибка, но может сбивать с толку новых пользователей. При попытке установить поварскую книгу с изменениями, которые не были сохранены в git, вы получите эту ошибку:
Installing getting-started to /home/jes/chef-repo/.chef/../cookbooks
ERROR: You have uncommitted changes to your cookbook repo:
M cookbooks/getting-started/recipes/default.rb
?? .chef/
?? log
Commit or stash your changes before importing cookbooks
Шаги по устранению неполадок
Решите эту проблему, сохранив изменения в кулинарной книге. Например, следующая команда сохранит все новые изменения с сообщением «обновления»:
git commit -am "Updating so I can install a site cookbook"
Запустите подкоманду knife supermarket install еще раз, чтобы установить кулинарную книгу сообщества.
Файл конфигурации не найден
Если вы видите ошибку, подобную:
WARN: *****************************************
WARN: Can not find config file: /etc/chef/client.rb, using defaults.
WARN: No such file or directory - /etc/chef/client.rb
# ... output truncated ... #
FATAL: Chef::Exceptions::PrivateKeyMissing: I cannot read /etc/chef/validation.pem, which you told me to use to sign requests!
Шаги по устранению неполадок
Обойдите эту проблему, указав полный путь к файлу client.rb:
chef-client -c /etc/chef/client.rb
Pivotal.rb не существует
Если вы видите ошибку, подобную:
ERROR: CONFIGURATION ERROR:Specified config file /etc/opscode/pivotal.rb does not exist
Шаги по устранению неполадок
Запустите следующее, чтобы перезапустить все службы:
chef-server-ctl reconfigure
Так как сервер Chef Infra Server состоит из многих взаимодействующих служб, этот шаг может занять несколько минут.
Внешний PostgreSQL
При настройке сервера Chef Infra Server для использования удаленного сервера PostgreSQL могут появиться следующие сообщения об ошибках.
CSPG001 (изменённое значение)
Причина
Значение postgresql['external'] было изменено.
Возможные причины
- Это значение должно быть установлено перед запуском
chef-server-ctl reconfigure, и после этого его нельзя изменить
Предупреждение
Решение
- Сделайте резервную копию данных, используя
knife ec backup, создайте новый экземпляр бэкэнда и затем восстановите данные - Перенаправьте машины фронтального конца на новый экземпляр бэкэнда или назначьте новому экземпляру бэкэнда имя/VIP старого экземпляра бэкэнда (включая сертификаты, ключи и так далее)
CSPG010 (невозможно подключиться)
Причина
Невозможно подключиться к PostgreSQL на удалённом сервере.
Возможные причины
- PostgreSQL не запущен на удалённом сервере
- Порт, используемый PostgreSQL, заблокирован брандмауэром на удалённом сервере
- Конфигурация маршрутизации сети препятствует доступу к хосту
- При использовании Amazon Web Services (AWS) правила для групп безопасности не позволяют серверу Chef Infra взаимодействовать с PostgreSQL
CSPG011 (невозможно авторизоваться)
Причина
Невозможно авторизоваться в PostgreSQL на удалённом сервере.
Возможные причины
- Указан неверный пароль для
db_superuser_password - Указано неверное имя пользователя для
db_superuser
CSPG012 (неверные правила)
Причина
Невозможно подключиться к PostgreSQL на удалённом сервере, поскольку правила в pg_hba неверны.
Возможные причины
- Нет правила
pg_hba.confдляdb_superuserв PostgreSQL - Правило для
db_superuserвpg_hba.conf, но оно не указывает доступ кmd5 - Правило в
pg_hba.confуказывает неверный адрес источника
Решение
-
Записи в файле
pg_hba.confдолжны разрешать всем именам пользователей, которые исходят от любого экземпляра сервера Chef Infra, использующего аутентификациюmd5. Например, записьpg_hba.confдля действительного имени пользователя и пароля из подсети 192.0.2.0:host postgres all 192.0.2.0/24 md5или, конкретные именованные пользователи с действительным паролем, исходящие из подсети 192.0.2.0. Должен быть создан файл с именем
$PGDATA/chef_usersсо следующим содержимым:opscode_chef opscode_chef_ro bifrost bifrost_ro oc_id oc_id_roгде
CHEF-SUPERUSER-NAMEзаменяется тем же именем пользователя, что указано вpostgresql['db_superuser']. Соответствующая запись вpg_hba.confпохожа на:host postgres @chef_users 192.168.93.0/24 md5или, используя тот же файл
$PGDATA/chef_users(из предыдущего примера), следующий пример показывает способ ограничения подключений к конкретным узлам, на которых работают компоненты сервера Chef Infra. Этот подход требует большего обслуживания, потому что файлpg_hba.confнеобходимо обновлять при добавлении или удалении машин из конфигурации сервера Chef Infra. Например, конфигурация высокой доступности с четырьмя узлами:backend-1(192.0.2.100),backend-2(192.0.2.101),frontend-1(192.0.2.110) иfrontend-2(192.0.2.111).Соответствующая запись в
pg_hba.confпохожа на:host postgres @chef_users 192.0.2.100 md5 host postgres @chef_users 192.0.2.101 md5 host postgres @chef_users 192.0.2.110 md5 host postgres @chef_users 192.0.2.111 md5Эти изменения также требуют перезагрузки конфигурации для PostgreSQL:
pg_ctl reloadили:
SELECT pg_reload_conf(); Правила в файле
pg_hba.confдолжны разрешать только определённые имена приложений:$db_superuser(указанное в файле chef-server.rb имя суперпользователя),oc_id,oc_id_ro,opscode_chef,opscode_chef_ro,bifrost, иbifrost_ro
CSPG013 (неверные разрешения)
Причина
У учётной записи db_superuser неверные разрешения.
Возможные причины
Учётной записи
db_superuserне предоставлен доступSUPERUSER-
Учётной записи
db_superuserне предоставлены привилегииCREATE DATABASEиCREATE ROLEALTER ROLE "$your_db_superuser_name" WITH SUPERUSERили:
ALTER ROLE "$your_db_superuser_name" WITH CREATEDB CREATEROLE
CSPG014 (неверная версия)
Причина
Неправильная версия PostgreSQL.
Возможные причины
- На удалённом сервере не запущена версия PostgreSQL 9.2.x
CSPG015 (отсутствующая база данных)
Причина
Шаблон базы данных template1 отсутствует.
Возможные причины
- Шаблон базы данных
template1был удалён с удалённого сервера
Решение
-
Выполните следующую команду (от имени суперпользователя):
CREATE DATABASE template1 TEMPLATE template0или:
createdb -T template0 template1
CSPG016 (база данных существует)
Причина
Одна (или более) из баз данных PostgreSQL уже существует.
Возможные причины
- Базы данных
opscode_chef,oc_id, и/илиbifrostуже существуют на удалённой машине - База данных PostgreSQL существует для другого приложения
Решение
- Убедитесь, что базы данных
opscode_chef,oc_id, и/илиbifrostсуществуют, и убедитесь, что они не используются другим внутренним приложением - Сделайте резервную копию данных PostgreSQL, удалите существующие базы данных и переконфигурируйте сервер Chef
CSPG017 (пользователь существует)
Причина
Один (или более) из предопределённых пользователей PostgreSQL уже существует.
Возможные причины
- Пользователи
opscode_chef,ospcode_chef_ro,bifrost,bifrost_ro,oc_id, илиoc_id_roуже существуют на удалённой машине - Настройка
postgresql['vip']настроена на удалённый хост, ноpostgresql['external']не установлено значениеtrue, что приводит к созданию пользователейopscode_chefиospcode_chef_roдо переконфигурации машины, что вызовет ошибку разрешений - Существуют конфликты именования, где пользователи были созданы независимо от сервера Chef
Решение
-
Выполните следующее, если это безопасно, чтобы обновить имя пользователя, указанное в сообщении об ошибке:
DROP ROLE "name-of-user";или измените имя пользователя, обновив следующие настройки в файле конфигурации chef-server.rb:
oc_id['sql_user'] = 'alternative_username' oc_id['sql_ro_user'] = alternative_username_for_ro_access' opscode_erchef['sql_user'] = 'alternative_username' opscode_erchef['sql_ro_user'] = 'alternative_username_for_ro_access' oc_bifrost['sql_ro_user'] = 'alternative_username' oc_bifrost['sql_ro_user'] = 'alternative_username_for_ro_access'
© Chef Software, Inc.
Licensed under the Creative Commons Attribution 3.0 Unported License.
The Chef™ Mark and Chef Logo are either registered trademarks/service marks or trademarks/servicemarks of Chef, in the United States and other countries and are used with Chef Inc's permission.
We are not affiliated with, endorsed or sponsored by Chef Inc.
https://docs.chef.io/errors/