web-dev-qa-db-ja.com

Chefノードを手動で設定する方法は?

Ubuntu 14.04でChefサーバーを実行しています(注1を参照)。IPアドレス(mychefserver.myorg.com)にアクセスして、 "Chef Manage" Webサイトにアクセスできます。私のブラウザで。

Mac OS X El Capitan(注2を参照)でワークステーションを実行していて、knife ssl checkknife client listを使用してChefサーバーに接続できます。

問題:knifeはノードとしてbootstrap私の3番目のマシン(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 [email protected] 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
2

1. chef-clientをインストールします

https://www.chef.io/chef/install.sh スクリプトを使用するか、OSに適したchef-clientパッケージをダウンロードしてインストールします。

2. /etc/chef/client.rbを作成します

おそらく、ブートストラップされたノードの1つを参照として使用できます。重要な点は、Chefサーバーを指しているchef_server_urlがあることです。

例:

/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_keyclient.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/

8
Fabrice Devaux