Table of Contents

CHEF: Mise en oeuvre de chef server

Le serveur Chef agit comme un concentrateur pour les données de configuration.

Le serveur Chef stocke les livres de recettes (cookbooks), les stratégies appliquées aux nœuds et les métadonnées qui décrivent chaque nœud enregistré géré par le chef-client.

Les nœuds utilisent le chef-client pour demander au serveur Chef des détails de configuration, tels que des recettes, des modèles et des distributions de fichiers.

Le chef-client fait alors le plus de travail de configuration possible sur les nœuds eux-mêmes (et non sur le serveur Chef).

Cette approche évolutive répartit l'effort de configuration dans toute l'organisation.

Installation de l'hyperviseur

Appliquer le cookbook d'installation de l'hyperviseur KVM

Installation de ruby

Appliquer le cookbook d'installation de ruby

Installation de vagrant

Appliquer le cookbook d'installation de vagrant

Installation et paramétrage de chef-server

Prérequis

Configurer le fichier /etc/hosts .

Pour résoudre en local les différents

127.0.0.1 localhost
xx.xx.xxx.xxx chefserver.dgfip chefserver
xx.xx.xxx.xx chefworkstation.dgfip chefworkstation

Installer crontabs (s'il n'est pas déjà installé)

 yum install crontabs

Vider toutes les règles iptables et les sauvegarder sur tous les nœuds.

$ iptables -F
$ service iptables save

  iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

  $ iptables -L

  Chain INPUT (policy ACCEPT)
  target     prot opt source               destination
  
  Chain FORWARD (policy ACCEPT)
  target     prot opt source               destination
  
  Chain OUTPUT (policy ACCEPT)
  target     prot opt source               destination
  [root@chefnode Downloads]#

Définir selinux sur le mode Permissive sur tous les nœuds.

$ setenforce Permissive
$ getenforce

  Permissive    

Installer le serveur Chef

Télécharger et installer chefdk

$ wget https://packages.chef.io/repos/yum/stable/el/6/x86_64/chefdk-2.5.3-1.el6.x86_64.rpm
$ rpm -ivh chefdk-2.5.3-1.el6.x86_64.rpm

Télécharger et installer chef-server-core

$ wget https://packages.chef.io/repos/yum/stable/el/6/x86_64/chef-server-core-12.17.33-1.el6.x86_64.rpm
$ rpm -ivh chef-server-core-12.6.0-1.el6.x86_64.rpm

Configurer le serveur

Reconfigurer le serveur.

$ chef-server-ctl reconfigure

Problème : common_name is required

00:00] ERROR: Exception handlers complete
Chef Client failed. 1 resources updated in 10.379691033 seconds
[2015-09-23T16:46:46+00:00] FATAL: Stacktrace dumped to /opt/opscode/embedded/cookbooks/cache/chef-stacktrace.out
[2015-09-23T16:46:47+00:00] FATAL: Chef::Exceptions::ValidationFailed: common_name is required

Solution

Problème /etc/opscode/pivotal.pem missing

[2016-02-10T22: 09: 53 + 00: 00] FATAL:

-------------------------------------------------- ---------------------
BOOT007: Le fichier de secrets (/etc/opscode/private-chef-secrets.json) est présent
     mais le fichier /etc/opscode/pivotal.pem est manquant.

     S'assurer que private-chef-secrets.json est copié dans /etc/opscode depuis le
     premier nœud Chef Server mis en ligne, puis exécuter
     'chef-server-ctl reconfigure' à nouveau.

————————————————– ———————

Solution

— OU — (si la solution ci-dessus ne fonctionne pas) —

Utiliser la commande ci-dessous.

 cp /opt/opscode/embedded/service/omnibus-ctl/spec/fixtures/pivotal.pem /etc/opscode/

Créer un utilisateur pour le serveur.

 chef-server-ctl user-create USER_NAME FIRST_NAME LAST_NAME EMAIL 'PASSWORD' --filename PATH_TO_FILE_NAME

Commande.

 chef-server-ctl user-create jacques Nougat Jacques jacques.nouga@dgfip.finances.gouv.fr 'motdepasse' --filename /etc/chef/jacques.pem 

Créer une organisation

$ chef-server-ctl org-create short_name 'full_organization_name' --association_user user_name --filename ORGANIZATION-validator.pem 

Commande.

$ chef-server-ctl org-create ahmedinc 'dgfip' --association_user jacques --filename /etc/chef/dgfip-validator.pem

Télécharger et installer chef-manage

$ wget https://packages.chef.io/repos/yum/stable/el/6/x86_64/chef-manage-2.5.15-1.el6.x86_64.rpm
$ rpm -ivh chef-manage-2.5.15-1.el6.x86_64.rpm

  $ chef-server-ctl reconfigure
  $ chef-manage-ctl reconfigure

Vérifier linstallation

Vérifier l'état du serveur

$ chef-server-ctl status
run: bookshelf: (pid 21281) 1977939s; run: log: (pid 14630) 1994976s
run: nginx: (pid 12537) 1887643s; run: log: (pid 15024) 1994972s
run: oc_bifrost: (pid 21365) 1977938s; run: log: (pid 14119) 1994981s
run: oc_id: (pid 21411) 1977938s; run: log: (pid 12420) 1887644s
run: opscode-erchef: (pid 12424) 1887643s; run: log: (pid 14796) 1994975s
run: opscode-expander: (pid 21793) 1977935s; run: log: (pid 14538) 1994977s
run: opscode-solr4: (pid 21922) 1977934s; run: log: (pid 14356) 1994978s
run: postgresql: (pid 21972) 1977933s; run: log: (pid 14062) 1994982s
run: rabbitmq: (pid 22308) 1977926s; run: log: (pid 15032) 1994972s
run: redis_lb: (pid 9486) 1887685s; run: log: (pid 15017) 1994973s

Connexion à Chef-manage

Pour vérifier le bon fonctionnement de l'installation.

 http://ip_de_votre_serveur:port

Créer le référentiel chef-repo

Utiliser la commande chef generate repo chef-repo pour créer le référentiel Chef. Par exemple, pour créer un référentiel appelé chef-repo :

chef generate repo chef-repo

Créer un répertoire .chef

Le répertoire .chef est utilisé pour stocker trois fichiers:

Ces fichiers doivent être présents dans le répertoire .chef pour que ChefDK puisse se connecter à un serveur Chef.

Créer le répertoire .chef dans le répertoire chef-repo :

  mkdir -p /path/to/chef-repo/.chef

Une fois le répertoire .chef créé, la structure de dossiers suivante sera présente sur la machine locale:

  chef-repo/
    .chef/ << le répertoire caché
    certificats/
    config/
    cookbooks/
    data_bags
    environnements/
    roles/

Note de sécurité: Ajouter .chef au fichier .gitignore pour empêcher le téléchargement du contenu du dossier .chef sur GitHub. Par exemple:

  $ echo '.chef' >> chef-repo/.gitignore

Créer le répertoire .chef/client.d

À partir de Chef 12.8, on peut créer un .chef/client.d dont le contenu sera copié sur le système en cours d’amorçage à l’aide de la commande knife bootstrap . On peut également définir l'option client_d_dir dans config.rb pour qu'elle pointe vers un autre répertoire au lieu de .chef/client.d, et le contenu de ce répertoire sera copié sur le système en cours d'initialisation. Tous les fichiers de configuration du répertoire client.d sont copiés dans /etc/chef/client.d du système en cours d’amorçage.

$ mkdir -p .chef/client.d

La présence de ce répertoire implique le chargement automatique de son contenu lors du bootstraping, s'il est vide cela provoquera un échec de la séquence de bootsrap. Ne créer ce dossier que si on en a effectivement besoin

Charger le Kit de démarrage

Le kit de démarrage permet de créer les fichiers de configuration nécessaires chez le clients: le répertoire .chef, les fichiers config.rb, ORGANIZATION-validator.pem et USER.pem.

Pour le mettre à disposition des clients télécharger simplement le kit de démarrage puis placer-le dans le répertoire partagé client.d.

Configurer le référentiel Chef

Avec WebUI

Utiliser les étapes suivantes pour configurer manuellement le chef-repo et utiliser la console de gestion Chef pour obtenir les fichiers .pem et config.rb .

Récupérer les fichiers de configuration

Pour une installation ChefDK qui interagira avec le serveur Chef (y compris le serveur Chef hébergé), se connecter au serveur et télécharger les fichiers suivants:

Déplacer les fichiers de configuration

Les config.rb , ORGANIZATION-validator.pem et USER.pem doivent être déplacés vers le répertoire .chef après leur téléchargement à partir du serveur Chef.

Pour déplacer des fichiers dans le répertoire .chef :

 cp /path/to/config.rb /path/to/chef-repo/.chef

et:

 cp /path/to/ORGANIZATION-validator.pem /path/to/chef-repo/.chef

et:

  cp /path/to/USERNAME.pem /path/to/.chef

Sans WebUI

Utiliser les étapes suivantes pour configurer manuellement le référentiel Chef:

Créer une organisation

Sur la machine serveur Chef, créer ORGANIZATION-validator.pem en utilisant chef-server-ctl en ligne de commande :

$ chef-server-ctl org-create ORG_NAME ORG_FULL_NAME -f FILE_NAME

Par exemple pour une organisation nommée chef, portant le nom complet de Chef Software,Inc et le fichier ORGANIZATION-validator.pem enregistré dans /tmp/chef.key :

$ chef-server-ctl org-create chef "Chef Software, Inc."  -f /tmp/chef.key

Créer un utilisateur

Dan le serveur Chef, créer USER.pem partir de la ligne de commande en utilisant chef-server-ctl :

$ chef-server-ctl user-create USER_NAME FIRST_NAME LAST_NAME EMAIL PASSWORD -f FILE_NAME

* **USER\_NAME** est le nom d'utilisateur
* **FIRST\_NAME** est son nom 
* **LAST\_NAME** est son prénom
* **EMAIL** est sond adresse mail
* **PASSWORD** est sont mot de passe
* **-f FILE_NAME** écrit le fichier USER.pem dans un fichier au lieu de STDOUT .

Par exemple: un utilisateur nommé grantmc, avec le prénom et le nom Grant McLennan , une adresse électronique grantmc@chef.io, un mot de passe achanger et un fichier USER.pem enregistré dans /tmp/grantmc.key :

$ chef-server-ctl utilisateur-créer grantmc Grant McLennan grantmc@chef.io achanger -f /tmp/grantmc.key

Déplacer des fichiers .pem

Placer les fichiers ORGANIZATION-validator.pem et USER.pem à partir du serveur Chef dans le répertoire .chef:

$ cp /path/to/ORGANIZATION-validator.pem /path/to/chef-repo/.chef

et:

$ cp /path/to/USERNAME.pem /path/to/chef-repo/.chef

Créer le fichier config.rb

Dans le répertoire chef-repo/.chef créer le fichier config.rb à l'aide de l'outil knife configure. Le fichier doit être créé dans le dossier .chef . Il devrait ressembler à:

current_dir = Fichier .  dirname ( __FILE__ )
log_level : info
log_location STDOUT
node_name 'nom_noeud'
client_key "#{current_dir}/USER.pem"
validation_client_name 'ORG_NAME-validator'
validation_key "#{current_dir}/ORGANIZATION-validator.pem"
chef_server_url 'https://api.chef.io/organizations/ORG_NAME'
cache_type 'BasicFile'
cache_options ( :path => "#{ENV['HOME']}/.chef/checksums" )
cookbook_path ["#{current_dir}/../cookbooks" ]

Au minimum, on doit mettre à jour les paramètres suivants avec les valeurs appropriées:

Récupérer les certificats SSL

Le serveur Chef 12 active la vérification SSL par défaut pour toutes les demandes adressées au serveur, telles que celles effectuées par knife et le chef-client. Le certificat généré lors de l'installation du serveur Chef est auto-signé, ce qui signifie qu'il n'y a pas d'autorité de certification de signature à vérifier. De plus, ce certificat doit être téléchargé sur toute machine à partir de laquelle knife et/ou le chef-client adressera des demandes au serveur Chef.

Utiliser la sous-commande knife ssl fetch pour extraire le certificat SSL du serveur Chef:

$ knife ssl fetch

Configuration de Knife

Pour utiliser knife depuis le serveur il faut configurer le dossier de l'utilisateur par défaut pour pouvoir s'authentifier au serveur

Initialiser knife

$ knife configure
Please enter the chef server URL: [https://M013E13P-1249185.dgfip/organizations/myorg] https://xx.xx.xxx.xxx:10443/organizations/dgfip/     
Please enter an existing username or clientname for the API: [jacques.nougat] jacques
Overwrite /home/user/jacques.nougat/.chef/credentials?? (Y/N) y
*****

You must place your client key in:
  /home/user/jacques.nougat/.chef/jacques.pem
Before running commands with Knife
   
*****
Configuration file written to

Ajuster le fichier knife.rb

vi ~/.chef/knife.rb 

# See https://docs.getchef.com/config_rb_knife.html for more information on knife configuration options

current_dir = File.dirname(__FILE__)
log_level                :info
log_location             STDOUT
node_name                "jacques"
client_key               "/etc/chef/jacques.pem"
chef_server_url          "https://xx.xx.xxx.xxx:10443/organizations/dgfip"
cookbook_path            ["#{current_dir}/../cookbooks"]
chef_repo_path           "/path/to/chef-repo"

Charger la clef privée de l'utilisateur

Charger la clef privé du compte utilisé pour la connexion au serveur chef dans le répertoire indiqué dans client_key

 
  $ scp user@xx.xx.xxx.xxx:/jacques.pem /etc/chef/jacques.pem

  user@xx.xx.xxx.xxx's password: 
  jacques.pem                                   100% 1678     1.6KB/s   00:00   

Récupérer la clé SSL du chef-serveur.

$ export no_proxy='xx.xx.xxx.xxx'
$ knife ssl fetch

  WARNING: Certificates from xx.xx.xxx.xxx will be fetched and placed in your trusted_cert
  directory (/home/user/jacques.nougat/.chef/trusted_certs).
   
  Knife has no means to verify these are the correct certificates. You should
  verify the authenticity of these certificates after downloading.
  
  Adding certificate for xx_xx_xxx_xxx in /home/user/jacques.nougat/.chef/trusted_certs/xx_xx_xxx_xxx.cr
  

Vérifier la configuration de knife

Lister les clients actuellement disponibles. Actuellement, nous ne voyons que le poste de travail.

$ knife client list

  dgfip-validator