Compare commits

...

4 Commits

4 changed files with 42 additions and 12 deletions

View File

@@ -1,13 +1,16 @@
{ {
"cSpell.words": [ "cSpell.words": [
"allowdupe",
"dontlognull", "dontlognull",
"dport", "dport",
"forwardfor", "forwardfor",
"httplog", "httplog",
"managehome",
"maxconn", "maxconn",
"nologin", "nologin",
"pidfile", "pidfile",
"redispatch", "redispatch",
"roundrobin",
"sess", "sess",
"setsebool", "setsebool",
"tcplog", "tcplog",

View File

@@ -10,6 +10,7 @@
- [Deployment](#deployment) - [Deployment](#deployment)
- [Parameters](#parameters) - [Parameters](#parameters)
- [Proxy Configuration](#proxy-configuration) - [Proxy Configuration](#proxy-configuration)
- [TLS](#tls)
- [SELINUX](#selinux) - [SELINUX](#selinux)
- [Known Problems](#known-problems) - [Known Problems](#known-problems)
- [Support](#support) - [Support](#support)
@@ -42,18 +43,19 @@ CONFIGURATION
- front-end options - front-end options
- back-end options - back-end options
- ACL options - ACL options
- manage fail2ban integration (optional, requires fail2ban_cd module) - adds haproxy logs to rsyslog for remote logging where used
- manage fail2ban integration (optional, requires `confdroid_fail2ban` module)
SERVICE SERVICE
- manage haproxy service - manage haproxy service
- restart service after changes in the configuration - restart service after changes in the configuration
- stats are enabled on port 8404 with uri /haproxy?stats and strict private mode, set `hy_stats_auth` to something meaningful.
## Dependencies ## Dependencies
All dependencies must be included in the catalogue. All dependencies must be included in the catalogue.
- [cd_resources](https://gitlab.confdroid.com/puppet/cd_resources) for managing yum base repos
- [concat](https://github.com/puppetlabs/puppetlabs-concat) for managing file fragments - [concat](https://github.com/puppetlabs/puppetlabs-concat) for managing file fragments
## Deployment ## Deployment
@@ -83,6 +85,8 @@ The parameters are documented via puppet strings and [listed here](/docs/index.h
The proxy instances are configured in /etc/haproxy/haproxy.cfg, which is concatenated from various templates through a define in this puppet module. The proxy instances are configured in /etc/haproxy/haproxy.cfg, which is concatenated from various templates through a define in this puppet module.
In order to create proxy instances, you will need an external class, which addresses the define, like so: In order to create proxy instances, you will need an external class, which addresses the define, like so:
ACL rule:
```bash ```bash
confdroid_haproxy::server::proxy { 'testing': confdroid_haproxy::server::proxy { 'testing':
haproxy_fqdn => 'node.example.net', haproxy_fqdn => 'node.example.net',
@@ -94,14 +98,41 @@ In order to create proxy instances, you will need an external class, which addre
} }
``` ```
real Proxy for https:
```bash
haproxy_cd::server::proxy { 'https-in':
haproxy_fqdn => 'node.example.net',
frontend_name => 'https-in',
frontend_mode => 'http',
fe_bind_mode => '*:443 ssl crt /etc/haproxy/certs/',
fe_option => 'forwardfor',
fe_http_request => 'add-header X-Forwarded-Proto https',
acl_rule_front => 'host_grafana hdr(host) -i grafana.example.net',
fe_use_backend => 'grafana_backend if host_grafana',
backend_configs => [
{
'backend_name' => 'grafana_backend',
'be_mode' => 'http',
'be_balance' => 'roundrobin',
'be_server_name_array' => ['node1 10.0.1.1:8080 check'],
}
]
default_backend => 'error_backend',
```
This allows the puppet module to create the sections in the configuration file as required. The haproxy service will be restarted after the changes in the configuration file are made. This allows the puppet module to create the sections in the configuration file as required. The haproxy service will be restarted after the changes in the configuration file are made.
`haproxy_fqdn` **must**- contain the fqdn of the haproxy **server**- where this should be configured, otherwise the templates are not being populated. `haproxy_fqdn` **must**- contain the fqdn of the haproxy **server**- where this should be configured, otherwise the templates are not being populated.
Multiple ACLs need to be added as array, and will create one line each. Multiple ACLs need to be added as array, and will create one line each.
## TLS
Haproxy can manage all sorts of proxies including http and https. It also can terminate https requests and send the requests within a private network unencrypted, which is quite common. **This module is NOT managing certificates**, as there are many ways to manage this, including Kubernetes cert-manager, Let's encrypt or other ways.
## SELINUX ## SELINUX
All files and directories are configured with correct selinux context. If selinux is disabled, these contexts are ignored. All files and directories are configured with correct selinux context. If selinux is disabled, these contexts are ignored.
If selinux is set to `enforce` (not controlled within this module) and `hy_show_stats`is set to `true`, the parameter `hy_selinux_allow_stats` must also be set to `true`, else the haproxy service will not start as selinux will not allow it. If selinux is set to `enforce` (not controlled within this module), the parameter `hy_selinux_allow_stats` must also be set to `true`, else the haproxy service will not start as selinux will not allow it. This is the default setting.
## Known Problems ## Known Problems

View File

@@ -19,12 +19,10 @@ class confdroid_haproxy::firewall::iptables (
jump => 'accept', jump => 'accept',
} }
if $hy_show_stats == true {
firewall { "${hy_fw_order_no}${hy_stats_port} tcp port ${hy_stats_port}": firewall { "${hy_fw_order_no}${hy_stats_port} tcp port ${hy_stats_port}":
proto => 'tcp', proto => 'tcp',
dport => $hy_stats_port, dport => $hy_stats_port,
jump => 'accept', jump => 'accept',
} }
} }
}
} }

View File

@@ -23,7 +23,6 @@
# @param [String] hy_chroot where the chroot should be # @param [String] hy_chroot where the chroot should be
# @param [String] hy_pid the pid file to use. # @param [String] hy_pid the pid file to use.
# @param [String] hy_maxconn how many connections should we max allow. # @param [String] hy_maxconn how many connections should we max allow.
# @param [Boolean] hy_show_stats whether we want to display the statistics page
# @param [String] hy_stats_socket name and path of the stats socket # @param [String] hy_stats_socket name and path of the stats socket
# @param [String] hy_default_mode which mode to use in the defaults block # @param [String] hy_default_mode which mode to use in the defaults block
# @param [String] hy_log_default should be used when the instance's logging # @param [String] hy_log_default should be used when the instance's logging
@@ -72,7 +71,7 @@ class confdroid_haproxy::params (
Boolean $hy_manage_fail2ban = false, Boolean $hy_manage_fail2ban = false,
# selinux # selinux
Boolean $hy_selinux_allow_stats = false, Boolean $hy_selinux_allow_stats = true,
# main config # main config
String $hy_http_port = '80', String $hy_http_port = '80',
@@ -81,7 +80,6 @@ class confdroid_haproxy::params (
String $hy_chroot = '/var/lib/haproxy', String $hy_chroot = '/var/lib/haproxy',
String $hy_pid = '/var/run/haproxy.pid', String $hy_pid = '/var/run/haproxy.pid',
String $hy_maxconn = '4000', String $hy_maxconn = '4000',
Boolean $hy_show_stats = false,
String $hy_stats_socket = '/var/lib/haproxy/stats', String $hy_stats_socket = '/var/lib/haproxy/stats',
String $hy_default_mode = 'tcp', String $hy_default_mode = 'tcp',
Boolean $hy_use_http_server_close = false, Boolean $hy_use_http_server_close = false,