将食谱上传到托管在 Docker 容器内的 Chef 服务器时遇到“内部服务错误”

将食谱上传到托管在 Docker 容器内的 Chef 服务器时遇到“内部服务错误”

由于某些原因,在我的组织中我们不能直接使用 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 容器引入的请求路由有关。

相关内容