由于某些原因,在我的组织中我们不能直接使用 Chef 服务器的 FQDN。所有对它的请求都应重新路由。因此我们必须在 /etc/opscode/chef-server.rb 文件中进行以下设置。
api_fqdn "<some_other_ip>"
这一切都运行正常,直到有一天,其中一台 Chef 服务器无法上传任何食谱,但其他所有 knife 命令(如“knife ssl check”、“knife ssl fetch”或“knife cookbook list”)均可以成功运行。
检查了chef-server.rb文件,发现多了两行。
bookshelf['vip'] = "https://<some_other_ip>:443"
bookshelf['external_url'] = "https://<some_other_ip>:443"
Bookshelf 是 Chef 用来存储菜谱的与 Amazon Simple Storage Service (S3) 兼容的服务。一些开发人员可能出于实验目的这样做。结果异常如下。
Uploading <some_cookbook> [0.10.12] ERROR: Server returned error 500 for https://<some_other_ip>/organizations/cobalt/sandboxes/6d8079e5b8c3bfcbf24b9fcc88020bd2, retrying 1/5 in 3s ERROR: Server returned error 500 for https://<some_other_ip>/organizations/cobalt/sandboxes/6d8079e5b8c3bfcbf24b9fcc88020bd2, retrying 2/5 in 8s ERROR: Server returned error 500 for https://<some_other_ip/organizations/cobalt/sandboxes/6d8079e5b8c3bfcbf24b9fcc88020bd2, retrying 3/5 in 9s ERROR: Server returned error 500 for https://<some_other_ip>/organizations/cobalt/sandboxes/6d8079e5b8c3bfcbf24b9fcc88020bd2, retrying 4/5 in 27s ERROR: Server returned error 500 for https://<some_other_ip>/organizations/cobalt/sandboxes/6d8079e5b8c3bfcbf24b9fcc88020bd2, retrying 5/5 in 51s ERROR: internal server error Response: internal service error
不确定这会有什么影响,因为设置记录在厨师并且有这样的记录堆栈溢出(参见已接受的答案)也。
Chef 服务器(12.2)由各自的 docker 容器托管。
答案1
进一步调查发现,这两行附加内容导致 Chef 服务器上的 /var/opt/opscode/opscode-erchef/etc/app.config 中出现以下设置。
{s3_url, "https://<some_other_ip>"},
{s3_external_url, "https://<some_other_ip>:443"},
这与其他正在运行的 Chef 服务器不同,其中有两条线路
{s3_url, "https://782492f20c53"},
{s3_external_url, host_header},
其中 782492f20c53 是 docker 容器 ID(用作容器内的主机名,可127.0.0.1 782492f20c53
在 /etc/hosts 中找到)。
受此启发,在有问题的 Chef 服务器上将 chef-server.rb 文件中的书架 URL 设置更改为如下所示。
bookshelf['vip'] = "https://a0a994456729"
bookshelf['external_url'] = :host_header
运行chef-server-ctl reconfigure
后食谱就成功上传了。
由于我对网络没有经验,所以不确定根本原因。猜测这与使用 docker 容器引入的请求路由有关。