Load Balancing Guide

Red Hat Satellite 6.5-beta

Configuring Satellite to use a Load Balancer

Red Hat Satellite Documentation Team

Abstract

The Load Balancing Guide describes how to configure Red Hat Satellite Server to use a load balancer to distribute load between Capsule Servers. This guide is aimed primarily at Satellite administrators with sound networking knowledge and skills.

Chapter 1. Load Balancing Solution Architecture

You can configure Satellite Server to use a load balancer to distribute client requests and network load across multiple Capsule Servers. This results in an overall performance improvement on Capsule Servers.

This guide outlines how to prepare Satellite Server and Capsule Server for load balancing, and provides guidelines on how to configure a load balancer and register clients in a load-balanced setup.

A load-balanced setup consists of the following components:

  • Satellite Server
  • Two or more Capsule Servers
  • A load balancer
  • Multiple clients

Figure 1.1. Satellite Load Balancing Solution Architecture

Load Balancing Solution Architecture

In a load-balanced setup, nearly all Capsule functionality continues to work as expected when one Capsule Server is down, for planned or unplanned maintenance. Load balancer works with the following services and features:

  • Registration using subscription-manager
  • Content Management with yum repositories
  • Optional: Puppet

Managing Puppet Limitations

Puppet Certificate Authority (CA) management does not support certificate signing in a load-balanced setup. Puppet CA stores certificate information, such as the serial number counter and CRL, on the file system. Multiple writer processes that attempt to use the same data can corrupt it.

To manage this Puppet limitation, complete the following steps:

  1. Configure Puppet certificate signing on one Capsule Server, typically the first system where you configure Capsule Server for load balancing.
  2. Configure the clients to send CA requests to port 8141 on a load balancer.
  3. Configure a load balancer to redirect CA requests from port 8141 to port 8140 on the system where you configure Capsule Server to sign Puppet certificates.

Chapter 2. Load Balancing Considerations

Distributing load between several Capsule Servers prevents any one Capsule from becoming a single point of failure. Configuring Capsules to use a load balancer can provide resilience against planned and unplanned outages. This improves availability and responsiveness.

Consider the following guidelines when configuring load balancing:

  • If you use Puppet, Puppet certificate signing is assigned to the first Capsule that you configure. If the first Capsule is down, clients cannot obtain Puppet content.
  • This solution does not use Pacemaker or other similar HA tools to maintain one state across all Capsules. To troubleshoot issues, reproduce the issue on each Capsule, bypassing the load balancer.

Additional Maintenance Required for Load Balancing

Configuring Capsules to use a load balancer results in a more complex environment and requires additional maintenance.

The following additional steps are required for load balancing:

  • You must ensure that all Capsules have the same Content Views and synchronize all Capsules to the same Content View versions
  • You must upgrade each Capsule in sequence
  • You must backup each Capsule that you configure regularly

Chapter 3. Preparing Satellite Server and Capsule Servers for Load Balancing

The following chapter describes how to prepare Satellite Server and the Capsule Server machines that make up your Capsule Server load balanced pool.

Preparing Satellite Server

You must perform a typical installation of the minimum required version of Satellite Server for this solution. The minimum version requirement for Satellite Server is Satellite Server 6.5-beta. For more information about installing Satellite Server, see Installing Satellite Server from a Connected Network.

Preparing Capsule Servers

To prepare each Capsule Server machine in the load balanced pool for installation, you must complete the following procedures described in the Red Hat Satellite Installing Capsule Server:

Chapter 4. Configuring Capsule Servers for Load Balancing

This chapter outlines how to configure Capsule Servers for load balancing. Proceed to one of the following sections depending on your Satellite Server configuration:

Use different file names for the Katello certificates you create for each Capsule Server. For example, name the certificate archive file with the Capsule Server FQDN.

4.1. Configuring Capsule Server with Default SSL Certificates for Load Balancing without Puppet

The following section describes how to configure Capsule Servers that use default SSL certificates for load balancing without Puppet.

Complete this procedure on each Capsule Server that you want to configure for load balancing.

Procedure

  1. On Satellite Server, generate Katello certificates for Capsule Server, for example:

    # capsule-certs-generate \
    --foreman-proxy-fqdn capsule.example.com \
    --certs-tar "/root/capsule.example.com-certs.tar" \
    --foreman-proxy-cname loadbalancer.example.com

    Retain a copy of the example satellite-installer command that is output by the capsule-certs-generate command for installing the Capsule Server certificate.

  2. Copy the certificate archive file from Satellite Server to Capsule Server.

    # scp /root/capsule.example.com-certs.tar \
    root@capsule.example.com:capsule.example.com-certs.tar
  3. Append the following options to the satellite-installer command that you obtain from the output of the capsule-certs-generate command. Set the --puppet-ca-server option to point to the Capsule Server where you enter the command. You must install Puppet CA on your Capsule Servers, regardless of whether you intend to use it or not. Puppet is configured in its default single-node configuration.

    --certs-cname                              "loadbalancer.example.com" \
    --puppet-dns-alt-names                     "loadbalancer.example.com" \
    --puppet-ca-server                         "capsule.example.com" \
    --foreman-proxy-puppetca                   "true" \
    --puppet-server-ca                         "true" \
    --enable-foreman-proxy-plugin-remote-execution-ssh
  4. On Capsule Server, enter the satellite-installer command, for example:

    # satellite-installer --scenario capsule \
    --foreman-proxy-content-parent-fqdn        "satellite.example.com" \
    --foreman-proxy-register-in-foreman        "true" \
    --foreman-proxy-foreman-base-url           "https://satellite.example.com" \
    --foreman-proxy-trusted-hosts              "satellite.example.com" \
    --foreman-proxy-trusted-hosts              "capsule.example.com" \
    --foreman-proxy-oauth-consumer-key         "oauth key" \
    --foreman-proxy-oauth-consumer-secret      "oauth secret" \
    --foreman-proxy-content-certs-tar          "capsule.example.com-certs.tar" \
    --puppet-server-foreman-url                "https://satellite.example.com" \
    --certs-cname                              "loadbalancer.example.com" \
    --puppet-dns-alt-names                     "loadbalancer.example.com" \
    --puppet-ca-server                         "capsule.example.com" \
    --foreman-proxy-puppetca                   "true" \
    --puppet-server-ca                         "true" \
    --enable-foreman-proxy-plugin-remote-execution-ssh

4.2. Configuring Capsule Server with Default SSL Certificates for Load Balancing with Puppet

The following section describes how to configure Capsule Servers that use default SSL certificates for load balancing with Puppet.

If you use Puppet in your Satellite configuration, you must complete the following procedures:

Configuring Capsule Server to Generate and Sign Puppet Certificates

Complete this procedure only for the system where you want to configure Capsule Server to generate and sign Puppet certificates for all other Capsule Servers that you configure for load balancing. In the examples in this procedure, the FQDN of this Capsule Server is capsule_ca.example.com.

  1. On Satellite Server, generate Katello certificates for the system where you configure Capsule Server to generate and sign Puppet certificates:

    # capsule-certs-generate \
    --foreman-proxy-fqdn capsule_ca.example.com \
    --certs-tar "/root/capsule_ca.example.com-certs.tar" \
    --foreman-proxy-cname loadbalancer.example.com

    Retain a copy of the example satellite-installer command that is output by the capsule-certs-generate command for installing the Capsule Server certificate.

  2. Copy the certificate archive file from Satellite Server to Capsule Server:

    # scp /root/capsule_ca.example.com-certs.tar \
    root@capsule_ca.example.com:capsule_ca.example.com-certs.tar
  3. Append the following options to the satellite-installer command that you obtain from the output of the capsule-certs-generate command:

    --certs-cname                              "loadbalancer.example.com" \
    --puppet-dns-alt-names                     "loadbalancer.example.com" \
    --puppet-ca-server                         "capsule_ca.example.com" \
    --foreman-proxy-puppetca                   "true" \
    --puppet-server-ca                         "true" \
    --enable-foreman-proxy-plugin-remote-execution-ssh
  4. On Capsule Server, enter the satellite-installer command, for example:

    # satellite-installer --scenario capsule \
    --foreman-proxy-content-parent-fqdn        "satellite.example.com" \
    --foreman-proxy-register-in-foreman        "true" \
    --foreman-proxy-foreman-base-url           "https://satellite.example.com" \
    --foreman-proxy-trusted-hosts              "satellite.example.com" \
    --foreman-proxy-trusted-hosts              "capsule_ca.example.com" \
    --foreman-proxy-oauth-consumer-key         "oauth key" \
    --foreman-proxy-oauth-consumer-secret      "oauth secret" \
    --foreman-proxy-content-certs-tar          "capsule_ca.example.com-certs.tar" \
    --puppet-server-foreman-url                "https://satellite.example.com" \
    --certs-cname                              "loadbalancer.example.com" \
    --puppet-dns-alt-names                     "loadbalancer.example.com" \
    --puppet-ca-server                         "capsule_ca.example.com" \
    --foreman-proxy-puppetca                   "true" \
    --puppet-server-ca                         "true" \
    --enable-foreman-proxy-plugin-remote-execution-ssh
  5. On Capsule Server, generate Puppet Certificates for all other Capsule Servers that you configure for load balancing, except this first system where you configure Puppet certificates signing:

    # puppet cert generate capsule.example.com \
    --dns_alt_names=loadbalancer.example.com

    This command creates the following files on the system where you configure Capsule Server to sign Puppet certificates:

    • /etc/puppetlabs/puppet/ssl/certs/ca.pem
    • /etc/puppetlabs/puppet/ssl/certs/capsule.example.com.pem
    • /etc/puppetlabs/puppet/ssl/private_keys/capsule.example.com.pem
    • /etc/puppetlabs/puppet/ssl/public_keys/capsule.example.com.pem

Configuring Remaining Capsule Servers for Load Balancing

Complete this procedure on each Capsule Server excluding the system where you configure Capsule Server to sign Puppet certificates.

  1. On Satellite Server, generate Katello certificates for Capsule Server:

    # capsule-certs-generate \
    --foreman-proxy-fqdn capsule.example.com \
    --certs-tar "/root/capsule.example.com-certs.tar" \
    --foreman-proxy-cname loadbalancer.example.com

    Retain a copy of the example satellite-installer command that is output by the capsule-certs-generate command for installing the Capsule Server certificate.

  2. Copy the certificate archive file from Satellite Server to Capsule Server:

    # scp /root/capsule.example.com-certs.tar \
    root@capsule.example.com:capsule.example.com-certs.tar
  3. On Capsule Server, install the puppetserver package:

    # yum install puppetserver
  4. On Capsule Server, create directories for puppet certificates:

    # mkdir -p /etc/puppetlabs/puppet/ssl/certs/ \
    /etc/puppetlabs/puppet/ssl/private_keys/ \
    /etc/puppetlabs/puppet/ssl/public_keys/
  5. On Capsule Server, copy the following files from the system where you configure Capsule Server to sign Puppet certificates. Ensure that you edit the FQDN for every remaining Capsule Server:

    • /etc/puppetlabs/puppet/ssl/certs/ca.pem
    • /etc/puppetlabs/puppet/ssl/certs/capsule.example.com.pem
    • /etc/puppetlabs/puppet/ssl/private_keys/capsule.example.com.pem
    • /etc/puppetlabs/puppet/ssl/public_keys/capsule.example.com.pem
  6. On Capsule Server, change the directory ownership to user puppet, group puppet and set the SELinux contexts:

    # chown -R puppet:puppet /etc/puppetlabs/puppet/ssl/
    # restorecon -Rv /etc/puppetlabs/puppet/ssl/
  7. Append the following options to the satellite-installer command that you obtain from the output of the capsule-certs-generate command:

    --certs-cname                              "loadbalancer.example.com" \
    --puppet-dns-alt-names                     "loadbalancer.example.com" \
    --puppet-ca-server                         "capsule_ca.example.com" \
    --foreman-proxy-puppetca                   "false" \
    --puppet-server-ca                         "false" \
    --enable-foreman-proxy-plugin-remote-execution-ssh
  8. On Capsule Server, enter the satellite-installer command, for example:

    # satellite-installer --scenario capsule \
    --foreman-proxy-content-parent-fqdn        "satellite.example.com" \
    --foreman-proxy-register-in-foreman        "true" \
    --foreman-proxy-foreman-base-url           "https://satellite.example.com" \
    --foreman-proxy-trusted-hosts              "satellite.example.com" \
    --foreman-proxy-trusted-hosts              "capsule.example.com" \
    --foreman-proxy-oauth-consumer-key         "oauth key" \
    --foreman-proxy-oauth-consumer-secret      "oauth secret" \
    --foreman-proxy-content-certs-tar          "capsule.example.com-certs.tar" \
    --puppet-server-foreman-url                "https://satellite.example.com" \
    --certs-cname                              "loadbalancer.example.com" \
    --puppet-dns-alt-names                     "loadbalancer.example.com" \
    --puppet-ca-server                         "capsule_ca.example.com" \
    --foreman-proxy-puppetca                   "false" \
    --puppet-server-ca                         :false" \
    --enable-foreman-proxy-plugin-remote-execution-ssh

4.3. Configuring Capsule Server with Custom SSL Certificates for Load Balancing without Puppet

The following section describes how to configure Capsule Servers that use custom SSL certificates for load balancing without Puppet.

4.3.1. Creating Custom SSL Certificates for Capsule Server

This procedure outlines how to create a configuration file for the Certificate Signing Request and include the load balancer and all Capsule Servers that you configure for load balancing as Subject Alternative Names (SAN). Complete this procedure on each Capsule Server that you want to configure for load balancing.

Procedure

  1. On Capsule Server, create a directory to contain all the source certificate files, accessible to only the root user:

    # mkdir /root/sat_cert
    # cd /root/sat_cert
  2. Create a private key with which to sign the Certificate Signing Request (CSR).

    If you already have a private key for this Capsule Server, skip this step.

    # openssl genrsa -out /root/sat_cert/capsule_cert_key.pem 4096
  3. Create the certificate request configuration file with the following content:

    [ req ]
    default_bits       = 4096
    distinguished_name = req_distinguished_name
    req_extensions     = req_ext
    prompt = no
    
    [ req_distinguished_name ]
    countryName=2 Letter Country Code
    stateOrProvinceName=State or Province Full Name
    localityName=Locality Name
    0.organizationName=Organization Name
    organizationalUnitName=Capsule Organization Unit Name
    commonName=capsule.example.com  1
    emailAddress=Email Address
    
    [ req_ext ]
    #authorityKeyIdentifier=keyid,issuer
    #basicConstraints=CA:FALSE
    keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
    subjectAltName = @alt_names
    
    [alt_names]                  2
    DNS.1 = loadbalancer.example.com
    DNS.2 = capsule.example.com
    DNS.3 = capsule02.example.com
    DNS.4 = capsule03.example.com
    1
    The certificate’s common name must match the FQDN of Capsule Server. Ensure to change this when running the command on each Capsule Server that you configure for load balancing.
    2
    Under [alt_names], add the FQDNs of the load balancer and all Capsule Servers that you configure for load balancing.
  4. Create a Certificate Signing Request (CSR) for the SAN certificate.

    # openssl req \
    -key /root/sat_cert/capsule_cert_key.pem \ 1
    -config SAN_config.cfg \                   2
    -out /root/sat_cert/capsule_cert_csr.pem   3
    1
    Capsule Server’s private key, used to sign the certificate
    2
    The certificate request configuration file
    3
    Certificate Signing Request file
  5. Send the certificate request to the Certificate Authority:

    When you submit the request, specify the lifespan of the certificate. The method for sending the certificate request varies, so consult the Certificate Authority for the preferred method. In response to the request, you can expect to receive a Certificate Authority bundle and a signed certificate, in separate files.

  6. Copy the Certificate Authority bundle and Capsule Server certificate file that you receive from the Certificate Authority, and the Capsule Server private key to your Satellite Server.
  7. On Satellite Server, validate the Capsule Server certificate input files:

    # katello-certs-check \
    -c /root/capsule_cert/capsule_cert.pem \      1
    -k /root/capsule_cert/capsule_cert_key.pem \  2
    -b /root/capsule_cert/ca_cert_bundle.pem      3
    1
    Capsule Server certificate file, provided by your Certificate Authority
    2
    Capsule Server’s private key that you used to sign the certificate
    3
    Certificate Authority bundle, provided by your Certificate Authority

    Retain a copy of the example capsule-certs-generate command that is output by the katello-certs-check command for creating the Certificate Archive File for this Capsule Server.

4.3.2. Configuring Capsule Server with Custom SSL Certificates for Load Balancing without Puppet

Complete this procedure on each Capsule Server that you want to configure for load balancing.

Procedure

  1. Append the following option to the capsule-certs-generate command that you obtain from the output of the katello-certs-check command:

    --foreman-proxy-cname loadbalancer.example.com
  2. On Satellite Server, enter the capsule-certs-generate command to generate Capsule certificates. For example:

    # capsule-certs-generate \
    --foreman-proxy-fqdn capsule.example.com \
    --certs-tar /root/capsule_cert/capsule.tar \
    --server-cert /root/capsule_cert/capsule.pem \
    --server-key /root/capsule_cert/capsule.pem \
    --server-ca-cert /root/sat_cert/ca_cert_bundle.pem \
    --foreman-proxy-cname loadbalancer.example.com

    Retain a copy of the example satellite-installer command from the output for installing the Capsule Server certificates.

  3. Copy the certificate archive file from Satellite Server to Capsule Server:

    # scp /root/capsule.example.com-certs.tar \
    root@capsule.example.com:capsule.example.com-certs.tar
  4. Append the following options to the satellite-installer command that you obtain from the output of the capsule-certs-generate command. Set the --puppet-ca-server option to point to the Capsule Server where you enter the command. You must install Puppet CA on your Capsule Servers, regardless of whether you intend to use it or not. Puppet is configured in its default single-node configuration.

    --certs-cname                              "loadbalancer.example.com" \
    --puppet-dns-alt-names                     "loadbalancer.example.com" \
    --puppet-ca-server                         "capsule.example.com" \
    --foreman-proxy-puppetca                   "true" \
    --puppet-server-ca                         "true" \
    --enable-foreman-proxy-plugin-remote-execution-ssh
  5. On Capsule Server, enter the satellite-installer command, for example:

    # satellite-installer --scenario capsule \
    --foreman-proxy-content-parent-fqdn        "satellite.example.com" \
    --foreman-proxy-register-in-foreman        "true" \
    --foreman-proxy-foreman-base-url           "https://satellite.example.com" \
    --foreman-proxy-trusted-hosts              "satellite.example.com" \
    --foreman-proxy-trusted-hosts              "capsule.example.com" \
    --foreman-proxy-oauth-consumer-key         "oauth key" \
    --foreman-proxy-oauth-consumer-secret      "oauth secret" \
    --foreman-proxy-content-certs-tar          "capsule.example.com-certs.tar" \
    --puppet-server-foreman-url                "https://satellite.example.com" \
    --certs-cname                              "loadbalancer.example.com" \
    --puppet-dns-alt-names                     "loadbalancer.example.com" \
    --puppet-ca-server                         "capsule.example.com" \
    --foreman-proxy-puppetca                   "true" \
    --puppet-server-ca                         "true" \
    --enable-foreman-proxy-plugin-remote-execution-ssh

4.4. Configuring Capsule Server with Custom SSL Certificates for Load Balancing with Puppet

The following section describes how to configure Capsule Servers that use custom SSL certificates for load balancing with Puppet.

4.4.1. Creating Custom SSL Certificates for Capsule Server

This procedure outlines how to create a configuration file for the Certificate Signing Request and include the load balancer and all Capsule Servers that you configure for load balancing as Subject Alternative Names (SAN). Complete this procedure on each Capsule Server that you want to configure for load balancing.

Procedure

  1. On Capsule Server, create a directory to contain all the source certificate files, accessible to only the root user:

    # mkdir /root/sat_cert
    # cd /root/sat_cert
  2. Create a private key with which to sign the Certificate Signing Request (CSR).

    If you already have a private key for this Capsule Server, skip this step.

    # openssl genrsa -out /root/sat_cert/capsule.pem 4096
  3. Create the certificate request configuration file with the following content:

    [ req ]
    default_bits       = 4096
    distinguished_name = req_distinguished_name
    req_extensions     = req_ext
    prompt = no
    
    [ req_distinguished_name ]
    countryName=2 Letter Country Code
    stateOrProvinceName=State or Province Full Name
    localityName=Locality Name
    0.organizationName=Organization Name
    organizationalUnitName=Capsule Organization Unit Name
    commonName=capsule.example.com  1
    emailAddress=Email Address
    
    [ req_ext ]
    #authorityKeyIdentifier=keyid,issuer
    #basicConstraints=CA:FALSE
    keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
    subjectAltName = @alt_names
    
    [alt_names]                  2
    DNS.1 = loadbalancer.example.com
    DNS.2 = capsule.example.com
    DNS.3 = capsule02.example.com
    DNS.4 = capsule03.example.com
    1
    The certificate’s common name must match the FQDN of Capsule Server. Ensure to change this when running the command on each Capsule Server.
    2
    Under [alt_names], add the FQDNs of the load balancer server and all Capsule Servers that you configure for load balancing.
  4. Create a Certificate Signing Request (CSR) for the SAN certificate:

    # openssl req \
    -key /root/sat_cert/capsule.pem \ 1
    -config SAN_config.cfg \          2
    -out /root/sat_cert/capsule.pem   3
    1
    Capsule Server’s private key, used to sign the certificate
    2
    The certificate request configuration file
    3
    Certificate Signing Request file
  5. Send the certificate request to the Certificate Authority:

    When you submit the request, specify the lifespan of the certificate. The method for sending the certificate request varies, so consult the Certificate Authority for the preferred method. In response to the request, you can expect to receive a Certificate Authority bundle and a signed certificate, in separate files.

  6. Copy the Certificate Authority bundle and Capsule Server certificate file that you receive from the Certificate Authority, and the Capsule Server private key to your Satellite Server to validate them.
  7. On Satellite Server, validate the Capsule Server certificate input files:

    # katello-certs-check \
    -c /root/capsule_cert/capsule.pem \      1
    -k /root/capsule_cert/capsule.pem \      2
    -b /root/capsule_cert/ca_cert_bundle.pem 3
    1
    Capsule Server certificate file, provided by your Certificate Authority
    2
    Capsule Server’s private key that you used to sign the certificate
    3
    Certificate Authority bundle, provided by your Certificate Authority

    Retain a copy of the example capsule-certs-generate command that is output by the katello-certs-check command for creating the Certificate Archive File for this Capsule Server.

4.4.2. Configuring Capsule Server with Custom SSL Certificates for Load Balancing with Puppet

If you use Puppet in your Satellite configuration, then you must complete the following procedures:

Configuring Capsule Server to Generate and Sign Puppet Certificates

Complete this procedure only for the system where you want to configure Capsule Server to generate Puppet certificates for all other Capsule Servers that you configure for load balancing. In the examples in this procedure, the FQDN of this Capsule Server is capsule_ca.example.com.

  1. Append the following option to the capsule-certs-generate command that you obtain from the output of the katello-certs-check command:

    --foreman-proxy-cname loadbalancer.example.com
  2. On Satellite Server, enter the capsule-certs-generate command to generate Capsule certificates. For example:

    # capsule-certs-generate \
    --foreman-proxy-fqdn capsule_ca.example.com \
    --certs-tar /root/capsule_cert/capsule_ca.tar \
    --server-cert /root/capsule_cert/capsule_ca.pem \
    --server-key /root/capsule_cert/capsule_ca.pem \
    --server-ca-cert /root/sat_cert/ca_cert_bundle.pem \
    --foreman-proxy-cname loadbalancer.example.com

    Retain a copy of the example satellite-installer command from the output for installing the Capsule Server certificates.

  3. Copy the certificate archive file from Satellite Server to Capsule Server.
  4. Append the following options to the satellite-installer command that you obtain from the output of the capsule-certs-generate command:

    --puppet-dns-alt-names                     "loadbalancer.example.com" \
    --puppet-ca-server                         "capsule_ca.example.com" \
    --foreman-proxy-puppetca                   "true" \
    --puppet-server-ca                         "true" \
    --enable-foreman-proxy-plugin-remote-execution-ssh
  5. On Capsule Server, enter the satellite-installer command, for example:

    satellite-installer --scenario capsule \
    --foreman-proxy-content-parent-fqdn        "satellite.example.com" \
    --foreman-proxy-register-in-foreman        "true" \
    --foreman-proxy-foreman-base-url           "https://satellite.example.com" \
    --foreman-proxy-trusted-hosts              "satellite.example.com" \
    --foreman-proxy-trusted-hosts              "capsule_ca.example.com" \
    --foreman-proxy-oauth-consumer-key         "oauth key" \
    --foreman-proxy-oauth-consumer-secret      "oauth secret" \
    --foreman-proxy-content-certs-tar          "certs.tgz" \
    --puppet-server-foreman-url                "https://satellite.example.com" \
    --certs-cname                              "loadbalancer.example.com" \
    --puppet-dns-alt-names                     "loadbalancer.example.com" \
    --puppet-ca-server                         "capsule_ca.example.com" \
    --foreman-proxy-puppetca                   "true" \
    --puppet-server-ca                         "true" \
    --enable-foreman-proxy-plugin-remote-execution-ssh
  6. On Capsule Server, generate Puppet Certificates for all other Capsules that you configure for load balancing, except this first system where you configure Puppet certificates signing:

    # puppet cert generate capsule.example.com \
    --dns_alt_names=loadbalancer.example.com

    This command creates the following files on the Puppet certificate signing Capsule Server instance:

    • /etc/puppetlabs/puppet/ssl/certs/ca.pem
    • /etc/puppetlabs/puppet/ssl/certs/capsule.example.com.pem
    • /etc/puppetlabs/puppet/ssl/private_keys/capsule.example.com.pem
    • /etc/puppetlabs/puppet/ssl/public_keys/capsule.example.com.pem

Configuring Remaining Capsule Servers for Load Balancing

Complete this procedure for each Capsule Server excluding the system where you configure Capsule Server to sign Puppet certificates.

  1. Append the following option to the capsule-certs-generate command that you obtain from the output of the katello-certs-check command:

    --foreman-proxy-cname loadbalancer.example.com
  2. On Satellite Server, enter the capsule-certs-generate command to generate Capsule certificates. For example:

    # capsule-certs-generate \
    --foreman-proxy-fqdn capsule.example.com \
    --certs-tar /root/capsule_cert/capsule.tar \
    --server-cert /root/capsule_cert/capsule.pem \
    --server-key /root/capsule_cert/capsule.pem \
    --server-ca-cert /root/sat_cert/ca_cert_bundle.pem \
    --foreman-proxy-cname loadbalancer.example.com

    Retain a copy of the example satellite-installer command from the output for installing the Capsule Server certificates.

  3. Copy the certificate archive file from Satellite Server to Capsule Server.

    # scp /root/capsule.example.com-certs.tar \
    root@capsule.example.com:capsule.example.com-certs.tar
  4. On Capsule Server, install the puppetserver package:

    # yum install puppetserver
  5. On Capsule Server, create directories for puppet certificates:

    # mkdir -p /etc/puppetlabs/puppet/ssl/certs/ \
    /etc/puppetlabs/puppet/ssl/private_keys/ \
    /etc/puppetlabs/puppet/ssl/public_keys/
  6. On Capsule Server, copy the following files from the system where you configure Capsule Server to sign Puppet certificates. Ensure that you edit the FQDN for every remaining Capsule Server:

    • /etc/puppetlabs/puppet/ssl/certs/ca.pem
    • /etc/puppetlabs/puppet/ssl/certs/capsule.example.com.pem
    • /etc/puppetlabs/puppet/ssl/private_keys/capsule.example.com.pem
    • /etc/puppetlabs/puppet/ssl/public_keys/capsule.example.com.pem
  7. On Capsule Server, change the directory ownership to user puppet, group puppet and set the SELinux contexts:

    # chown -R puppet:puppet /etc/puppetlabs/puppet/ssl/
    # restorecon -Rv /etc/puppetlabs/puppet/ssl/
  8. Append the following options to the satellite-installer command that you obtain from the output of the capsule-certs-generate command:

    --certs-cname                              "loadbalancer.example.com" \
    --puppet-dns-alt-names                     "loadbalancer.example.com" \
    --puppet-ca-server                         "capsule_ca.example.com" \
    --foreman-proxy-puppetca                   "false" \
    --puppet-server-ca                         "false" \
    --enable-foreman-proxy-plugin-remote-execution-ssh
  9. On Capsule Server, enter the satellite-installer command, for example:

    # satellite-installer --scenario capsule \
    --foreman-proxy-content-parent-fqdn        "satellite.example.com" \
    --foreman-proxy-register-in-foreman        "true" \
    --foreman-proxy-foreman-base-url           "https://satellite.example.com" \
    --foreman-proxy-trusted-hosts              "satellite.example.com" \
    --foreman-proxy-trusted-hosts              "capsule.example.com" \
    --foreman-proxy-oauth-consumer-key         "oauth key" \
    --foreman-proxy-oauth-consumer-secret      "oauth secret" \
    --foreman-proxy-content-certs-tar          "capsule.example.com-certs.tar" \
    --puppet-server-foreman-url                "https://satellite.example.com" \
    --certs-cname                              "loadbalancer.example.com" \
    --puppet-dns-alt-names                     "loadbalancer.example.com" \
    --puppet-ca-server                         "capsule_ca.example.com" \
    --foreman-proxy-puppetca                   "false" \
    --puppet-server-ca                         "false" \
    --enable-foreman-proxy-plugin-remote-execution-ssh

Chapter 5. Installing the Load Balancer

The following section provides a general guidance example on how to configure a HAProxy load balancer. You can install any other load balancer software solution that supports TCP forwarding and sticky sessions. It is up to you to decide on a suitable load balancer.

  1. On a Red Hat Enterprise Linux 7 host, install the HAProxy RPM.

    # yum install haproxy
  2. Install the following package that includes the semanage tool:

    # yum install policycoreutils-python
  3. Configure SELinux to allow HAProxy to bind any port:

    # semanage boolean --modify --on haproxy_connect_any
  4. Configure the load balancer to balance the network load for the ports as described in Table 5.1, “Ports Configuration for the Load Balancer”. For example, to configure ports for HAProxy, edit the /etc/haproxy/haproxy.cfg file to correspond with the table.

    You must configure sticky session on TCP port 443 to request yum metadata for RPM repositories from different Capsule Servers in the pool.

    Table 5.1. Ports Configuration for the Load Balancer

    ServicePortModeBalance ModeDestination

    HTTP

    80

    TCP

    roundrobin

    port 80 on all Capsules

    HTTPS

    443

    TCP

    source

    port 443 on all Capsules

    RHSM

    8443

    TCP

    roundrobin

    port 8443 on all Capsules

    AMQP

    5647

    TCP

    roundrobin

    port 5647 on all Capsules

    Puppet (Optional)

    8140

    TCP

    roundrobin

    port 8140 on all Capsules

    PuppetCA (Optional)

    8141

    TCP

    roundrobin

    port 8140 on the first Capsule

    SmartProxy (Optional for OpenScap)

    9090

    TCP

    roundrobin

    port 9090 on all Capsules

    Docker (Optional)

    5000

    TCP

    roundrobin

    port 5000 on all Capsules

    Note that the additional port for PuppetCA (port 8141) is forwarded only to the first Capsule.

  5. Start and enable the HAProxy service:

    # systemctl start haproxy
    # systemctl enable haproxy

Chapter 6. Registering Clients

You can register a client running a Red Hat Enterprise Linux version 6, 7 or 8 operating system to Capsule Servers that you configure for load balancing. For more information about registering clients and configuring them to use Puppet, see Registration in the Managing Hosts guide.

To register clients, proceed to one of the following procedures:

6.1. Registering Clients Using the Bootstrap Script

To register clients, enter the following command on the client. You must complete the registration procedure for each client.

Prerequisite

Ensure that you install the bootstrap script on the client and change the script’s file permissions to executable. For more information, see the Registering Hosts to Satellite 6 Using The Bootstrap Script section in Managing Hosts.

  • On Red Hat Enterprise Linux 8, enter the following command:

    # python /usr/libexec/platform-python bootstrap.py \
    --login=admin \
    --server loadbalancer.example.com \
    --organization="Your_Organization" \
    --location="Your_Location" \
    --hostgroup="Your_Hostgroup" \
    --activationkey=your_activation_key \
    --enablerepos=rhel-7-server-satellite-tools-6-beta-rpms \
    --puppet-ca-port 8141 \    1
    --force                    2
    1
    Include the --puppet-ca-port 8141 option if you use Puppet.
    2
    Include the --force option to register the client that has been previously registered to a standalone Capsule.
  • On Red Hat Enterprise Linux 7, 6, or 5, enter the following command:

    # python bootstrap.py --login=admin \
    --server loadbalancer.example.com \
    --organization="Your_Organization" \
    --location="Your_Location" \
    --hostgroup="Your_Hostgroup" \
    --activationkey=your_activation_key \
    --enablerepos=rhel-7-server-satellite-tools-6-beta-rpms \
    --puppet-ca-port 8141 \    1
    --force                    2
    1
    Include the --puppet-ca-port 8141 option if you use Puppet.
    2
    Include the --force option to register the client that has been previously registered to a standalone Capsule.

The script prompts for the password corresponding to the Satellite user name you entered with the --login option.

6.2. Registering Clients Manually

To register clients manually, complete the following procedure on each client that you register.

Procedure

  1. Remove the katello-ca-consumer package if it is installed:

    # yum remove 'katello-ca-consumer*'
  2. Install the katello-ca-consumer package from the load balancer:

    # rpm -Uvh \
    http://loadbalancer.example.com/pub/katello-ca-consumer-latest.noarch.rpm
  3. Register the client and include the --serverurl and --baseurl options:

    # subscription-manager register --org=Your_Organization \
    --activationkey=Your_Activation_Key \
    --serverurl=https://loadbalancer.example.com:8443/rhsm \
    --baseurl=https://loadbalancer.example.com/pulp/repos

Chapter 7. Promoting SCAP Content to Clients

The following section describes how to promote Security Content Automation Protocol (SCAP) content to clients registered to Capsule Servers that you configure for load balancing.

Prerequisites

Ensure that you configure the SCAP content. For more information, see Configuring SCAP Content in Administering Red Hat Satellite.

Procedure

  1. In the Satellite web UI, navigate to Configure > Classes and click foreman_scap_client.
  2. Click the Smart Class Parameter tab.
  3. In the pane to the left of the Smart Class Parameter window, click port.
  4. In the Default Behavior area, select the Override check box.
  5. From the Key Type list, select integer.
  6. In the Default Value field, enter 9090.
  7. In the pane to the left of the Smart Class Parameter window, click server.
  8. In the Default Behavior area, select the Override check box.
  9. From the Key Type list, select string.
  10. In the Default Value field, enter the FQDN of your load balancer. For example, loadbalancer.example.com.
  11. In the lower left of the Smart Class Parameter window, click Submit.
  12. Add the puppet module that contains the foreman_scap_client puppet class to a Content View. Publish and promote this Content View to your client’s environment.
  13. If you want to verify the configuration, run the Puppet agent on the client to promote the changes. Do not run the Puppet agent on every client manually because the Puppet agent runs on the clients every 30 minutes.

    # puppet agent -t --noop
  14. On the client, verify that the /etc/foreman_scap_client/config.yaml file contains the following lines:

    # Foreman proxy to which reports should be uploaded
    :server: 'loadbalancer.example.com'
    :port: 9090

Additional Resources

Chapter 8. Verifying the Load Balancing Configuration

You can verify the load balancing configuration by completing the following steps for each Capsule Server that you configure:

  1. Shut down the base operating system for your Capsule Server.
  2. Verify that content or subscription management features are available on the client registered to this Capsule. For example, enter the subscription-manager refresh command on the client.
  3. Restart the base operating system for your Capsule Server.

Legal Notice

Copyright © 2019 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.