如何在 Swisscom CloudFoundry 中创建回退路由

How to create a fallback route in Swisscom CloudFoundry

我想使用 Swisscom CloudFoundry 解决方案创建后备路由 (*)。我当前的应用程序都映射到 URL,如下所示:

https://sample-application.scapp.io

当应用程序正在部署或停止时,我收到 404 路由错误:

404 Not Found: Requested route ('sample-application.scapp.io') does not exist.

我想通过回退到另一个应用程序来防止这种情况发生。使用 * 作为主机应该定义这样的后备路由(参见 docs)。但是,使用以下清单部署回退应用程序会引发错误:

清单:

---
path: .
instances: 1
buildpack: nodejs_buildpack
applications:
- name: fallback-app-165615
  domain: scapp.io
  host: '*'
  memory: 128M
  disk_quota: 1024M

错误:

Erstellen von Route *.scapp.io... OK

FEHLGESCHLAGEN Serverfehler, Statuscode: 400, Fehlercode: 210003, Nachricht: The host is taken: *


很明显,*.scapp.io 可能不可用,我仍然想将我的离线应用程序重新路由到后备页面。这是否可以通过使用第二个子域(例如 my-application.company-name.scapp.io)或是否有任何其他方法来实现?

使用共享域(共享域是您的服务提供商提供的域)时无法实现此目的。但是您可以使用自己的域轻松地做到这一点。 例如我的-app1.my-domain.com -> *.my-domain.com 或者您可以在自己的域上使用子域: 例如我的-app.clolud.my-domain.com -> *.cloud.my-domain.com

如果你想坚持共享域,你可以使用路由服务来实现错误页面。 https://docs.cloudfoundry.org/services/route-services.html

通常,绿蓝部署是通过使用第二个应用程序实例完成的。你可以这样做:

./cf login -a "https://api.lyra-836.appcloud.swisscom.com" -u "${APC_USERNAME}" -p "${APC_PASSWORD}" -o "${APC_ORGANIZATION}" -s "${APC_SPACE}"

# make sure routes will be ready
./cf create-route "${APC_SPACE}" scapp.io --hostname mytest-app
./cf create-route "${APC_SPACE}" scapp.io --hostname mytest-app-blue-green
sleep 2

# secure working app
./cf rename mytest_app mytest_app_old || true
./cf unmap-route mytest_app_old scapp.io --hostname mytest-app-blue-green || true
sleep 2

# push new app
./cf push mytest_app_new --no-route
./cf map-route mytest_app_new scapp.io --hostname mytest-app-blue-green
./cf map-route mytest_app_new applicationcloud.io --hostname mytest-app-blue-green
sleep 5

# test app
response=$(curl -sIL -w "%{http_code}" -o /dev/null "mytest-app-blue-green.scapp.io")
if [[ "${response}" != "200" ]]; then
    ./cf delete -f mytest_app_new || true
    echo "App did not respond as expected, HTTP [${response}]"
    exit 1
fi

# finish blue-green deployment of app
./cf delete -f mytest_app || true
./cf rename mytest_app_new mytest_app
./cf map-route mytest_app scapp.io --hostname mytest-app
./cf unmap-route mytest_app scapp.io --hostname mytest-app-blue-green || true
./cf delete -f mytest_app_old

# show status
./cf apps
./cf app mytest_app

./cf logout