服务路由管理

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
应用实时监控服务-应用监控,每月50GB免费额度
注册配置 MSE Nacos/ZooKeeper,182元/月
简介: Knative 默认会为每一个 Service 生成一个域名,并且 Istio Gateway 要根据域名判断当前的请求应该转发给哪个 Knative Service。Knative 默认使用的主域名是 example.com,这个域名是不能作为线上服务的。本文我首先介绍一下如何修改 默认主域名,然后再深入一层介绍如何添加自定义域名以及如何根据 path 关联到不同的 Knative Service。

本文选自《Knative 云原生应用开发指南》
knative海报.png
更多云原生技术资讯可关注阿里巴巴云原生技术圈

Knative Serving 的默认域名 example.com

首先需要部署一个 Knative Service。如果你已经有了一个 Knative 集群,那么直接把下面的内容保存到 login-service.yaml 文件中。然后执行一下 kubectl apply -f login-service.yaml  即可把 login-service 服务部署到 default namespace 中。

apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
  name: login-service
spec:
  template:
    metadata:
      labels:
        app: login-service
      annotations:
        autoscaling.knative.dev/target: "10"
    spec:
      containers:
        - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
          env:
            - name: TARGET
              value: "Login Service"

现在我们来看一下 Knative Service 自动生成的域名配置:

└─# kubectl -n default get ksvc
NAME    URL                                   LATESTCREATED   LATESTREADY   READY   REASON
login-service   http://login-service.default.example.com   login-service-wsnvc     login-service-wsnvc   True

现在使用 curl 指定 Host 就能访问服务了。

  • 首先获取到 Istio Gateway IP
└─# kubectl get svc istio-ingressgateway --namespace istio-system --output jsonpath="{.status.loadBalancer.ingress[*]['ip']}"
47.95.191.136
  • 访问 login-service 服务
└─# curl -H "Host: login-service.default.example.com" http://47.95.191.136/
Hello Login Service

如果想要在浏览器中访问 login-service 服务需要先做 host 绑定,把域名 login-service.default.example.com 指向 47.95.191.136 才行。这种方式还不能对外提供服务。下面接着介绍一下如何把默认的 example.com 改成我们自己的域名。

使用自定义主域名

在阿里云 Knative 用户可以通过控制台配置自定义域名,并基于Path和Header进行路由转发设置。如图所示:
5.png

假设我们自己的域名是:knative.kuberun.com,现在执行 kubectl edit cm config-domain --namespace knative-serving 如下图所示,添加 knative.kuberun.com 到 ConfigMap 中,然后保存退出就完成了自定义主域名的配置。

6.png

再来看一下 Knative Service 的域名, 如下所示已经生效了。

└─# kubectl -n default get ksvc
NAME    URL                                              LATESTCREATED   LATESTREADY   READY   REASON
login-service   http://login-service.default.knative.kuberun.com   login-service-wsnvc     login-service-wsnvc   True

泛域名解析
Knative Service 默认生成域名的规则是 servicename.namespace.use-domain 。所以不同的 namespace 会生成不同的子域名,每一个 Knative Service 也会生成一个唯一的子域名。为了保证所有的 Service 服务都能在公网上面访问到,需要做一个泛域名解析。把 *.knative.kuberun.com  解析到 Istio Gateway 47.95.191.136 上面去。如果你是在阿里云(万网)上面购买的域名,你可以通过如下方式配置域名解析:
7.png

现在直接通过浏览器访问 http://login-service.default.knative.kuberun.com/ 就可以直接看到 login-service 服务了:
8.png

自定义域名

登录阿里云容器服务控制台,进入【Knative】-【组件管理】,点击 Serving 组件【详情】。
9.png

进入详情之后,选择域名配置,添加自定义域名:test.knative.kuberun.com。点击 【确定】进行保存。
10.png

配置路由转发

进入【Knative】-【服务管理】控制台,选择对应的服务。这里我们对 Login-Service 服务 以及 Search-Service 服务分别设置不同的 Path 进行访问。

Login-Service 服务路由转发配置

选择  Login-Service 服务, 选择 路由转发 页签,点击 配置, 选择test.knative.kuberun.com域名,配置路径:/login。点击 确定 进行保存。
11.png

接下了继续配置Search-Service 服务路由规则。

Search-Service 服务路由转发配置

选择  Search-Service 服务, 选择 路由转发 页签,点击 配置, 选择test.knative.kuberun.com域名,配置路径:/search。点击 确定 进行保存。
12.png

服务访问

以上路由转发配置完成之后,我们开始测试一下服务访问:
在浏览器中输入:http://test.knative.kuberun.com/login 可以看到输出:Hello Login Service!
13.png

在浏览器中输入:http://test.knative.kuberun.com/search 可以看到输出:Hello Search Service!
14.png

基于 Path + Header 进行路由转发

选择  Login-Service 服务, 选择 路由转发 页签,点击 配置,这里我们加上Header 配置:foo=bar。点击 确定 进行保存。
15.png

访问 http://test.knative.kuberun.com/login 发现服务 404 不可访问。
16.png

说明基于Header是生效的,下面我们在访问请求中通过 ModHeader 插件配置上Header:foo=bar.
17.png

配置完成之后,我们再一次访问服务:http://test.knative.kuberun.com/login
18.png

服务访问 OK。这样我们就完成了基于 Path + Header 路由转发配置

总结

以上主要围绕 Knative Service 域名配置展开介绍了 Knative Serving 的路由管理,并且通过阿里云 Knative 控制台让你更轻松、快捷的实现自定义域名及路由规则,以打造生产可用的服务访问。

阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术圈。”

相关文章
|
4天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
15天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1313 5
|
2天前
|
监控 JavaScript Java
基于大模型技术的反欺诈知识问答系统
随着互联网与金融科技发展,网络欺诈频发,构建高效反欺诈平台成为迫切需求。本文基于Java、Vue.js、Spring Boot与MySQL技术,设计实现集欺诈识别、宣传教育、用户互动于一体的反欺诈系统,提升公众防范意识,助力企业合规与用户权益保护。
|
14天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1356 87
|
2天前
|
JavaScript Java 大数据
基于JavaWeb的销售管理系统设计系统
本系统基于Java、MySQL、Spring Boot与Vue.js技术,构建高效、可扩展的销售管理平台,实现客户、订单、数据可视化等全流程自动化管理,提升企业运营效率与决策能力。
|
3天前
|
弹性计算 安全 数据安全/隐私保护
2025年阿里云域名备案流程(新手图文详细流程)
本文图文详解阿里云账号注册、服务器租赁、域名购买及备案全流程,涵盖企业实名认证、信息模板创建、域名备案提交与管局审核等关键步骤,助您快速完成网站上线前的准备工作。
192 82
2025年阿里云域名备案流程(新手图文详细流程)