CHEF 服务器--错误:网络错误:getaddrinfo:提供节点名或服务名,或未知

Posted

技术标签:

【中文标题】CHEF 服务器--错误:网络错误:getaddrinfo:提供节点名或服务名,或未知【英文标题】:CHEF Server--Error: Network Error: getaddrinfo: nodename nor servname provided, or not known 【发布时间】:2015-10-30 20:20:40 【问题描述】:

我正在尝试更新托管在 AWS EC2 实例上的 Chef 服务器。这是我尝试连接到服务器时发生的情况:

$ knife ssl check
Error: Network Error: getaddrinfo: nodename nor servname provided, or not  
known

我只能想到刀配置的问题。但是,所有刀功能都在 AWS EC2 实例中工作,而不是在我的本地机器(Macbook+iTerm)上。

EC2 上的 knife.rb

log_level              :info
log_location           STDOUT
node_name              'jdoe'
client_key             '/home/ec2-user/.chef/jdoe.pem'
validation_client_name   'chef-validator'
validation_key           '/etc/chef-server/chef-validator.pem'
chef_server_url          'https://ip-xx-x-x-xxx.ec2.internal:443'
syntax_check_cache_path  '/home/ec2-user/.chef/syntax_check_cache'    

本地机器上的knife.rb

log_level                :info
log_location             STDOUT
node_name                'jdoe'
client_key               '/Users/.../.chef/jdoe.pem'
validation_client_name   'chef-validator'
validation_key           '/Users/.../.chef/chef-validator.pem'
chef_server_url          'https://ip-xx-x-x-xxx.ec2.internal:443'       
syntax_check_cache_path  '/Users/yoonsulee/.chef/syntax_check_cache'

# Amazon AWS
knife[:aws_access_key_id]='A...........Q'     # actual access key
knife[:aws_secret_access_key]='Q.............................g'      # actual secret access eky
knife[:aws_ssh_key_id]='xyz-abcd'        # general key name used for AWS access

我的 AWS 安全组和 ACL 都很好。而且我能够以某种方式从以下位置下载“trusted_certs”:

$ knife ssl fetch

最终,我尝试从我的 Chef 存储库目录中执行以下操作:

$ berks upload <new_cookbook> --force
$ knife role from file ../../roles/*

【问题讨论】:

【参考方案1】:

看起来问题是由于您使用了 EC2 实例的内部 DNS 名称。除非您通过 *** 连接到您的 AWS VPC,否则这将无法解决。 如果存在公共 DNS 名称,您应该更改工作站的 knife.rb 以使用公共 DNS 名称。如果您不希望为您的实例创建公共端点,则需要通过 *** 连接到您的 VPC 以使内部端点可解析。

【讨论】:

我确实在 knife.rb 中使用了公共 DNS,但错误消息是说证书(在 ~/.chef/trusted_certs 中下载)与 Chef-server 证书不匹配AWS 实例 (var/opt/opscode/../nginx/ca/SERVER_HOSTNAME.crt)。仅供参考,我拥有的证书与上述内部/私有 DNS 产生了共鸣。 主厨服务器必须有一个可解析的主机名。编辑 /etc/chef-server/chef-server.rb - 更改第一行: server_name = "instance-public-dns-record-here" 保存然后运行: "sudo chef-server-ctl reconfigure" 清除本地trusted_certs文件夹并重新运行knife ssl检查knife ssl fetch 我更改了 AWS 实例中的 chef-server.rb 语法,但无法运行“sudo chef-server-ctl reconfigure”命令:'错误:权限被拒绝 - /opt/chef-server/embedded/cookbooks/cache/chef-client-running.pid' 'FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)' 有没有办法读取 -在我的本地机器上的仓库中从 AWS 实例添加角色、食谱等? 你能重新运行 sudo chef-server-ctl reconfigure - 你得到相同的响应吗?可能只是一个陈旧的 pid。 我将“api_fqdn”更改为与本地knife.rb 匹配的公共DNS url。 'knife ssl check' 已经过验证,因此很有希望。我能够使用“文件 ../../roles* 中的刀角色”从我的 repo 目录上传新角色,但是当尝试执行“berks upload --force”时,我收到“连接时出错到厨师服务器”错误。此外,当尝试执行“knife ec2 server create ...”时,我能够启动一个新实例,但似乎并没有实现所有的食谱。我是不是应该回到刚才工作的原始 chef-server.rb ?

以上是关于CHEF 服务器--错误:网络错误:getaddrinfo:提供节点名或服务名,或未知的主要内容,如果未能解决你的问题,请参考以下文章

部署 OpsWorks 应用程序时出现 Chef::Exceptions::UnresolvableGitReference 错误

OpsWorks 部署错误 - Chef::Exceptions::ChildConvergeError

chef-client错误:Errno :: ENOENT:没有这样的文件或目录@ rb_sysopen-/ etc / chef / chef_guid

捕获shell输出时,Chef编译错误

Chef:如何为多个服务器提供文件库访问权限

批量安装-Artifactory-从ARTIFACTORY_URL / api / chef / some-chef-repo HANGS中获取食谱索引