使用 API Gateway 模块暴露 Service
学习目标
描述 API Gateway 模块的组件
使用 API Gateway 组件暴露服务
API Gateway 模块
"Kyma"项目通过模块扩展了 Kubernetes 平台,使你能够将 Service 和 Function 暴露到集群之外。你可以使用 API Gateway 模块,让你的 Kubernetes Service 可以从 Kyma 集群外部访问。
Istio 和 API Gateway 是 Kyma 的默认模块,这意味着一旦你完成 Kyma runtime 的预配,它们就会被添加到其中。如果你想创建 Function 并使用 API Gateway 暴露它们,还必须添加 Serverless 模块。要用事件触发已暴露的 Service,请添加 Eventing 模块。要监控已暴露的工作负载,请添加 Telemetry 模块并使用它提供的可观测性功能。
API Gateway 模块的功能特性

API Gateway 基于开源项目 Istio,由 Istio 模块安装。下一单元会提供有关 Istio 的更多信息。
API Gateway 模块在 kyma-system 命名空间中安装了一个经过自定义配置的 Istio Ingress Gateway,称为 kyma-gateway。kyma-gateway 是所有进入 Kyma 集群的外部流量的中心接触点。它使用 Envoy Proxy 作为基于应用的服务的服务代理来处理流量,并将其转发到正确的 Service。
该模块还使用 Istio 功能来授权传入的 HTTP 请求。它提供 APIRule 自定义资源,你可以用它来安全地暴露你的工作负载。借助 APIRule,你可以:
将多个工作负载分组,并在单个主机下暴露它们。
使用短主机名来简化资源向新集群的迁移。
配置
noAuth访问策略,它提供了一种简单的配置来允许访问特定的 HTTP 方法。通过配置
jwt或extAuth访问策略来保护你的工作负载。jwt访问策略使你能够使用 Istio 的 JWT 配置来保护已暴露的 Service,并使用 JSON Web Token 与之交互。extAuth访问策略允许你实现自定义的身份验证和授权逻辑。
什么是 APIRule 自定义资源
要使用 API Gateway 模块暴露 Service,你必须创建一个名为 APIRule(apirules.gateway.kyma-project.io)的 Kubernetes 自定义资源(CR)。通过为 Service 创建 APIRule,API Gateway Controller 会在 kyma-gateway 背后为你创建一个 Istio VirtualService。因此,借助 APIRule CR,你拥有了一个更高层次的抽象,可以快速且安全地预配 Service。
要定义 APIRule,你必须创建一个种类为 apirules.gateway.kyma-project.io 的 CR。一个简单的 APIRule 清单如下所示:
apiVersion: gateway.kyma-project.io/v2
kind: APIRule
metadata:
name: my-api-rule
spec:
hosts:
- my-api-rule.xxxxx.kyma.ondemand.com
service:
name: hello-kyma-svc
port: 80
gateway: kyma-system/kyma-gateway
rules:
- path: /*
methods: ["GET"]
noAuth: true
让我们更仔细地看看 APIRule CR 的 spec 部分:
gateway:用于暴露 Service 的 Istio Ingress Gateway。出于开发目的,你可以使用 Kyma 域和默认 Gatewaykyma-system/kyma-gateway。在生产环境中,请使用你的自定义域来设置 TLS Gateway。hosts:指定应在其中暴露 Service 的主机或主机子域。你可以通过 Istio VirtualService 在同一个主机背后暴露多个 Service。service:指定要暴露的 Kubernetes Service。name是你要暴露的 Kubernetes Service 的名称。port是你要暴露的 Kubernetes Service 的端口。rules:指定访问规则数组。对于每条规则,path字段指定必须匹配的请求路径,methods数组指定 HTTP 方法。APIRule 允许你使用访问策略的概念来定义已暴露端点的安全配置。支持的访问策略有noAuth、jwt和extAuth。将noAuth设为true会禁用授权。jwt字段指定 Istio JWT 访问策略,extAuth字段指定 Istio External Authorization 访问策略。
有关更多信息,请参阅 APIRule 自定义资源。
Kyma 仪表板中的 APIRule 自定义资源
Kyma 仪表板提供了一种创建 APIRule 以暴露工作负载的简便方式。APIRule 的创建已集成到 Function 和 Service 的视图中。不过,你也可以转到 APIRules 视图并创建新的 APIRule。

你可以在 YAML 文件中定义 APIRule 规范,也可以使用 Kyma 仪表板中基于表单的视图。

总结
API Gateway 模块使 Service 和 Function 能够暴露到你的 Kyma runtime 集群之外。该模块基于开源项目 Istio,并包含一个经过自定义配置、名为 kyma-gateway 的 Istio Ingress Gateway,用于处理进入 Kyma 集群的外部流量。要使用 API Gateway 模块暴露 Service,你需要创建一个 APIRule CR,它支持对工作负载进行分组和保护,例如通过使用 JWT 令牌或自定义身份验证。
延伸阅读
API Gateway
APIRules
Istio