在puppet服务器版本4

时间:2017-07-06 12:36:13

标签: puppet

我正在尝试使用以下链接创建具有中央证书颁发机构的多个puppet主服务器:
https://docs.puppet.com/puppet/3/scaling_multiple_masters.html#option-1-direct-agent-nodes-to-the-ca-master
但是这个文档是根据puppet版本3,并且对于puppet 4,有一个puppet服务器在JVM和jetty上运行服务请求。如上所述,doc apache将所有证书URI转发到中央服务器,如何使用puppet 4创建相同的架构。

1 个答案:

答案 0 :(得分:0)

似乎只有Enterprise Puppet才有可能。 我认为,与开源的一样,您可以继续使用Apache / Nginx和代理请求到CA,或者在所有代理puppet.conf上配置webserver.conf和用户ca_server。我不确定CRL撤销可以做些什么。 使用Puppet 3.8我们使用以下方案,我认为它应该适用于新的puppetserver(虽然它有点疯狂):

  1. 当我们抓住inotify的人在CA上清理证书时 与incron守护进程的事件。

  2. incron使用GET请求向所有木偶大师运行curl

    pwgen -1 > /tmp/crl
    curl --data-binary '@/tmp/crl' http://puppetmaster:8887/crl
    
  3. 在master上的nginx配置中,我们有以下内容:

    server {
        listen 8887;
        server_name puppetmaster.net;
        root /var/www;
        location /crl {
    
            limit_except POST          { deny all; }
    
            client_body_temp_path      /srv/puppet/crl/;
            client_body_in_file_only   on;
            client_body_buffer_size    128K;
            client_max_body_size       128K;
    
            proxy_pass_request_headers on;
            proxy_set_header           X-FILE $request_body_file;
            proxy_set_body             off;
            proxy_redirect             off;
            proxy_pass                 http://localhost:8888;
        }
    }
    server {
        listen localhost:8888;
        server_name localhost;
        root /var/www;
    }
    
  4. 因此我们将请求保存在一个文件中,并在master上再安装一个incron守护程序来捕获它并再向CA运行一个请求并通过CA API下载CRL (见木偶文件)。之后重新加载httpd。我们这样做:

    #!/bin/bash
    
    PID='/tmp/crlpid'
    if [[ -f $PID ]]; then
        exit
    else
        touch $PID
    fi
    
    function check {
        rm -f /srv/puppet/crl/*
        sleep 10
        COUNT=$(ls -1 /srv/puppet/crl | wc -l)
        if [[ $COUNT > 0 ]]; then
            check
        else
            return 0
        fi
    }
    
    if check; then
        STATUS='NOTSET'
    
        SSLDIR=`puppet config print ssldir`
        CERTNAME=`hostname -f`
    
        ENV=`puppet config print environment`
        URL="https://puppetca:8140/${ENV}/certificate_revocation_list/ca"
    
        CRT=`puppet config print cacert`
        CRL=`puppet config print cacrl`
        TMPCRL="/tmp/puppet_ca_crlpem.tmp"
    
        curl --output "${TMPCRL}" \
            --cacert "${SSLDIR}/certs/ca.pem" \
            --cert "${SSLDIR}/certs/${CERTNAME}.pem" \
            --key "${SSLDIR}/private_keys/${CERTNAME}.pem" \
            -H "Accept: s" "${URL}"
    
        openssl crl -text -in "${TMPCRL}" -CAfile "${CRT}" -noout > /dev/null 2>&1 && STATUS='VALID'
    
        if [[ "${STATUS}" == "VALID" ]]; then
            mv -f "${TMPCRL}" "${CRL}"
            chown puppet:puppet "${CRL}"
            systemctl reload httpd.service
        fi
        rm -f $PID
    fi