部署在 Cloud Foundry 中的 Slack Bot returns 502 Bad Gateway 错误
Slack Bot deployed in Cloud Foundry returns 502 Bad Gateway errors
在 Slack 中,我设置了一个带有斜杠命令的应用程序。当我使用本地 ngrok
服务器时,该应用程序运行良好。
但是,当我将应用服务器部署到 PCF 时,它返回 502 错误:
[CELL/0] [OUT] Downloading droplet...
[CELL/SSHD/0] [OUT] Exit status 0
[APP/PROC/WEB/0] [OUT] Exit status 143
[CELL/0] [OUT] Cell e6cf018d-0bdd-41ca-8b70-bdc57f3080f1 destroying container for instance 28d594ba-c681-40dd-4514-99b6
[PROXY/0] [OUT] Exit status 137
[CELL/0] [OUT] Downloaded droplet (81.1M)
[CELL/0] [OUT] Cell e6cf018d-0bdd-41ca-8b70-bdc57f3080f1 successfully destroyed container for instance 28d594ba-c681-40dd-4514-99b6
[APP/PROC/WEB/0] [OUT] ⚡️ Bolt app is running! (development server)
[OUT] [APP ROUTE] - [2021-12-23T20:35:11.460507625Z] "POST /slack/events HTTP/1.1" 502 464 67 "-" "Slackbot 1.0 (+https://api.slack.com/robots)" "10.0.1.28:56002" "10.0.6.79:61006" x_forwarded_for:"3.91.15.163, 10.0.1.28" x_forwarded_proto:"https" vcap_request_id:"7fe6cea6-180a-4405-5e5e-6ba9d7b58a8f" response_time:0.003282 gorouter_time:0.000111 app_id:"f1ea0480-9c6c-42ac-a4b8-a5a4e8efe5f3" app_index:"0" instance_id:"f46918db-0b45-417c-7aac-bbf2" x_cf_routererror:"endpoint_failure (use of closed network connection)" x_b3_traceid:"31bf5c74ec6f92a20f0ecfca00e59007" x_b3_spanid:"31bf5c74ec6f92a20f0ecfca00e59007" x_b3_parentspanid:"-" b3:"31bf5c74ec6f92a20f0ecfca00e59007-31bf5c74ec6f92a20f0ecfca00e59007"
除了endpoint_failure (use of closed network connection)
,我还看到:
x_cf_routererror:"endpoint_failure (EOF (via idempotent request))"
x_cf_routererror:"endpoint_failure (EOF)"
在 PCF 中,我为应用程序创建了一个 https://
路由。这是 URL 我放入 Slack 应用程序的“重定向 URLs” 部分以及我的 Slash 命令 URL.
在 Slack 中,URL 以 /slack/events
结尾
这个配置在本地运行良好,所以我想我错过了 PCF 中的一个配置点。
Manifest.yml:
applications:
- name: kafbot
buildpacks:
- https://github.com/starkandwayne/librdkafka-buildpack/releases/download/v1.8.2/librdkafka_buildpack-cached-cflinuxfs3-v1.8.2.zip
- https://github.com/cloudfoundry/python-buildpack/releases/download/v1.7.48/python-buildpack-cflinuxfs3-v1.7.48.zip
instances: 1
disk_quota: 2G
# health-check-type: process
memory: 4G
routes:
- route: "kafbot.apps.prod.fake_org.cloud"
env:
KAFKA_BROKER: 10.32.17.182:9092,10.32.17.183:9092,10.32.17.184:9092,10.32.17.185:9092
SLACK_BOT_TOKEN: ((slack_bot_token))
SLACK_SIGNING_SECRET: ((slack_signing_key))
command: python app.py
当x_cf_routererror
说endpoint_failure
时,这意味着应用程序由于某种原因没有处理Gorouter发送给它的请求。
从那里,您想查看 response_time
。如果响应时间很长(通常与超时值相同,几乎正好是 60 秒),则意味着您的应用程序响应速度不够快。如果该值较低,则可能意味着存在连接问题,例如 Gorouter 尝试建立 TCP 连接但无法建立连接。
这通常不应该发生。系统有适当的健康检查,确保应用程序已启动并正在侦听请求。否则,应用程序将无法正常启动。
在这种特殊情况下,清单具有 health-check-type: process
,它禁用了标准的基于端口的健康检查并使用了基于进程的健康检查。这允许应用程序启动,即使它不在正确的端口上。因此,当 Gorouter 在预期端口上向应用程序发送请求时,它无法连接到应用程序的端口。旁注:通常,如果您的应用程序未侦听传入请求,您只会使用基于进程的健康检查。
平台将传入一个 $PORT
环境变量,其中包含一个值(它始终为 8080,但将来可能会更改)。您需要确保您的应用正在侦听该端口。此外,您想在 0.0.0.0 上收听,而不是本地主机或 127.0.0.1。
这应该确保 Gorouter 可以在约定的端口上向您的应用程序发送请求。
在 Slack 中,我设置了一个带有斜杠命令的应用程序。当我使用本地 ngrok
服务器时,该应用程序运行良好。
但是,当我将应用服务器部署到 PCF 时,它返回 502 错误:
[CELL/0] [OUT] Downloading droplet...
[CELL/SSHD/0] [OUT] Exit status 0
[APP/PROC/WEB/0] [OUT] Exit status 143
[CELL/0] [OUT] Cell e6cf018d-0bdd-41ca-8b70-bdc57f3080f1 destroying container for instance 28d594ba-c681-40dd-4514-99b6
[PROXY/0] [OUT] Exit status 137
[CELL/0] [OUT] Downloaded droplet (81.1M)
[CELL/0] [OUT] Cell e6cf018d-0bdd-41ca-8b70-bdc57f3080f1 successfully destroyed container for instance 28d594ba-c681-40dd-4514-99b6
[APP/PROC/WEB/0] [OUT] ⚡️ Bolt app is running! (development server)
[OUT] [APP ROUTE] - [2021-12-23T20:35:11.460507625Z] "POST /slack/events HTTP/1.1" 502 464 67 "-" "Slackbot 1.0 (+https://api.slack.com/robots)" "10.0.1.28:56002" "10.0.6.79:61006" x_forwarded_for:"3.91.15.163, 10.0.1.28" x_forwarded_proto:"https" vcap_request_id:"7fe6cea6-180a-4405-5e5e-6ba9d7b58a8f" response_time:0.003282 gorouter_time:0.000111 app_id:"f1ea0480-9c6c-42ac-a4b8-a5a4e8efe5f3" app_index:"0" instance_id:"f46918db-0b45-417c-7aac-bbf2" x_cf_routererror:"endpoint_failure (use of closed network connection)" x_b3_traceid:"31bf5c74ec6f92a20f0ecfca00e59007" x_b3_spanid:"31bf5c74ec6f92a20f0ecfca00e59007" x_b3_parentspanid:"-" b3:"31bf5c74ec6f92a20f0ecfca00e59007-31bf5c74ec6f92a20f0ecfca00e59007"
除了endpoint_failure (use of closed network connection)
,我还看到:
x_cf_routererror:"endpoint_failure (EOF (via idempotent request))"
x_cf_routererror:"endpoint_failure (EOF)"
在 PCF 中,我为应用程序创建了一个 https://
路由。这是 URL 我放入 Slack 应用程序的“重定向 URLs” 部分以及我的 Slash 命令 URL.
在 Slack 中,URL 以 /slack/events
这个配置在本地运行良好,所以我想我错过了 PCF 中的一个配置点。
Manifest.yml:
applications:
- name: kafbot
buildpacks:
- https://github.com/starkandwayne/librdkafka-buildpack/releases/download/v1.8.2/librdkafka_buildpack-cached-cflinuxfs3-v1.8.2.zip
- https://github.com/cloudfoundry/python-buildpack/releases/download/v1.7.48/python-buildpack-cflinuxfs3-v1.7.48.zip
instances: 1
disk_quota: 2G
# health-check-type: process
memory: 4G
routes:
- route: "kafbot.apps.prod.fake_org.cloud"
env:
KAFKA_BROKER: 10.32.17.182:9092,10.32.17.183:9092,10.32.17.184:9092,10.32.17.185:9092
SLACK_BOT_TOKEN: ((slack_bot_token))
SLACK_SIGNING_SECRET: ((slack_signing_key))
command: python app.py
当x_cf_routererror
说endpoint_failure
时,这意味着应用程序由于某种原因没有处理Gorouter发送给它的请求。
从那里,您想查看 response_time
。如果响应时间很长(通常与超时值相同,几乎正好是 60 秒),则意味着您的应用程序响应速度不够快。如果该值较低,则可能意味着存在连接问题,例如 Gorouter 尝试建立 TCP 连接但无法建立连接。
这通常不应该发生。系统有适当的健康检查,确保应用程序已启动并正在侦听请求。否则,应用程序将无法正常启动。
在这种特殊情况下,清单具有 health-check-type: process
,它禁用了标准的基于端口的健康检查并使用了基于进程的健康检查。这允许应用程序启动,即使它不在正确的端口上。因此,当 Gorouter 在预期端口上向应用程序发送请求时,它无法连接到应用程序的端口。旁注:通常,如果您的应用程序未侦听传入请求,您只会使用基于进程的健康检查。
平台将传入一个 $PORT
环境变量,其中包含一个值(它始终为 8080,但将来可能会更改)。您需要确保您的应用正在侦听该端口。此外,您想在 0.0.0.0 上收听,而不是本地主机或 127.0.0.1。
这应该确保 Gorouter 可以在约定的端口上向您的应用程序发送请求。