diff --git a/manifests/loadbalancer.pp b/manifests/loadbalancer.pp index 82c1ff5a..7079347a 100644 --- a/manifests/loadbalancer.pp +++ b/manifests/loadbalancer.pp @@ -395,4 +395,10 @@ class cloud::loadbalancer( } } + # Allow HAProxy to bind to a non-local IP address + $haproxy_sysctl_settings = { + 'net.ipv4.ip_nonlocal_bind' => { value => 1 } + } + create_resources(sysctl::value,$haproxy_sysctl_settings) + } diff --git a/spec/classes/cloud_loadbalancer_spec.rb b/spec/classes/cloud_loadbalancer_spec.rb index 7b60d445..c03b35a3 100644 --- a/spec/classes/cloud_loadbalancer_spec.rb +++ b/spec/classes/cloud_loadbalancer_spec.rb @@ -73,6 +73,12 @@ describe 'cloud::loadbalancer' do should contain_class('keepalived') end # configure keepalived server + it 'configure sysctl to allow HAproxy to bind to a non-local IP address' do + should contain_exec('exec_sysctl_net.ipv4.ip_nonlocal_bind').with_command( + 'sysctl -w net.ipv4.ip_nonlocal_bind=1' + ) + end + context 'configure an internal VIP' do before do params.merge!(:keepalived_internal_ipvs => ['192.168.0.1'])