通过 Kubernetes Gateway API 暴露服务
您可以使用 Kubernetes Gateway API 创建 Gateway 和 HTTPRoute 资源来部署网关。这些资源配置网关,使网格内的服务可以被外部流量访问。然后,您可以将网关的 Service 类型更改为 LoadBalancer,以便将其暴露给集群外部的流量。
目录
前提条件
- 已安装 Alauda Service Mesh v2 Operator。
- 已部署 Istio 控制平面。
操作步骤
-
使用以下命令创建一个名为
httpbin的新命名空间: -
使用以下命令部署
httpbin示例服务: -
创建一个名为
httpbin-k8s-gw.yaml的文件,定义一个 KubernetesGateway资源。该资源将配置网关代理,暴露端口 80(HTTP)用于httpbin.example.com主机。自动部署默认情况下,每个
Gateway会自动创建一个Service和Deployment。它们的名称格式为<Gateway name>-<GatewayClass name>(istio-waypointGatewayClass除外,该类不会添加后缀)。如果Gateway发生更改(例如添加新端口),这些配置会自动更新。示例网关资源文件
- 指定网关的
Service类型;默认为LoadBalancer。 - 指定网关的名称。
- 指定网关的命名空间。
- 指定客户端访问此端口时使用的虚拟主机名。
- 指定网关的
-
使用以下命令应用该 YAML 文件:
-
创建一个名为
httpbin-hr.yaml的 YAML 文件,定义一个HTTPRoute资源。该资源指定了从网关代理到httpbin服务的流量路由规则。示例 HTTPRoute 文件
- 通过将网关名称添加到网关列表,将
HTTPRoute资源关联到之前创建的 KubernetesGateway。 - 通过定义包含
httpbin服务名称和端口的backendRefs条目,将匹配的流量定向到httpbin服务。
- 通过将网关名称添加到网关列表,将
-
执行以下命令应用该 YAML 文件:
-
通过运行以下命令确认 Gateway API 服务已就绪并分配了地址:
验证
-
通过执行以下命令为
curl客户端创建一个命名空间: -
使用以下命令部署
curl客户端: -
使用以下命令将
curlpod 的名称赋值给变量CURL_POD: -
从
curl客户端发送请求到httpbin应用的/headers端点,通过入口网关Service。将Host头设置为httpbin.example.com,以匹配 KubernetesGateway和HTTPROUTE资源中指定的主机。运行以下curl命令:响应应显示
200 OKHTTP 状态,表示请求成功。示例输出
-
发送一个请求到
httpbinHTTPROUTE中没有匹配 URI 前缀的端点,运行以下命令:响应将是
404 Not Found状态。这是预期行为,因为/get端点在httpbinHTTPROUTE资源中没有定义匹配的 URI 前缀。示例输出
-
通过将网关代理的
Service类型设置为默认的LoadBalancer,将其暴露给外部流量。运行以下命令: -
使用网关
Service的外部主机名或 IP 地址验证httpbin服务是否可从集群外部访问。确保根据您的集群环境正确设置INGRESS_HOST变量。a. 通过运行以下命令设置
INGRESS_HOST变量:b. 通过运行以下命令设置
INGRESS_PORT变量:c. 使用网关主机,发送
curl请求到httpbin服务,运行以下命令: -
验证响应显示
HTTP/1.1 200 OK状态,确认请求成功。