千家信息网

Knative 实战:一个微服务应用的部署

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,cdn.com/ef27762085577f5a3916e783cdc59fbed9379219.png">作者 | 元毅 阿里云智能事业群高级开发工程师在 Istio 中提供了一个 Bookinfo
千家信息网最后更新 2026年11月04日Knative 实战:一个微服务应用的部署

cdn.com/ef27762085577f5a3916e783cdc59fbed9379219.png">

作者 | 元毅 阿里云智能事业群高级开发工程师

在 Istio 中提供了一个 Bookinfo 的示例,用于演示微服务之间的调用,那么如何在 Knative 中部署这个示例呢?本文将会给大家介绍一下在 Knative 中部署 Bookinfo 微服务以及查看调用链追踪信息。

背景

Bookinfo 这个示例应用由 4 个微服务组成。 Bookinfo 应用架构图如下:

  • productpage 微服务: 调用 details 微服务和 reviews 微服务来生成页面
  • details 微服务: 包含图书的详细信息
  • reviews 微服务: 提供图书的评论功能,也可以调用 rating 微服务给图书评分
  • ratings 微服务: 提供图书的评分功能

另外 reviews 微服务目前有 3 个版本:

  • v1 不会调用 ratings 微服务
  • v2 调用 ratings 微服务,并将评分显示 1~5 个黑色星星
  • v3 调用 ratings 微服务,并将每个评分显示为 1~5 个红色星星

准备

  • 已部署 Knative。可参考:阿里云容器服务部署 Knative
  • 已开启链路追踪 Tracing Analysis服务,可参考:在Knative 上实现 Tracing 分布式追踪

部署

首先开启 Istio Sidecar 注入,我们在 default 命名空间打上 istio-injection=enabled 的 Label:

kubectl label namespace default istio-injection=enabled

部署 Bookinfo Knative Service 服务, 简单直接通过 yaml 文件一键拉起来,bookinfo.yaml:

apiVersion: serving.knative.dev/v1kind: Servicemetadata:  name: details-v1  namespace: defaultspec:  template:    spec:      containers:      - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/examples-bookinfo-details-v1:1.15.0        ports:        - containerPort: 9080---apiVersion: serving.knative.dev/v1kind: Servicemetadata:  name: ratings-v1  namespace: defaultspec:  template:    spec:      containers:      - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/examples-bookinfo-ratings-v1:1.15.0        ports:        - containerPort: 9080---apiVersion: serving.knative.dev/v1kind: Servicemetadata:  name: reviews-v1  namespace: defaultspec:  template:    spec:      containers:      - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/examples-bookinfo-reviews-v1:v1-aliyun        ports:        - containerPort: 9080---apiVersion: serving.knative.dev/v1kind: Servicemetadata:  name: reviews-v2  namespace: defaultspec:  template:    spec:      containers:      - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/examples-bookinfo-reviews-v2:v1-aliyun        ports:        - containerPort: 9080        env:        - name: SERVICES_DOMAIN          value: default.svc.cluster.local        - name: RATINGS_HOSTNAME          value: ratings-v1---apiVersion: serving.knative.dev/v1kind: Servicemetadata:  name: reviews-v3  namespace: defaultspec:  template:    spec:      containers:      - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/examples-bookinfo-reviews-v3:v1-aliyun        ports:        - containerPort: 9080        env:        - name: SERVICES_DOMAIN          value: default.svc.cluster.local        - name: RATINGS_HOSTNAME          value: ratings-v1---apiVersion: serving.knative.dev/v1kind: Servicemetadata:  name: productpage-v1  namespace: defaultspec:  template:    spec:      containers:      - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/productpage:v1-aliyun        ports:        - containerPort: 9080        env:        - name: SERVICES_DOMAIN          value: default.svc.cluster.local        - name: DETAILS_HOSTNAME          value: details-v1        - name: RATINGS_HOSTNAME          value: ratings-v1        - name: REVIEWS_HOSTNAME          value: reviews-v2

这里需要说明几点:

  • productpage 环境变量设置:

    • SERVICES_DOMAIN:微服务直接通过内部访问域名进行访问,这里设置域名后缀为:default.svc.cluster.local
    • DETAILS_HOSTNAME:设置为 details-v1
    • RATINGS_HOSTNAME:设置为 ratings-v1
    • REVIEWS_HOSTNAME: 这里设置 reviews-v2
  • reviews v2, v3 环境变量设置。由于 v2 和 v3 需要访问 rate 进行评分, 因此需要设置对应的环境变量:

    • SERVICES_DOMAIN:微服务直接通过内部访问域名进行访问,这里设置域名后缀为:default.svc.cluster.local
    • RATINGS_HOSTNAME:设置为 ratings-v1

执行命令:

# kubectl apply -f bookinfo.yaml

查看执行结果:

# kubectl get kserviceproductpage-v1                  http://productpage-v1.default.knative.kuberun.com                  productpage-v1-s4drn                  productpage-v1-s4drn                  True    ratings-v1                      http://ratings-v1.default.knative.kuberun.com                      ratings-v1-bsvb2                      ratings-v1-bsvb2                      True    details-v1                      http://details-v1.default.knative.kuberun.com                      details-v1-dj47j                      details-v1-dj47j                      True    reviews-v1                      http://reviews-v1.default.knative.kuberun.com                      reviews-v1-q5wz4                      reviews-v1-q5wz4                      True    reviews-v2                      http://reviews-v2.default.knative.kuberun.com                      reviews-v2-5r7mm                      reviews-v2-5r7mm                      True    reviews-v3                      http://reviews-v3.default.knative.kuberun.com                      reviews-v3-s2v6j                      reviews-v3-s2v6j                      True

通过页面进行访问,说明服务访问正常:

微服务调用链

一般情况下,用户比×××调用链信息,通过 Tracing Analysis 服务,我们可以方便的查看服务调用链。

首先我们进行一次服务访问,在 productpage 页面,点击 Normal user。

可以看到 Book Details 和 Book Reviews 信息。productpage 服务依次会调用:details、reviews 和 ratings 服务。

接下来登录 Tracing Analysis 服务控制台,选择【应用列表】,点击 productpage.default。

选择 调用链分析 页签,可以查看服务调用链信息。

结论

通过上面的介绍,我们可以在 Knative 中轻松实现微服务部署,并且结合 Tracing Analysis 服务可以满足部署生产级别服务诉求。

欢迎加入 Knative 交流群

作者简介:元毅,阿里云容器平台高级开发工程师,负责阿里云容器平台 Knative 相关工作。

了解 ACK 容器服务,请查看:https : //www.aliyun.com/product/kubernetes

" 阿里巴巴云×××icloudnative×××erverless、容器、Service Mesh等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发×××

服务 信息 容器 阿里 评分 图书 域名 应用 变量 环境 示例 页面 开发 高级 作者 功能 后缀 工程 工程师 平台 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 伟宏互联网科技 互联网是第几次科技革命的成果 互联网科技行业发展 互联网科技未来 成都互联网科技公司 互联网科技美容 科技大学互联网专业好不好 中国科技互联网公司收入 成都互联网科技公司100强 广州恒生互联网科技有限 花神(南京)互联网科技有限公司 亳州好赞互联网科技有限公司 天津腾达互联网科技有限公司 互联网科技股为什么大涨 富国互联网科技002692 广州梦谷互联网科技有限公司领导 上海万顺科技互联网有限公司招聘 绵阳真晨互联网科技有限公司 互联网科技对化妆品行业 陕西彩京云互联网科技有限公司 华服互联网科技怎么样 互联网医疗科技 唐信互联网科技 亿策互联网科技 金融科技与互联网金融相同和不同 互联网科技与大数据专业 速维有品互联网信息科技(苏州)有限公司 河南住房之家互联网科技 高科技互联网发展前景如何 广东鹅鹅鹅互联网科技有限公司
0