在大规模微服务场景下,为了建立稳定可靠的业务服务,服务治理能力至关重要。MSE微服务治理中心提供了在大规模场景下的服务治理能力,包含服务查询、标签路由等功能。本文介绍如何通过MSE完成微服务的服务治理。
背景信息
以下以Bookinfo应用为示例,展示MSE微服务的服务治理功能。Bookinfo应用包括ProductPage客户端、Ratings、Reviews V1和Reviews
V2微服务。当ProductPage客户端接受到请求时,将调用Reviews V1和Reviews V2微服务,并在页面的不同区域显示调用Reviews V1和Reviews
V2微服务的结果:
- 调用Reviews V1微服务时,将在Bookinfo页面Review1区域不显示星星。
- 调用Reviews V2微服务时,将在Bookinfo页面Review2区域显示黑白星星。
步骤一:在ASM安装MSE微服务治理组件
- 登录ASM控制台。
- 在左侧导航栏,选择。
- 在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。
- 在网关管理详情页面右上方单击功能设置。
- 在功能设置更新面板单击展开高级选项,选中启用MSE微服务治理组件,然后单击确定。
步骤二:部署演示应用Bookinfo
- 在ACK集群中部署Reviews V1。
- 使用以下内容,创建名为reviews1.yaml的文件。
apiVersion: v1
kind: Service
metadata:
name: reviews
labels:
app: reviews
service: reviews
spec:
ports:
- port: 9080
name: http
selector:
app: reviews
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: bookinfo-reviews
labels:
account: reviews
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: reviews-v1
labels:
app: reviews
version: v1
spec:
replicas: 1
selector:
matchLabels:
app: reviews
version: v1
template:
metadata:
labels:
app: reviews
version: v1
spec:
serviceAccountName: bookinfo-reviews
containers:
- name: reviews
image: docker.io/istio/examples-bookinfo-reviews-v1:1.16.2
imagePullPolicy: IfNotPresent
env:
- name: LOG_DIR
value: "/tmp/logs"
ports:
- containerPort: 9080
volumeMounts:
- name: tmp
mountPath: /tmp
- name: wlp-output
mountPath: /opt/ibm/wlp/output
volumes:
- name: wlp-output
emptyDir: {}
- name: tmp
emptyDir: {}
- 执行以下命令,部署Reviews V1。
kubectl apply -f reviews1.yaml
- 在ACK集群中部署Reviews V2。
- 使用以下内容,创建名为reviews2.yaml的文件。
apiVersion: apps/v1
kind: Deployment
metadata:
name: reviews-v2
labels:
app: reviews
version: v2
spec:
replicas: 1
selector:
matchLabels:
app: reviews
version: v2
template:
metadata:
labels:
app: reviews
version: v2
spec:
serviceAccountName: bookinfo-reviews
containers:
- name: reviews
image: docker.io/istio/examples-bookinfo-reviews-v2:1.16.2
imagePullPolicy: IfNotPresent
env:
- name: LOG_DIR
value: "/tmp/logs"
ports:
- containerPort: 9080
volumeMounts:
- name: tmp
mountPath: /tmp
- name: wlp-output
mountPath: /opt/ibm/wlp/output
volumes:
- name: wlp-output
emptyDir: {}
- name: tmp
emptyDir: {}
- 执行以下命令,部署Reviews V2。
kubectl apply -f reviews2.yaml
- 在ACK集群中部署ProductPage。
- 使用以下内容,创建名为ProductPage.yaml的文件。
apiVersion: v1
kind: Service
metadata:
name: productpage
labels:
app: productpage
service: productpage
spec:
ports:
- port: 9080
name: http
selector:
app: productpage
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: bookinfo-productpage
labels:
account: productpage
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: productpage-v1
labels:
app: productpage
version: v1
spec:
replicas: 1
selector:
matchLabels:
app: productpage
version: v1
template:
metadata:
labels:
app: productpage
version: v1
spec:
serviceAccountName: bookinfo-productpage
containers:
- name: productpage
image: docker.io/istio/examples-bookinfo-productpage-v1:1.16.2
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9080
volumeMounts:
- name: tmp
mountPath: /tmp
volumes:
- name: tmp
emptyDir: {}
- 执行以下命令,部署ProductPage。
kubectl apply -f ProductPage.yaml
- 在ACK集群中部署Ratings。
- 使用以下内容,创建名为ratings.yaml的文件。
apiVersion: v1
kind: Service
metadata:
name: ratings
labels:
app: ratings
service: ratings
spec:
ports:
- port: 9080
name: http
selector:
app: ratings
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: bookinfo-ratings
labels:
account: ratings
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: ratings-v1
labels:
app: ratings
version: v1
spec:
replicas: 1
selector:
matchLabels:
app: ratings
version: v1
template:
metadata:
labels:
app: ratings
version: v1
spec:
serviceAccountName: bookinfo-ratings
containers:
- name: ratings
image: docker.io/istio/examples-bookinfo-ratings-v1:1.16.2
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9080
- 执行以下命令,部署Ratings。
kubectl apply -f ratings.yaml
- 创建Booklinfo外部访问地址。
- 登录容器服务管理控制台容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页面选择。
- 在服务页面单击创建。
- 在创建服务对话框中配置参数,然后单击创建。
以下为重点参数描述,其他参数请参见
管理服务。
- 类型:选择服务访问的方式,本例选择负载均衡和公网访问。
- 关联:选择服务要绑定的后端应用,本例为productpage。
- 端口映射:添加服务端口和容器端口,容器端口需要与后端Pod暴露的容器端口一致,本例为9080。
在服务页面单击目标服务右侧外部端点列下的地址,即可跳转到Bookinfo页面。
步骤三:启用自动注入
在部署应用的命名空间中启动自动注入。
- 登录ASM控制台。
- 在左侧导航栏,选择。
- 在网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理。
- 在网格详情页面左侧导航栏单击命名空间。
- 在命名空间页面单击目标命名空间自动注入列的启用Sidecar自动注入。
启用Sidecar自动注入的命名空间需要与部署应用的命名空间保持一致。
- 在弹出的对话框中单击确定。
步骤四:使用微服务治理功能
查看应用详情
- 登录MSE治理中心控制台。
- 在控制台左侧导航栏选择。
- 在应用列表页面单击应用名称列下的ProductPage。
- 在应用详情页面您可以查看目标应用的应用信息和服务治理信息。
查询服务列表
- 登录MSE治理中心控制台。
- 在控制台左侧导航栏选择。
- 在请选择文本框中选择框架:Istio,然后在服务列表中单击reviews。
- 在服务详情页面查看服务的详细信息。
配置标签路由
- 登录MSE治理中心控制台。
- 在控制台左侧导航栏选择。
- 在标签路由页面单击创建标签路由。
- 在创建标签路由页面设置参数,然后单击确定。
参数 |
描述 |
路由名称 |
标签路由规则名称,例如test-Istio 。
|
描述 |
规则描述。 |
应用 |
选择您的应用名称。 |
流量类型 |
支持按内容路由和按比例路由。
|
框架类型 |
默认为服务网格。
|
流量比例 |
支持手动配置流量比例。本例设置v1流量比例为100%,设置v2流量比例为0。
|
- 查看Bookinfo页面。
多次刷新Bookinfo页面,可以看到Bookinfo应用的Review1区域显示无星星,Review2区域显示无星星。说明访问Bookinfo应用时,只调用了Review1服务,没有调用Review2服务。

配置服务鉴权
当您的某个微服务应用有安全要求,不希望其他所有应用都能调用时,可以通过配置服务鉴权对调用该应用的其他应用进行鉴权。
- 登录MSE治理中心控制台。
- 在左侧导航栏选择。
- 在服务鉴权页面单击创建规则。
- 在创建规则面板中设置服务鉴权参数,然后单击确定。
服务鉴权规则参数说明:
参数 |
说明 |
规则名称 |
鉴权规则名称,支持大小写字母、数字、下划线(_)和短划线(-),长度不超过64个字符。 |
被调用方类型 |
根据实际情况选择应用或K8s Namespace。本文设置被调用方类型为应用。
|
被调用方(应用) |
选择被调用的应用。 |
被调用方框架 |
被调用的应用所使用的框架,选择服务网格。
|
添加所有接口规则 |
单击添加所有接口规则,设置所有接口规则。本文选择添加所有接口规则。以下为添加所有接口规则参数:
- 被调用方接口:默认为所有Path,不可设置。
- 鉴权方式:可选白名单(允许调用)和黑名单(拒绝调用)。
- 调用方:需要鉴权的调用方应用,可以单击添加调用方设置多个需要鉴权的调用方应用。
|
添加指定接口规则 |
单击添加指定接口规则,设置指定接口规则。以下为添加指定接口规则参数:
说明 指定接口添加的规则不是追加,而是覆盖针对所有接口的通用规则,请谨慎配置。
- 被调用方Path:指定被调用应用的Path。
- 鉴权方式:选白名单(允许调用)和黑名单(拒绝调用)。
- 调用方:需要鉴权的调用方应用,可以单击添加调用方设置多个需要鉴权的调用方应用。
|
默认状态 |
规则的启用开关。
- 打开:创建后即启用,默认打开。
- 关闭:创建后不启用,如果需要启用,需要在服务鉴权页面规则的操作列单击开启。
|
测试多语言服务
在日常开发中,开发人员或测试人员需要临时调用线上服务来调试已经部署的服务或查询线上数据。服务测试功能可以让您在控制台填写调用参数、发起服务调用,并得到服务调用的结果。
- 登录MSE治理中心控制台。
- 在左侧导航栏选择。
- 在顶部菜单栏选择地域,在框架类型列表中选择框架:Istio,然后单击目标服务名称或操作列的测试按钮。
- 在选择测试方法面板中设置测试相关参数,然后单击执行。
测试服务参数说明如下。
参数 |
描述 |
调用IP |
要测试服务的实例IP。如果部署了多个实例,在列表中选择其中一个IP,进行测试,只能单选。 |
Path |
请求的接口URL,以/ 开头,例如/reviews/2 。
|
请求方法 |
该所属类的请求方法,如果包含多个请求方法,在列表中选择其中一种方法,只能单选。 |
测试参数 |
在测试方法的参数区域,根据服务的代码设置方法的具体参数。 |
在
结果区域查看测试是否成功,测试结果一般会有以下几种情况:
- 结果成功,并显示调用服务的响应结果。
- 结果失败,并显示调用服务的失败响应信息。请根据响应信息,排查服务的端口、网络及代码本身的问题。
金丝雀发布
金丝雀发布是将应用的旧版本A与新版本B同时部署在环境中,业务请求可能会被路由到版本A的后端上,也可能会被路由到版本B的后端上。您可以自定义发布策略,快速调整版本A和B的流量占比。
说明 金丝雀发布功能只适合在两个标签的场景下使用,若有多个标签的场景,请使用标签路由功能。
- 登录MSE治理中心控制台。
- 在左侧导航栏选择。
- 在应用列表页面单击目标应用操作列下的金丝雀。
- 在金丝雀页签下单击应用实例右侧的编辑。
- 在修改金丝雀路由面板应用实例区域设置各个版本的流量百分比。
- 在修改金丝雀路由面板流量规则区域单击添加新的入口流量规则,配置流量规则相关参数,然后单击确定。
参数 |
描述 |
框架类型 |
默认显示服务网格。
|
Path |
输入HTTP相对服务路径。 |
条件模式 |
包含同时满足下列条件或满足下列任一条件,根据实际需求选择。
|
条件列表 |
设置条件参数,当有多个条件规则时,可通过单击添加新的规则条件添加。
仅支持设置Header类型的参数。
|
路由规则设置完成后,只有符合设置条件的请求才能访问应用,且会根据流量比例将请求转发给不同版本的应用。