web-dev-qa-db-ja.com

chefのWindowsノードを追加する方法

3台のサーバーがあります

Chefmasterとchefworkstationのこのガイドに従ってください

https://www.itzgeek.com/how-tos/linux/centos-how-tos/setup-chef-12-centos-7-rhel-7.html

chefmaster 192.168.1.200 Centos7

chefworkstation 192.168.1.200 Centos7

chefnode 192.168.1.210ウィンドウサーバー2016

サーバーにWindowsユーザーをセットアップし、管理者アクセス権を付与しました。

ユーザー:chefUSER

Chefmasterをセットアップし、実行中のchef 13.1.13を構成しました

Chefworkstationのセットアップと構成を実行しているchefdk-0.19.6-1.el7.x86_64を実行しています

グーグルで検索すると、WindowsにChefサーバーをインストールする方法しかわかりません。クライアントをインストールしてノードにしようとしています。

私が試してみました:

ナイフbootstrap -o winrm 192.168.1.210 -u chefUSER -P PASSWORD

[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
3
James Connigan

これのほとんどは https://www.itzgeek.com/how-tos/linux/centos-how-tos/setup-chef-12-centos-7-rhel-7.html から取得されますこれは、ページが古いバージョンのchefを参照しているために、機能しなかった部分が約90%修正された可能性があります。

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 [email protected] '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 "[email protected]"
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

Chefmasterサーバーの構成セクションで作成したpemファイルをコピーします。

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

knife.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

================================================== =

Window Server 2016サーバーを構成します。

ポート5985へのアクセスを有効にする

セキュリティが強化されたWindowsファイアウォールから:

[受信の規則]をクリックします

ローカルポートでリストを並べ替え

「Windowsリモート管理(HTTP-In)」ルールを見つけます(2つあります)

ドメインを使用していないため、パブリックを構成するだけで済みました

ルールを右クリック

プロパティを選択

スコープタブをクリックします

リモートIPアドレスを次から変更します。

これらのIPアドレス:

に:

任意のIPアドレス

enter image description here

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分後に、管理コンソールの下にクライアントとして追加されました。

修正する必要があるいくつかの主要なセキュリティホールがあることを覚えておいてください。

enter image description here

2
Anthony Fornito

これは非常に優れた ChefおよびWindowsに関するトラブルシューティングガイド です。

TL; DRは基本的に3つのステップリストです。

  1. Enable-PSRemotingまたはwinrm quickconfigを使用して、WindowsノードでWinRMを有効にします

  2. ファイアウォールをnetsh advfirewall firewall add rule name=WinRM-HTTP" dir=in localport=5985 protocol=TCP action=allowで確認します

  3. 次のコマンドを実行します(テスト用のみで、本番用ではありません)。

    winrm set winrm/config/client/auth '@{Basic="true"}'
    winrm set winrm/config/service/auth '@{Basic="true"}'
    winrm set winrm/config/service '@{AllowUnencrypted="true"}'

通常の原因:

  1. Winrmサービスがリモートマシンで実行されていません
  2. リモートマシンのファイアウォールが接続を拒否しています
  3. プロキシサーバーが邪魔をしている
  4. HTTPS接続の不適切なSSL構成

より深い理解と追加の手順については、上記のリンク先のガイドをお読みください。

0
Leo