如何手動設置 Chef 節點?
我有一台在 Ubuntu 14.04 上執行的 Chef 伺服器(見註 1
mychefserver.myorg.com
),我可以通過訪問瀏覽器中的 IP 地址 ( ) 來訪問“Chef Manage”網站。我有一個在 Mac OS X El Capitan 上執行的工作站(見註 2
knife ssl check
),我可以使用和連接到 Chef 伺服器knife client list
。問題:
knife
不會將我的第三台機器 (mynode.myorg.com
) 作為節點引導。$ knife bootstrap mynode.myorg.com --sudo --ssh-user myname --forward-agent --node-name mynode Creating new client for mynode Creating new node for mynode Connecting to mynode Failed to authenticate myname - trying password auth Enter your password: stty: 'standard input': unable to perform all requested operations ERROR: Net::SSH::AuthenticationFailed: Authentication failed for user myname@mynode@mynode
mynode.myorg.com
是企業機器。SSH 設置為僅允許基於證書的身份驗證。不允許使用帶密碼的 SSH 和帶私鑰的 SSH。在我看來,由於
knife bootstrap
使用基於密碼或密鑰的 SSH,並且我可以通過簡單地執行來訪問節點上的命令行ssh mynode.myorg.com
,因此我最好的選擇是通過 SSH 進入節點並手動設置 Chef。不幸的是,沒有關於如何創建不涉及knife bootstrap
從工作站呼叫的 Chef 節點的文件。我必須在節點上本地執行哪些命令才能重新創建由 執行的工作
knife bootstrap
?注 1: Chef Server 12.4.1 設置步驟
$ wget https://packagecloud.io/chef/stable/packages/ubuntu/trusty/chef-server-core_12.4.1-1_amd64.deb/download $ dpkg -i download $ cat > /etc/opscode/chef-server.rb server_name = 'mychefserver.myorg.com' api_fqdn server_name bookshelf['vip'] = server_name nginx['url'] = "https://#{server_name}/" nginx['server_name'] = server_name nginx['ssl_certificate'] = "/var/opt/opscode/nginx/ca/#{server_name}.crt" nginx['ssl_certificate_key'] = "/var/opt/opscode/nginx/ca/#{server_name}.key" ^D $ chef-server-ctl reconfigure $ chef-server-ctl install opscode-manage $ chef-server-ctl reconfigure $ opscode-manage-ctl reconfigure $ chef-server-ctl install opscode-reporting $ chef-server-ctl reconfigure $ opscode-reporting-ctl reconfigure $ chef-server-ctl user-create myname My Name myname@myorg.com mypassword --filename myname.pem $ chef-server-ctl org-create myorg "My Org" --association_user myname
注 2: ChefDK 0.11.2 工作站設置步驟
$ wget URL: https://opscode-omnibus-packages.s3.amazonaws.com/mac_os_x/10.11/x86_64/chefdk-0.11.2-1.dmg $ hdiutil mount chefdk-0.11.2-1.dmg $ installer -package '/Volumes/Chef Development Kit/chefdk-0.11.2-1.pkg' -target '/Volumes/Macintosh HD' $ hdiutil unmount '/Volumes/Chef Development Kit/' $ chef generate app chef-repo $ cd chef-repo $ mkdir .chef $ cat > .chef/myname.pem -----BEGIN RSA PRIVATE KEY----- # …snip… -----END RSA PRIVATE KEY----- ^D $ cat > .chef/knife.rb log_level :info log_location STDOUT node_name 'myname' client_key "#{__dir__}/myname.pem" chef_server_url 'https://mychefserver.myorg.com/organizations/myorg' cookbook_path ["#{__dir__}/../chef-repo/cookbooks"] ^D $ knife ssl fetch
1.安裝廚師客戶端
使用https://www.chef.io/chef/install.sh腳本或為您的作業系統下載並安裝正確的 chef-client 包。
2.創建/etc/chef/client.rb
也許您可以使用您的引導節點之一作為參考。重要的是您已經
chef_server_url
指向您的 Chef 伺服器。例子:
/etc/chef/client.rb
chef_server_url "https://mychefserver.myorg.com/organizations/myorg" validation_client_name "myorg-validator" validation_key "/etc/chef/myorg-validator.pem" log_level :info
3.複製驗證碼
執行後得到的鑰匙
chef-server-ctl org-create
。如果失去,您可以從 Chef Manage 生成一個新的。將密鑰複製到
/etc/chef/myorg-validator.pem
(到中配置validation_key
的內容client.rb
)4. 獲取 SSL 證書
或者,如果您的 Chef 伺服器上的 SSL 證書未簽名(可能未簽名),您必須手動獲取它,以便 knife/chef-client 信任該證書。
mkdir /etc/chef/trusted_certs knife ssl fetch -c /etc/chef/client.rb
另見http://jtimberman.housepub.org/blog/2014/12/11/chef-12-fix-untrusted-self-sign-certs/