У меня 3 сервера
Следуя этому руководству для шеф-повара и шеф-повара
https://www.itzgeek.com/how-tos/linux/centos-how-tos/setup-chef-12-centos-7-rhel-7.html
повар 192.168.1.200 Centos7
рабочая станция 192.168.1.200 Centos7
chefnode 192.168.1.210 Windows Server 2016
Я установил пользователя Windows на сервере с доступом администратора.
пользователь: chefUSER
У меня есть настройка chefmaster и настроен работающий chef 13.1.13
У меня есть настройка chefworkstation и настроен запуск chefdk-0.19.6-1.el7.x86_64
Гугл, кажется, только понял, как установить сервер шеф-повара на Windows. Я пытаюсь установить клиента, чтобы он стал узлом.
Я пытался:
нож bootstrap -o winrm 192.168.1.210 -u chefUSER -P ПАРОЛЬ
[root@chefworkstation .chef]# chef -v
ChefDK version: 4.6.35
Chef Infra Client version: 15.5.17
Chef InSpec version: 4.18.39
Test Kitchen version: 2.3.4
Foodcritic version: 16.2.0
Cookstyle version: 5.13.7
[root@chefworkstation .chef]# knife bootstrap -o winrm 192.168.1.210 -u chefUSER -P PASSWORD -N winnode1 -VV
INFO: Using configuration from /root/chef-repo/.chef/knife.rb
DEBUG: Checking if we need to accept Chef license to bootstrap node
DEBUG: Reading products and relationships...
DEBUG: Successfully read products and relationships
DEBUG: License acceptance required for chef version: 15
DEBUG: Searching for the following licenses: ["infra-client", "inspec"]
DEBUG: Found license chef_infra_client at /etc/chef/accepted_licenses/chef_infra_client
DEBUG: Found license inspec at /etc/chef/accepted_licenses/inspec
DEBUG: Missing licenses remaining: []
DEBUG: All licenses present
Connecting to 192.168.1.210
DEBUG: winrm-fs requested, loading WinRM::FS gem (~> 1.0)
DEBUG: WinRM::FS previously loaded
DEBUG: [WinRM] @192.168.1.210<{:transport=>:negotiate, :disable_sspi=>false, :basic_auth_only=>false, :endpoint=>"http://192.168.1.210:5985/wsman", :user=>"administrator", :password=>"<hidden>", :no_ssl_peer_verification=>false, :realm=>nil, :service=>nil, :ca_trust_file=>nil, :ssl_peer_fingerprint=>nil}> (Write-Host '[WinRM] Established
')
DEBUG: [WinRM] opening remote shell on http://192.168.1.210:5985/wsman
DEBUG: [WinRM] Endpoint doesn't support config request for MaxEnvelopsizekb
DEBUG: [WinRM] opening remote shell on http://192.168.1.210:5985/wsman
DEBUG: [WinRM] Endpoint doesn't support config request for MaxEnvelopsizekb
Из источника
./lib/ruby/gems/2.6.0/gems/winrm-2.3.3/lib/winrm/shells/power_shell.rb
# calculate the maimum fragment size so that they will be as large as possible yet
# no greater than the max_envelope_size_kb on the end point. To calculate this
# threshold, we:
# - determine the maximum number of bytes accepted on the endpoint
# - subtract the non-fragment characters in the SOAP envelope
# - determine the number of bytes that could be base64 encded to the above length
# - subtract the fragment header bytes (ids, length, etc)
def max_envelope_size_kb
@max_envelope_size_kb ||= begin
config_msg = WinRM::WSMV::Configuration.new(connection_opts)
msg = config_msg.build
resp_doc = transport.send_request(msg)
REXML::XPath.first(resp_doc, "//*[local-name() = 'MaxEnvelopeSizekb']").text.to_i
ensure
logger.debug("[WinRM] Endpoint doesn't support config request for MaxEnvelopsizekb")
end
# rubocop:enable Layout/RescueEnsureAlignment
end
Отсюда я изменил пару настроек в моем WinRM, которые, похоже, не имеют значения.
PS C:\Windows\system32> winrm get winrm/config
Config
MaxEnvelopeSizekb = 500
MaxTimeoutms = 60000
MaxBatchItems = 32000
MaxProviderRequests = 4294967295
Client
NetworkDelayms = 5000
URLPrefix = wsman
AllowUnencrypted = true
Auth
Basic = true
Digest = true
Kerberos = true
Negotiate = true
Certificate = true
CredSSP = false
DefaultPorts
HTTP = 5985
HTTPS = 5986
TrustedHosts
Service
RootSDDL = O:NSG:BAD:P(A;;GA;;;BA)(A;;GR;;;IU)S:P(AU;FA;GA;
MaxConcurrentOperations = 4294967295
MaxConcurrentOperationsPerUser = 1500
EnumerationTimeoutms = 240000
MaxConnections = 300
MaxPacketRetrievalTimeSeconds = 120
AllowUnencrypted = true
Auth
Basic = true
Kerberos = true
Negotiate = true
Certificate = false
CredSSP = false
CbtHardeningLevel = Relaxed
DefaultPorts
HTTP = 5985
HTTPS = 5986
IPv4Filter = *
IPv6Filter = *
EnableCompatibilityHttpListener = true
EnableCompatibilityHttpsListener = false
CertificateThumbprint
AllowRemoteAccess = true
Winrs
AllowRemoteShellAccess = true
IdleTimeout = 7200000
MaxConcurrentUsers = 2147483647
MaxShellRunTime = 2147483647
MaxProcessesPerShell = 2147483647
MaxMemoryPerShellMB = 2147483647
MaxShellsPerUser = 2147483647
Большая часть этого взята из https://www.itzgeek.com/how-tos/linux/centos-how-tos/setup-chef-12-centos-7-rhel-7.html что примерно на 90% верно, части, которые не работали, могли быть связаны с тем, что страница ссылается на более старую версию chef
3 Сервера
Centos 7 - 192.168.1.200 chefmaster.local chefmaster
Centos 7 - 192.168.1.201 chefworkstation.local рабочая станция
Windows Server 2016 Datacenter (Desktop Experence) - 192.168.1.210 winsrv2016n1.local winsrv2016n1
Настройте сервер Chefmaster:
cat /etc/hosts
192.168.1.200 chefmaster.local chefmaster
192.168.1.201 chefworkstation.local chefworkstation
192.168.1.210 winsrv2016n1.local winsrv2016n1
Diable selinux - не уверен, нужно ли это.
sed -i 's/=enforcing/=disabled/g' /etc/selinux/config
Обновить имя хоста
sed -i "1s/.*/chefmaster.local/" /etc/hostname
hostnamectl set-hostname chefmaster.local
При необходимости обновите сервер
yum update -y
Перезагрузите сервер
reboot now
Установлено необходимое
yum -y install wget vim
Установить сервер chef infa
wget https://packages.chef.io/files/stable/chef-server/13.1.13/el/7/chef-server-core-13.1.13-1.el7.x86_64.rpm
rpm -ivh chef-server-core-*.rpm
chef-server-ctl reconfigure
chef-server-ctl status
Создайте пользователя с правами администратора:
Пример:
chef-server-ctl user-create USER_NAME FIRST_NAME LAST_NAME EMAIL 'PASSWORD' -f PATH_FILE_NAME
Что я использовал:
chef-server-ctl user-create chefadmin chef admin chefadmin@example.com 'PASSWORD' -f /etc/chef/chefadmin.pem
Создать организацию:
Пример:
chef-server-ctl org-create short_name 'full_organization_name' --association_user user_name --filename ORGANIZATION-validator.pem
Что я использовал:
chef-server-ctl org-create Myorgname "Myorg Name" --association_user chefadmin -f /etc/chef/Myorgname-validator.pem
Откройте брандмауэр:
firewall-cmd --permanent --zone public --add-service http
firewall-cmd --permanent --zone public --add-service https
firewall-cmd --reload
Установите консоль управления:
chef-server-ctl install chef-manage
chef-server-ctl reconfigure
chef-manage-ctl reconfigure
================================================== ============
Настройте сервер chefworkstation:
cat /etc/hosts
192.168.1.200 chefmaster.local chefmaster
192.168.1.201 chefworkstation.local chefworkstation
192.168.1.210 winsrv2016n1.local winsrv2016n1
Diable selinux - не уверен, нужно ли это.
sed -i 's/=enforcing/=disabled/g' /etc/selinux/config
Обновить имя хоста
sed -i "1s/.*/chefworkstation.local/" /etc/hostname
hostnamectl set-hostname chefworkstation.local
При необходимости обновите сервер
yum update -y
Перезагрузите сервер
reboot now
Установить chefdk
wget https://packages.chef.io/files/stable/chefdk/4.6.35/el/7/chefdk-4.6.35-1.el7.x86_64.rpm
rpm -ivh chefdk-*.rpm
chef verify
Проверьте Ruby:
which ruby
echo 'eval "$(chef shell-init bash)"' >> ~/.bash_profile
. ~/.bash_profile
which ruby
Убедитесь, что выходные данные Ruby должны выглядеть следующим образом:
/opt/chefdk/embedded/bin/ruby
Установите и настройте git
yum -y install git
cd ~
chef generate repo chef-repo
ls -al ~/chef-repo/
git config --global user.name "chefadmin"
git config --global user.email "chefadmin@anthonyfornito.com"
cd ~/chef-repo/
git init
mkdir -p ~/chef-repo/.chef
echo '.chef' >> ~/chef-repo/.gitignore
cd ~/chef-repo/
git add .
git commit -m "initial commit"
git status
Скопируйте файлы pem, созданные в разделе Настроить сервер chefmaster.
scp -pr root@chefmaster:/etc/chef/chefadmin.pem ~/chef-repo/.chef/
scp -pr root@chefmaster:/etc/chef/anthonyfornito-validator.pem ~/chef-repo/.chef/
Создайте файл ножа:
vi ~/chef-repo/.chef/knife.rb
нож.rb содержимое
current_dir = File.dirname(__FILE__)
log_level :info
log_location STDOUT
node_name "chefadmin"
client_key "#{current_dir}/chefadmin.pem"
validation_client_name "Myorgname-validator"
validation_key "#{current_dir}/Myorgname-validator.pem"
chef_server_url "https://chefmaster.local/organizations/Myorgname"
syntax_check_cache_path "#{ENV['HOME']}/.chef/syntaxcache"
cookbook_path ["#{current_dir}/../cookbooks"]
Проверьте ssl-соединение:
knife client list
Могу увидеть и ошибку ssl
Запустите ssl, проверьте, чего не хватает
knife ssl check
.....
* ssl_ca_path: nil
* ssl_ca_file: nil
----
Получить ssl
knife ssl fetch
Теперь еще раз проверьте список клиентов:
knife client list
Тебе следует увидеть:
Myorgname-validator
================================================== знак равно
Настройте сервер Windows Server 2016:
Разрешить доступ к порту 5985
В брандмауэре Windows в режиме повышенной безопасности:
Щелкните Правила для входящих подключений
Сортировать список по локальному порту
Найдите правила «Удаленное управление Windows (HTTP-In)» (их 2)
Поскольку я не использую домен, все, что мне нужно было сделать, это настроить Public
Щелкните правой кнопкой мыши правило
Выбрать свойства
Щелкните вкладку области
Измените удаленный IP-адрес с:
Эти IP-адреса:
Кому:
Любой IP-адрес
Выполните приведенную ниже команду с помощью администратора PowerShell.
winrm set winrm/config/client/auth '@{Basic="true"}'
winrm set winrm/config/service/auth '@{Basic="true"}'
winrm set winrm/config/service '@{AllowUnencrypted="true"}'
================================================== знак равно
На сервере chefworkstation выполните следующую команду, чтобы добавить клиент Windows Server 2016.
Пример:
knife bootstrap -o winrm CLIENTHOSTNAME -u ADMINWINUSER -P ADMINPASSWORD -VV
Что я использовал:
knife bootstrap -o winrm winsrv2016n1 -u Administrator -P PASSWORD -VV
Это займет некоторое время, однако примерно через 20 минут он был добавлен в качестве клиента в консоль управления.
Имейте в виду, что есть некоторые серьезные дыры в безопасности, которые необходимо исправить, но это должно помочь любому начать
Вот очень хороший руководство по устранению неполадок с Chef и Windows.
TL; DR в основном состоит из трех шагов:
Включите WinRM в узле Windows с помощью Enable-PSRemoting
или winrm quickconfig
Проверьте брандмауэр с помощью netsh advfirewall firewall add rule name=WinRM-HTTP" dir=in localport=5985 protocol=TCP action=allow
Запустите эти (только для тестирования, а не для prod) команды:
winrm set winrm/config/client/auth '@{Basic="true"}'
winrm set winrm/config/service/auth '@{Basic="true"}'
winrm set winrm/config/service '@{AllowUnencrypted="true"}'
Обычные причины:
Прочтите руководство по ссылке выше для более глубокого понимания и дополнительных шагов.