Ora

How to Configure Connectivity for Puppet Components

Published in Puppet Configuration 5 mins read

Connecting Puppet effectively involves establishing robust communication pathways between its various components, primarily between Puppet agents and the Puppet master, and the Puppet master with PuppetDB. This ensures that agents can retrieve configurations, and the master can store and process vital operational data.

Understanding Puppet Connectivity

In a Puppet environment, "connecting" refers to configuring the network and application settings that allow different parts of the system to communicate. The two primary connections are:

  1. Puppet Agent to Puppet Master: Agents (nodes) contact the master to request and apply configurations (catalogs).
  2. Puppet Master to PuppetDB: The master sends facts, catalogs, and reports to PuppetDB for storage, querying, and analysis.

Proper configuration ensures smooth operation, efficient reporting, and reliable infrastructure management.

Connecting the Puppet Master to PuppetDB

PuppetDB acts as the data warehouse for Puppet, storing facts, catalogs, and reports from all your nodes. Connecting your Puppet master to PuppetDB is a critical step for gaining insights into your infrastructure.

To establish this connection, you'll need to configure the Puppet master's settings to direct information to PuppetDB.

Key Configuration Steps

The process involves editing specific configuration files on your Puppet master.

  1. Locate Puppet's Configuration Directory
    Before making any changes, identify the correct configuration directory for your Puppet installation. This location can vary depending on your operating system and Puppet version.

    • Linux (modern Puppet): Typically /etc/puppetlabs/puppet/ or /etc/puppetlabs/puppetserver/.
    • Windows: Usually C:\ProgramData\PuppetLabs\puppet\etc\.
  2. Edit puppetdb.conf
    This file specifies how the Puppet master connects to the PuppetDB server. You'll find it within the Puppet master's configuration directory, often under a subdirectory like puppet/puppetdb.conf or puppetserver/conf.d/puppetdb.conf.

    # Example puppetdb.conf
    [main]
    server_urls = https://<PUPPETDB_HOSTNAME>:8081
    • Replace <PUPPETDB_HOSTNAME> with the actual hostname or IP address of your PuppetDB server.
    • The port 8081 is the default for secure HTTPS communication.
  3. Edit routes.yaml
    The routes.yaml file tells the Puppet master where to send specific types of data, such as facts, catalogs, and reports. It's crucial for directing this information to PuppetDB.

    You can usually find this file in the Puppet master's configuration directory, often at /etc/puppetlabs/puppet/routes.yaml or /etc/puppetlabs/puppetserver/conf.d/routes.yaml.

    # Example routes.yaml
    ---
    master:
      facts:
        terminus: puppetdb
        cache: puppetdb
      catalog:
        terminus: puppetdb
        cache: puppetdb
      report:
        terminus: puppetdb

    This configuration instructs the Puppet master to send facts, catalogs, and reports directly to PuppetDB.

  4. Edit puppet.conf (General Configuration)
    While puppetdb.conf and routes.yaml are specific to PuppetDB, the main puppet.conf file (located in your main Puppet configuration directory) contains general settings that might be relevant. For instance, ensuring that the Puppet master has the correct [main] or [server] section configured can be important for overall operation.

    # Example snippet from puppet.conf on the Puppet master
    [main]
    certname = <PUPPET_MASTER_HOSTNAME>
    server = <PUPPET_MASTER_HOSTNAME> # Points to itself
    environment = production
    runinterval = 30m
    
    [server]
    # Any server-specific settings
  5. Ensure Proper Ownership of Configuration Files
    After editing these files, it's vital to verify and correct their ownership and permissions. Incorrect permissions can prevent Puppet from reading the files or introduce security vulnerabilities.

    • Ownership: Typically, configuration files should be owned by the puppet or puppetserver user and group.
    • Permissions: Restrict access so only the owner can read and write, and optionally, the group can read. For example, 0640 or 0600.

    Example (Linux):

    sudo chown puppet:puppet /etc/puppetlabs/puppet/puppetdb.conf
    sudo chmod 0640 /etc/puppetlabs/puppet/puppetdb.conf

Configuration Summary Table

This table provides a quick reference for the main configuration files involved in connecting Puppet master to PuppetDB.

File Name Location (Example) Purpose Key Settings/Sections
puppetdb.conf /etc/puppetlabs/puppet/ Specifies PuppetDB connection details server_urls
routes.yaml /etc/puppetlabs/puppet/ Directs data (facts, reports) to PuppetDB master: facts: terminus: puppetdb, report: terminus: puppetdb
puppet.conf /etc/puppetlabs/puppet/ General Puppet master settings [main], [server]

After making these changes, restart your Puppet server service (e.g., puppetserver on Linux) for the configurations to take effect.

Connecting Puppet Agents to the Puppet Master

Puppet agents need to be configured to find and communicate with the Puppet master to receive their desired state configurations.

Key Agent Configuration

  1. Locate Agent's Configuration Directory
    The configuration directory on an agent is similar to the master:

    • Linux: /etc/puppetlabs/puppet/
    • Windows: C:\ProgramData\PuppetLabs\puppet\etc\
  2. Edit puppet.conf on the Agent
    On each Puppet agent node, modify its puppet.conf file to specify the Puppet master's hostname.

    # Example puppet.conf on a Puppet agent
    [main]
    certname = <AGENT_HOSTNAME> # Unique hostname of the agent
    server = <PUPPET_MASTER_HOSTNAME> # Hostname of the Puppet master
    environment = production
    runinterval = 30m
    • certname: This should be the unique fully qualified domain name (FQDN) of the agent node.
    • server: This must be the FQDN of your Puppet master server.
  3. Initiate Agent Run and Certificate Signing
    Once configured, the agent can attempt to connect to the master:

    sudo /opt/puppetlabs/bin/puppet agent -t
    • The agent will generate a certificate signing request (CSR) and send it to the master.

    • On the Puppet master, you must sign this certificate. You can list pending CSRs and sign them using:

      sudo /opt/puppetlabs/bin/puppet cert list
      sudo /opt/puppetlabs/bin/puppet cert sign <AGENT_HOSTNAME>
    • After the certificate is signed, run puppet agent -t on the agent again. It should now successfully retrieve and apply its configuration catalog.

Secure Communication

All communication in Puppet (agent to master, master to PuppetDB) is secured using SSL/TLS certificates. The initial certificate signing process is crucial for establishing this trust.

For more detailed information on PuppetDB configuration, refer to the official PuppetDB documentation. For general Puppet agent and master configuration, consult the Puppet documentation.