在 Code Engine 中使用应用程序
应用程序(或称 app)运行您的代码,为 HTTP 请求提供服务。 除了传统的 HTTP 请求,IBM Cloud® Code Engine还支持使用WebSockets作为通信协议的应用程序。 将根据入局请求和配置设置自动向上或向下扩展应用程序的运行实例数 (为零)。 应用程序包含一个或多个修订版。 修订版表示应用程序的配置属性的不可改变版本。 每次更新应用程序配置属性都会创建应用程序的新修订版。
准备工作
- 如果要使用 Code Engine 控制台,请转至 Code Engine 概述。
- 如果要使用 CLI,请 设置 Code Engine CLI 环境。
- 规划并选择使代码作为 Code Engine 应用程序组件运行的方法。
- 确保应用程序遵循 12 因子应用程序方法。
有关随 Code Engine提供的安全功能,请参阅 Code Engine 和安全性。
Code Engine 提供定制资源定义 (CRD) 方法。 有关更多信息,请参阅 提供 CRD 方法。
不确定要创建哪种类型的 Code Engine 工作负载? 请参阅 规划 Code Engine。
如何使代码作为 Code Engine 应用程序组件运行?
无论您的代码是作为本地文件或 Git 存储库中的源存在,还是您的代码是存在于公共或专用注册表中的容器映像,Code Engine 都为您提供了作为应用程序运行代码的简化方法。
-
如果您具有容器映像,那么根据 Open Container Initiative(OCI)标准,您只需提供对该映像的引用,这将在创建和部署应用程序时指向容器注册表的位置。 您可以使用 公共注册表 或 专用注册表 中的映像来部署应用程序。
-
如果您是从位于 Git 存储库中的源代码开始,那么可以选择让 Code Engine 负责从源构建映像并使用 单个 操作部署应用程序。 在此场景中,Code Engine 将映像上载到 IBM Cloud® Container Registry。 要了解更多信息,请参阅 从存储库源代码部署应用程序。 如果想要对映像构建进行更多控制,那么可以选择在创建和部署应用程序之前使用 Code Engine 构建映像。
-
如果是从本地工作站上的源代码开始,那么可以选择让 Code Engine 负责从源构建映像并使用 单个 CLI 命令部署应用程序。 在此场景中,Code Engine 将映像上载到 IBM Cloud® Container Registry。 要了解更多信息,请参阅 使用 CLI 从本地源代码部署应用程序。 如果想要对映像构建进行更多控制,那么可以选择在创建和部署应用程序之前使用 Code Engine 构建映像。
部署应用程序后,您还可以使用上述 任何 方法来 更新已部署的应用程序,而与创建或先前更新应用程序的方式无关。
部署应用程序时,将下载并部署所引用容器映像的最新版本,除非为该映像指定了标记。 如果为映像指定了标记,那么标记的映像将用于部署。
与特定应用程序修订版关联的映像具有唯一的容器注册表摘要,并且 Code Engine 将此摘要用于应用程序修订版的生命周期。 如果使用与原始映像相同的标记创建映像的较新版本,那么原始映像将在容器注册表中覆盖并变为未标记。 更新的映像已标记,并且此更新的映像具有不同的摘要。 Code Engine 应用程序不使用此较新映像,因为较新映像的摘要与应用程序修订版所引用的映像不同。只要最初引用的未标记映像仍然存在,Code Engine 仍可以创建应用程序修订版的新实例。 有关更多信息,请参阅 为什么不能 Code Engine 拉取映像?
应用程序的默认 URL 格式为 https://<appname>.<uuid>.<region>.codeengine.appdomain.cloud
,其中 appname
是应用程序的名称,uuid
是自动生成的唯一标识符,region
是Code Engine项目所在的区域。 应用程序 URL 的 UUID 部分格式为 aaaabbbbccc
。
自动生成的应用程序 URL 会在项目生命周期内持续存在。
有关用于按区域访问应用程序的端点的更多信息,请参阅 Code Engine 用于访问应用程序的端点。
我需要了解有关 Code Engine中应用程序的端口的信息?
缺省情况下,Code Engine 假定应用程序侦听端口 8080
上的入局连接。 此外,Code Engine 将 PORT
环境变量设置为期望应用程序侦听的端口值。 如果应用程序需要侦听端口 8080
以外的端口,请从控制台部署应用程序并指定正确的端口,或者在 app create
命令上使用 --port
选项。
有关 Code Engine设置的环境变量的更多信息,请参阅 自动注入的环境变量。 以下端口由 Code Engine保留: 8022
,8008
,8012
,9090
,9091
和 15090
。
只能将一个端口公开为侦听端口。
在互联网上通过 HTTP 连接到Code Engine的入站连接使用端口 80
。 在互联网上通过 HTTPS 连接到Code Engine的入站连接使用端口 443
如果端口扫描显示更多打开的端口,请参阅 为什么我的端口扫描显示比预期更多打开的端口?
HTTP 处理注意事项
在处理应用程序(或作业)时,了解Code Engine 中的基本 HTTP 处理方法会很有帮助。
-
对于使用 HTTP 的传入应用程序连接,传输层安全(TLS)方面由Code Engine在应用程序代码之外自动管理。 应用程序的HTTP Server只需关注 HTTP 连接,而无需关注 HTTPS 连接。 In particular, Code Engine uses Cloud Internet Services (CIS) in IBM Cloud, which is based on CloudFlare, as the intrusion prevention system (IPS) for DNS and DDOS protection on layer 4. 换言之,在 IPS 上建立的 TCP/IP 连接由 Cloudflare 拥有和管理。 有关更多信息,请参阅 Cloudflare 文档。
-
绑定到Code Engine应用程序的互联网连接会自动重定向为使用 HTTPS。
-
应用程序与其他Code Engine应用程序的出站连接会自动受到 TLS 保护。Code Engine会自动管理这种连接,因此使用的协议(或 URL)是
HTTP
而不是HTTPS
。 -
从应用程序到非{{site.{{site.data.keyword.codeengineshort}}应用程序(如互联网)的出站连接使用
HTTP
或HTTPS
,具体取决于应用程序代码或 URL 中指定的协议。 -
批处理任务的外向连接使用任务代码或 URL 中指定的
HTTP
或HTTPS
协议。 此行为包括从批处理作业到Code Engine应用程序的连接。
Code Engine 应用程序的可视性选项
使用Code Engine,您可以通过定义可用于接收请求的端点或系统域映射,为应用程序确定合适的可见性级别。
每个应用程序都有一个内部系统域映射,同一Code Engine项目内的所有组件都能看到该映射,但项目外的组件则看不到。 除了内部系统域映射外,您还选择使应用程序对 公用 因特网或 IBM Cloud 专用 网络可视。
对于公共或私人可见性,应用程序通过 HTTPS 端点公开。 有关使用的 TLS 证书的详细信息,请参阅 Code Engine项目的 TLS 证书。
您可以使用以下可视性级别来部署应用程序:
设置 | 描述 |
---|---|
内部(项目) | 具有此设置的应用程序可以从同一 Code Engine 项目中的组件接收请求。 设置内部(项目)端点意味着您的应用程序无法从公共互联网访问,只能从运行在同一Code Engine项目中的其他Code Engine组件进行网络访问。 此端点始终处于启用状态。 |
public | 具有此设置的应用程序将向因特网和 Code Engine 项目公开。 设置公共端点意味着应用程序可以从公共因特网或 Code Engine 项目中的组件接收请求。 此设置为缺省设置。 |
private | 具有此设置的应用程序将公开到 IBM Cloud 专用网络和 Code Engine 项目。 设置专用端点意味着无法从公用因特网访问应用程序,并且只能通过使用在同一项目中运行的虚拟专用端点 (VPE) 或 Code Engine 组件从其他 IBM Cloud 服务进行网络访问。 |
您可以在创建和部署应用程序或更新应用程序时,通过控制台或 CLI 设置应用程序可视性的端点设置。
使用公共端点部署应用程序
缺省情况下,在部署应用程序时,应用程序会进行部署,以便它可以从公共因特网或同一 Code Engine 项目中的组件接收请求。 在这种情况下,将使用公共端点部署应用程序。
使用专用端点部署应用程序
您可以设置应用程序的端点可视性,以便将其与专用端点一起部署。 设置专用端点意味着无法从公用因特网访问应用程序,并且只能从同一项目 (cluster-local) 中运行的虚拟专用端点 (VPE) 或 Code Engine 组件中的其他 IBM Cloud 服务进行网络访问。
例如,如果解决方案由在您自己的虚拟专用端点中的 IBM Cloud Kubernetes Service Kubernetes 集群上运行的组件组成,并且您想要从 IBM Cloud 专用网络访问 Code Engine 应用程序,那么可以将应用程序的可视性设置为 private。 当应用程序的可视性设置为 private 时,无法通过公用因特网访问该应用程序。 该应用程序仍可从项目中的其他应用程序访问。
您可以 使用专用端点部署应用程序,以便应用程序仅通过 IBM Cloud 专用网络公开,而不会公开到外部因特网。 应用程序仍可通过内部网络中的共享组件访问,并且需要保护应用程序端点。
通过 CLI,设置应用程序的端点可视性,以便使用 app create
或 app update
命令上的 --visibility=private
选项随专用端点一起部署应用程序。 您可以使用 app get
命令获取反映端点定义的应用程序的可用 URL。
在控制台中,通过在创建应用程序时使用 端点 设置来设置应用程序端点的可视性。 部署应用程序后,可以在应用程序页面上的 域映射 选项卡上查看和修改这些系统域映射设置。
有关通过专用网络进行连接的更多信息,请参阅 将虚拟专用端点用于 Code Engine。
使用项目端点部署应用程序
您可以设置应用程序的端点可视性,以便将其与内部 (项目) 端点一起部署。 设置项目专用端点意味着您的应用程序无法从公共互联网访问,只能从运行在同一Code Engine项目中的其他Code Engine组件进行网络访问。 此端点始终处于启用状态。 应用程序仍可通过共享组件进行访问,因此需要进行保护。
例如,如果解决方案由项目中的多个应用程序组成,那么您可以设置解决方案,以便只有其中一个应用程序可从因特网看到,以便它处理入局流量。 此面向公共的应用程序可以将工作委派给解决方案中的其他应用程序,以便这些应用程序不需要在因特网上显示。
通过 CLI,设置应用程序的端点可视性,以便使用 app create
或 app update
命令上的 --visibility=project
选项随项目端点一起部署应用程序。 您可以使用 app get
命令获取反映端点定义的应用程序的可用 URL。
在控制台中,通过在创建应用程序时使用 端点 设置来设置应用程序端点的可视性。 部署应用程序后,可以在应用程序页面上的 域映射 选项卡上查看和修改这些系统域映射设置。
用于部署 Code Engine 应用程序的选项
了解在部署应用程序时可以指定的选项。 请注意,选项可能因控制台和 CLI 而异。
内存和 CPU
部署应用程序时,可以指定应用程序可以使用的内存量和 CPU。 根据应用程序是计算密集型应用程序,内存密集型应用程序还是均衡应用程序,这些数量可能有所不同。
缺省情况下,将为应用程序分配 4 G 内存和 1 vCPU。 有关选择内存和 CPU 的更多信息,请参阅 支持的内存和 CPU 组合。
使用命令和参数部署应用程序
您可以定义命令和参数,以供应用程序在运行时使用。
通过将 --cmd
和 --arg
选项添加到 app create
命令,为应用程序定义命令和参数。
ibmcloud ce app create --name myapp --image icr.io/codeengine/hello --cmd /myapp --arg --debug
有关使用 cmd
和 arg
的更多信息,请参阅 为 Code Engine 工作负载定义命令和自变量。
使用环境变量创建和运行应用程序
您可以定义环境变量并将其设置为可由应用程序在运行时使用的键/值对。
您可以在创建应用程序时定义环境变量,也可以在从控制台或使用 CLI 更新现有应用程序时定义环境变量。
有关定义环境变量的更多信息,请参阅 使用环境变量。
Code Engine 会自动将某些环境变量注入到应用程序中。 有关自动注入的环境变量的更多信息,请参阅 自动注入的环境变量。
使用私钥和配置映射时创建和运行应用程序
在 Code Engine中,应用程序可以使用环境变量来使用私钥和配置映射。
私钥和配置映射都是键/值对。 当映射到环境变量时,将设置 NAME=VALUE
关系,以使环境变量的名称对应于这些映射中每个条目的“键”,并且环境变量的值是该键的“值”。
应用程序可以使用环境变量来完全引用 configmap (或私钥) 或引用 configmap (或私钥) 中的各个密钥。
有关更多信息,请参阅 使用环境变量引用私钥 和 使用环境变量引用配置映射。
申请配额的注意事项
使用应用程序,函数和批处理作业时,这些资源将在 Code Engine 项目的上下文中运行。 资源配额是根据每个项目定义的,限制适用于应用程序,功能和批处理作业。
有关 Code Engine 限制的更多信息,请参阅 Code Engine。
后续步骤
既然您熟悉使用 Code Engine 应用程序的关键概念,是否准备好部署和使用应用程序? 请参阅
- 从公共注册表中的映像部署应用程序工作负载。
- 从 IBM Cloud Container Registry 中的映像部署应用程序工作负载。
- 从专用注册表中的映像部署应用程序工作负载。
- 从存储库源代码部署应用程序。
- 从本地源代码部署应用程序。
有关使用应用程序的更多信息,请参阅