EC2의 꼭두각시 인증서 불일치

EC2의 꼭두각시 인증서 불일치

나는 gem(rhel6)을 통해 ec2에 puppetmaster(2.7.6)를 설정하고 있는데 인증서 이름에 문제가 발생하여 마스터가 스스로 대화할 수 있게 되었습니다.

내 puppet.conf는 다음과 같습니다:

[main]
  logdir = /var/log/puppet
  rundir = /var/run/puppet
  vardir = /var/lib/puppet
  ssldir = $vardir/ssl
  pluginsync = true
  environment = production
  report = true
  certname = master

puppetmaster 프로세스를 시작하면 SSL 디렉토리는 다음과 같습니다.

ssl/private_keys/master.pem
ssl/crl.pem
ssl/public_keys/master.pem
ssl/ca/ca_crl.pem
ssl/ca/signed/master.pem
ssl/ca/ca_crt.pem
ssl/ca/ca_pub.pem
ssl/ca/ca_key.pem
ssl/certs/ca.pem
ssl/certs/master.pem

'server' 옵션을 변경할 필요가 없도록 'puppet' 호스트 이름을 localhost로 지정하는 /etc/hosts 항목이 상자에 있습니다.

에이전트를 실행하면 다음을 얻습니다.

# puppet agent --test
info: Retrieving plugin
err: /File[/var/lib/puppet/lib]: Failed to generate additional resources using 'eval_generate: Server hostname 'puppet' did not match server certificate; expected master
err: /File[/var/lib/puppet/lib]: Could not evaluate: Server hostname 'puppet' did not match server certificate; expected master Could not retrieve file metadata for puppet://puppet/plugins: Server hostname 'puppet' did not match server certificate; expected master
err: Could not retrieve catalog from remote server: Server hostname 'puppet' did not match server certificate; expected master
warning: Not using cache on failed catalog
err: Could not retrieve catalog; skipping run
err: Could not send report: Server hostname 'puppet' did not match server certificate; expected master

인증서 이름을 서버로 지정하면(해당 호스트 항목 포함) 다음과 같은 결과를 얻습니다.

# puppet agent --test --server master 
info: Retrieving plugin
err: /File[/var/lib/puppet/lib]: Could not evaluate: Could not retrieve information from environment production source(s) puppet://master/plugins
info: Caching catalog for master
info: Applying configuration version '1321805956'
notice: Finished catalog run in 0.05 seconds

일종의 성공입니다. 나중에 매니페스트를 적용할 때 해당 소스 오류가 저를 괴롭힐 것입니다. ec2 개인 호스트 이름을 사용하여 몇 가지 다른 변형을 시도했지만 결과가 엇갈렸습니다.

나는 server = 'x' 설정을 피하고 dns/hosts를 사용하여 어떤 서버를 결정하기 위해 'puppet'이 무엇을 해결하는지 제어하고 싶습니다(가용성 영역 등에서 더 쉽게 재생).

답변1

그래서 몇 가지 조사 끝에 나는 이것을 알아냈습니다. Puppet 2.7.6은 마스터에 대한 인증서를 생성할 때 서버 인증서에 subjectAltNames를 설정하지 않습니다(실제로 어느 시점에서도 마스터인지 알 수 없음).

이를 수정하는 방법에는 두 가지가 있습니다.

1. 마스터에 대한 인증서를 수동으로 생성합니다.

puppet ca generate --dns_alt_names puppet [master-name/uuid/string/etc]

2. puppet.conf에 dns_alt_names를 설정합니다.

꼭두각시 마스터 또는 꼭두각시를 실행하기 전에 마스터(및 마스터에만 해당)에 추가하세요 dns_alt_names = puppet(인증서 생성 원인)

이제 'puppet'에 연결하는 /etc/hosts 또는 dns 항목이 제대로 작동합니다.

플러그인과 관련된 다른 오류는 플러그인 동기화를 활성화했지만 동기화할 수 있는 플러그인이 없다는 버그입니다.

답변2

certname = master

인증서 이름이 마스터로 설정되어 있습니다. 설정하는 방법에 따라 puppet으로 작동시키거나 호스트 파일을 사용하여 puppet 대신 마스터의 IP 주소를 설정하십시오.

검색 도메인 항목 없이 DNS 항목을 사용할 수 있도록 master.example.com 또는 puppet.example.com과 같은 FQDN을 사용할 수도 있습니다.

답변3

EC2에서 puppet을 사용하기 위한 한 가지 팁은 ElasticIP를 puppetmaster에 할당한 다음 IP에 대한 A 레코드가 아닌 ElasticIP CNAME에 대한 DNS 항목을 생성하는 것입니다.

AWS DNS 서버는 쿼리가 동일한 EC2 지역 내에서 왔는지 아니면 외부에서 왔는지에 따라 응답이 다릅니다. CNAME 요청이 EC2 지역 내에서 발생하는 경우 AWS DNS 서버는 CNAME의 내부 IP로 응답합니다.

EC2 puppet 클라이언트가 AWS DNS 서버에 Puppetmaster의 IP를 쿼리할 때 외부 IP가 아닌 Puppetmaster의 내부 IP로 연결되는 응답을 받을 수 있도록 DNS에서 CNAME을 사용해야 합니다.

관련 정보