28
Deploying Foreman in Enterprise Environments 2.0 best practices and lessons learned… Nils Domrose Cologne, August, 4 2014

Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

Deploying Foreman in Enterprise Environments 2.0

best practicesand lessons learned…

Nils DomroseCologne, August, 4 2014

Page 2: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

▸ senior linux systems engineer at inovex GmbH

▸ worked as a network engineer, software developer and systems engineer

▸ using foreman for about 1 year

▸ using bare-metal deployment for ages

▸ life is short – let’s focus on interesting stuff!

2

About me

__endy__

@endyman

https://plus.google.com/+NilsDomrose

#irc

Page 3: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

▸ http://www.inovex.de▸ offices in [‘Pforzheim’, ‘Karlsruhe’, ‘Cologne’, ‘Munich’]▸ we have open positions...

3

About inovexWe use technology to make our customers happy. And ourselves.

1SHAPEConsulting

2BUILDApplication Development

3RUNIT Engineering & Operations

5TEACHAcademy

4TRACKBusinessIntelligence

Page 4: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

4

▸ the chicken & egg problem▸ foreman components▸ we are the borg▸ fail! foreman HA▸ best practices

Agenda

Page 5: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

▸ Create an foreman-installer-answers.yaml somewhere

▸ Setup a foreman system(i.e.) a vmincluding required rpms (or debs)

▸ Copy you foreman-installer-answers.yaml to the target system and run the installer with the yamlfile.

▸ Or use packer.io to build a vmimage….

▸ Later we can use the foreman-installer-answers.yaml in a custom puppet module as template to install additional nodes

The Chicken & Egg Problem...deploying your deployment infrastructure

Page 6: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

The Chicken & Egg Problem...deploying your deployment infrastructure

$foreman_answersfile = ‘/etc/foreman/foreman-installer-answers.yaml‘

file {$foreman_answersfile:owner => ‘root‘,group => ‘root‘, mode => ‘0600‘,content => template(‘foreman/foreman-installer-answers.yaml.erb‘),

}

exec {‘foreman-installer‘:command => ‘/usr/bin/foreman-installer –d‘logoutput => on_failure,require => File[$foreman_answersfile],...

Page 7: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

▸ kafo?

▸ kafo! - imagine master-less puppet plus config data in yaml(like hiera)

▸ can’t tell whether it’s the chicken or the egg or both but it’s cool ☺

▸ stores parameters for your modules in answers.yaml

▸ simply copy your modules into the installer’s modules directory

▸ or even use puppet-librarian to manage your modules (poor man’s git-submodules)

The Chicken & Egg ProblemOr use kafo...

https://github.com/rodjek/librarian-puppet

https://github.com/theforeman/kafo

Page 8: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

The Chicken & Egg Problemkafo - getting started

▸ Create a new installer project:

`--> i=my-installer; mkdir $i; cd $i; kafofy -n $i

using ./config/my-installer.yaml as default config file... creating config file ./config/my-installer.yaml... creating bin/my-installerYour directory was kafofiedNow you should:1. upload your puppet modules to modules directory (you can use librarian-puppet project)2. create default ./config/answers.yaml or modify ./config/my-installer.yaml to load another answer file3. run bin/my-installer to install your modules

Page 9: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

▸ delete the modules directory

The Chicken & Egg Problemget the modules

▸ next: package it, install it

root@foreman:/var/tmp/my-installer# librarian-puppet install --cleanroot@foreman:/var/tmp/my-installer# ll modulestotal 16drwxr-xr-x 4 root root 4096 Jan 29 12:25 ./drwxr-xr-x 7 root root 4096 Jan 29 12:17 ../drwxr-xr-x 7 root root 4096 Jan 29 12:25 ntp/drwxr-xr-x 6 root root 4096 Jan 29 12:24 stdlib/

root@foreman:/var/tmp/my-installer# cat Puppetfileforge "http://forge.puppetlabs.com"

mod 'puppetlabs/stdlib'

mod 'ntp',:git => 'git://github.com/puppetlabs/puppetlabs-ntp.git'

root@foreman:/var/tmp/my-installer# rm -Rf modules/

▸ run the librarian

▸ create a Puppetfile

Page 10: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

10

Foreman Componentsforeman

foreman frontendforeman frontend

REST APIREST APIunattended resources

unattended resources

apache mod_passengerapache mod_passenger

Port 80 HTTPPort 80 HTTP Port 443 HTTPSPort 443 HTTPS

▸ rails application▸ apache mod_passenger▸ Webinterface▸ REST API▸ unattended resources –

rendered templates

database database

Page 11: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

▸ WEBrick based REST server to manage supporting infrastructure

11

Foreman Componentssmart-proxy

DNSDNSDHCPDHCP TFTPTFTP

apache mod_passenger

apache mod_passenger

Port 8140 HTTPSPort 8140 HTTPS

Port 8443 HTTPSPort 8443 HTTPS

WEBrick serverWEBrick server

BMCBMCpuppetpuppetpuppet

CApuppet

CA

Port 69 UDP

Port 69 UDP

tftpdtftpdISC

dhcpdISC

dhcpd

Port 67 UDP

Port 67 UDP

nsupdatensupdateipmitoolipmitool

Page 12: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

12

Installation process using the foreman...let‘s deploy some boxes

Smart-Proxy

PuppetMaster

DHCP

DNS

Puppet CA

compute Resource

TFTP

OS Repo

query unattended Resources

virtual / physical Instances

9 PXE Boot

8 DHCP request

7 create compute instance (optional)

6 create auto sign entry

5 provision TFTP & PXE

4 request kernel & initrd

3 create DNS entries

2 request lease

1 create new host

unattendedResources

2

34

5

6

7

8

9

1212

request puppet certificate

GET ENC & catalog, upload facts

notify finish

10

11

12

13

10

10

11

13

113

Page 13: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

▸ flows at each side to local puppet and smart proxy

▸ all VLANs directly access puppet ca▸ all VLANs directly access foreman

unattended resources▸ we need DNS only once (so let’s

limit TSIG key distribution)

13

Foreman Componentsplacement of foreman components

ForemanSmartproxy, puppet, CA,

DNS, DHCP

ForemanSmartproxy, puppet, CA,

DNS, DHCP

Smartproxy, puppet, DHCP

Smartproxy, puppet, DHCP

VLAN A Site1

VLAN B Site1

VLAN C Site2

VLAN D Site2

fwfw

fwfwmgmt VLAN2

mgmt VLAN1

Page 14: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

14

Foremansmartproxy, puppet, CA,

DNS, DHCP

Foremansmartproxy, puppet, CA,

DNS, DHCP

smartproxy, puppet,

DHCP, Proxysmartproxy, puppet,

DHCP, Proxy

VLAN A Site1

VLAN B Site1

VLAN C Site2

VLAN D Site2

fwfw

fwfwmgmt VLAN2

mgmt VLAN1

▸ limit access to the smartproxy and foreman to local clients only

▸ open dedicate flow from proxy to foreman and puppet

Foreman Componentsoptimizing comms flows

Page 15: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

▸ install apache mod_rewrite on remote smartproxy

▸ rewrite/proxy unattended resources

▸ rewrite/proxy puppet CA resources (already implemented in foreman installer puppet-puppet module via $server_ca_proxy:: by ewoud)

15

Foreman Componentsoptimizing comms flows

...rewrite_rule => [‘^/unattended/(.*)$ http://foreman.mysite.com/unattended/$1 [P]’,

]rewrite_rule => [‘^/([^/]+/certificate.*)$ https://puppetca.mysite.com:8140/$1’,

]...

Page 16: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

▸ we must identify proxied servers▸ foreman url must be customized▸ templates must be adapted

16

Foreman Componentsforeman customization

▸ create parameter in hostgroups for each segment (unattended_url in 1.4 does not seam to help here…)

▸ adapt templates

▸ enable tokens (default in 1.4)

Page 17: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

Integrating foreman into corporate infrastructure is:▸ not a technical issue

▸ mostly even not a security issue

▸ It’s about convincing people to do things differently

▸ It’s about responsibilities

▸ It’s about fear

▸ It’s about laziness

17

Resistance is futileIntegrating foreman into corporate infrastructure

Page 18: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

18

Resistance is futileLet’s assimilate the corporate DHCP

The corporate DHCP does not provide a proper API and changes are distributed across the DHCP infrastructure in a slow, asynchronous manner…

• Use a stub ISC-DHCP to manage your pools (I need some time to write+submit a stub dhcpmodule ☺)

• Ask for a small dynamic pxe-boot range in every subnet

• Ask for a next-server entry in the pxe-boot range

• Create a subnet on your Stub server an a range to assign addresse from

Page 19: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

19

Resistance is futileLet’s assimilate the corporate DHCP

Server/VMTo be installed

Foreman

CorporateDHCP

CorporateDHCP

Client VLAN

default linuxlabel linuxkernel boot/CentOS-7-x86_64-vmlinuzappend initrd=boot/CentOS-7-x86_64-initrd.img ks=http://foreman.local.venv.de:80/unattended/provision ks.device=bootifip=192.168.192.100::192.168.192.2:255.255.255.0:::none dns=192.168.122.1 network ks.sendmac

DummyDHCP

Page 20: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

20

Resistance is futileLet’s assimilate the corporate DHCP

You must adapt you PXE templates in order to provide a static network config to darcut!

default linuxlabel linuxkernel <%= @kernel %>append initrd=<%= @initrd %> ks=<%= foreman_url("provision")%> ks.device=bootif ip=<%= @host.ip%>::<%= @host.subnet.gateway %>:<%= @host.subnet.mask %>:::none dns=<%= @host.subnet.dns_primary %> network ks.sendmac

Page 21: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

21

Resistance is futileThe one with static DNS

You kindly ask for TSIG keys to create your A and PTR records automatically but the DNS is managed manually and there is no TSIG key although dynamic updates are enabled…

Make a deal: you won’t talk about the missing TSIG keys and get your key or keytab and permissions right after the guy fixed the security issue.

Ask for dedicated zones and for credentials which allow you to manage your zones using nsupdate- Alternatively ask for delegation of your zones and

setup a dedicated DNS server (protected by keys)

Page 22: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

22

FAIL!Foreman HA

22

postgreSQLmaster

postgreSQLmaster

Apache mod_passenger

Apache mod_passenger

puppetDBpuppetDB

HA IP(s)keepalivedHA IP(s)

keepalivedHA IP(s)

keepalivedHA IP(s)

keepalived

node1node1 node2node2

▸ At least two nodes, each one running postgreSQL database

▸ If you scale out, you might setup a nice pg-pool2 cluster

▸ puppetmasters could be ran active active as well as the foreman rails application and puppetDB (keep memcached in mind)

▸ In addition to keepalived you can setup a software loadbalancer (i.e. ha-proxy) to balance traffic and utilize both servers for puppet and foreman traffice

▸ DO NOT use VIPs as ip-helper –most firewalls don’t like asyncDHCP traffic!

ISC DHCPmaster

ISC DHCPmaster

ISC DHCPslave

ISC DHCPslave

postgreSQLslave

postgreSQLslave

puppetDBpuppetDB

Apache mod_passenger

Apache mod_passenger

Page 23: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

▸ use separate IP addresses for each service so you can split up stuff later on

▸ If you can’t use DHCP use the bootdisk plugin

▸ LDAP or kerberos5 for user authentication

▸ use Locations or Organizations for filtering

▸ use the column plugin for better overview

▸ ENC and smart variables are nice – ever configured dhcp pool as yaml hash? Use smart variables as switches, and for simple datatypes only - do the complex stuff in service modules.

23

Best practices

Page 24: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

24

The big picture

Physical Network

Virtual Network

Ho

stedV

irtual

Real

Foreman REST API

CMDB

Dep

loym

ent

Lifecycle M

gm

t.

Page 25: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

▸ Can be deployed using the community templates . Or by adapting custom templates

▸ Currently not yet running out of the box on CentOS 7 - support will be added in 1.6.0

▸ Some minor problems around selinux –setting permissive mode allows foreman to run

▸ Foreman Installer relies on facts, facterrelies on host and ifconfig binaries – both not installed by default.

25

Centos 7...secret guide to world domination

https://github.com/theforeman/community-templates/

Page 26: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

▸ Mind firewalld

26

Centos 7...secret guide to world domination

`--> firewall-cmd --zone=public --add-port=8140/tcp`--> firewall-cmd --zone=public --add-port=8140/tcp --permanent

Page 27: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

▸ integrate the reverse proxy feature into smart-proxy (there is a ticket for that somewhere)

▸ implement iso image provisioning based vm installation in conjunction with the bootdisk plugin

▸ support more configuration management stacks

▸ better support for discovery, ipmi and hardware provisioning (like HW-Raid) –on-going

27

Wishlist...secret guide to world domination

Page 28: Deploying Foreman in Enterprise Environments 2.0 - best ......(like hiera) can’t tell whether it’s the chicken or the egg or both but it’s cool ☺ stores parameters for your

28

Thank You!

Contact

Nils DomroseSenior Systems Engineer

inovex GmbHOffice cologneSchanzenstr. 6-2051063 Köln

[email protected]