【问题标题】:How to create a fallback route in Swisscom CloudFoundry如何在 Swisscom CloudFoundry 中创建后备路由
【发布时间】:2017-11-21 16:15:32
【问题描述】:

我想使用 Swisscom CloudFoundry 解决方案创建一个后备路由 (*)。我当前的应用程序都映射到这样的 URL:

https://sample-application.scapp.io

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

404 Not Found:请求的路由('sample-application.scapp.io')不存在。

我想通过回退到另一个应用程序来防止这种情况。使用* 作为主机应该定义这样一个回退路由(参见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... 好的

FEHLGESCHLAGEN Serverfehler,Statuscode:400,Fehlercode:210003,Nachricht:主机被占用:*


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

【问题讨论】:

    标签: routing cloud-foundry swisscomdev


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!我通过使用我自己的my-domain.com 并创建一个通配符路由*.my-domain.com 来解决它,该路由路由到一个后备应用程序。应用程序 myapp.my-domain.com 有一个指向 myapp.scapp.io 的实际 CNAME 链接。
    【解决方案2】:

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

    ./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
    

    【讨论】:

    • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
    • 感谢您的反馈。从您的角度来看,缺少什么?代码 sn-p 里面有 cmets。
    • 您是否仔细阅读了链接的问题其答案?
    • 是的,我做到了。但我的答案很明显,这就是为什么我问你缺少什么 - 然后我可以尝试改进它:-)。
    • 感谢您的回答!实际上,我通过使用维护后备应用程序而不是在部署过程中重新路由来解决它。
    猜你喜欢
    • 2019-12-13
    • 2013-12-26
    • 2019-08-06
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 2019-08-29
    相关资源
    最近更新 更多