kubernetes中Istio如何配置请求路由

66次阅读
没有评论

共计 4467 个字符,预计需要花费 12 分钟才能阅读完成。

这篇文章主要为大家展示了“kubernetes 中 Istio 如何配置请求路由”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让丸趣 TV 小编带领大家一起研究并学习一下“kubernetes 中 Istio 如何配置请求路由”这篇文章吧。

一:简介

由于 Bookinfo 示例部署了三个版本的 reviews 微服务,因此我们需要设置默认路由。否则,如果您当多次访问应用程序,您会注意到有时输出包含星级评分,有时又没有。这是因为没有为应用明确指定缺省路由时,Istio 会将请求随机路由到该服务的所有可用版本上。

二:路由配置

说明:此任务假定您尚未设置任何路由。如果您已经为示例应用程序创建了存在冲突的路由规则,则需要在下面的命令中使用 replace 代替 create

将所有微服务的默认版本设置为 v1

istioctl create -f samples/bookinfo/networking/destination-rule-all.yaml

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
 name: productpage
spec:
 host: productpage
 subsets:
 - name: v1
 labels:
 version: v1
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
 name: reviews
spec:
 host: reviews
 subsets:
 - name: v1
 labels:
 version: v1
 - name: v2
 labels:
 version: v2
 - name: v3
 labels:
 version: v3
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
 name: ratings
spec:
 host: ratings
 subsets:
 - name: v1
 labels:
 version: v1
 - name: v2
 labels:
 version: v2
 - name: v2-mysql
 labels:
 version: v2-mysql
 - name: v2-mysql-vm
 labels:
 version: v2-mysql-vm
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
 name: details
spec:
 host: details
 subsets:
 - name: v1
 labels:
 version: v1
 - name: v2
 labels:
 version: v2
---

istioctl
create -f
samples/bookinfo/networking/virtual-service-all-v1.yaml

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
 name: productpage
spec:
 hosts:
 - productpage
 http:
 - route:
 - destination:
 host: productpage
 subset: v1
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
 name: reviews
spec:
 hosts:
 - reviews
 http:
 - route:
 - destination:
 host: reviews
 subset: v1
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
 name: ratings
spec:
 hosts:
 - ratings
 http:
 - route:
 - destination:
 host: ratings
 subset: v1
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
 name: details
spec:
 hosts:
 - details
 http:
 - route:
 - destination:
 host: details
 subset: v1
---

3. 使用 istioctl get destinationrules -o yaml 来显示路由规则对应的 subset 定义

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
 creationTimestamp: null
 name: details
 namespace: default
 resourceVersion:  14675502 
spec:
 host: details
 subsets:
 - labels:
 version: v1
 name: v1
 - labels:
 version: v2
 name: v2
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
 creationTimestamp: null
 name: productpage
 namespace: default
 resourceVersion:  14675499 
spec:
 host: productpage
 subsets:
 - labels:
 version: v1
 name: v1
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
 creationTimestamp: null
 name: ratings
 namespace: default
 resourceVersion:  14675501 
spec:
 host: ratings
 subsets:
 - labels:
 version: v1
 name: v1
 - labels:
 version: v2
 name: v2
 - labels:
 version: v2-mysql
 name: v2-mysql
 - labels:
 version: v2-mysql-vm
 name: v2-mysql-vm
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
 creationTimestamp: null
 name: reviews
 namespace: default
 resourceVersion:  14675500 
spec:
 host: reviews
 subsets:
 - labels:
 version: v1
 name: v1
 - labels:
 version: v2
 name: v2
 - labels:
 version: v3
 name: v3
---

4. 通过将来自 productpage 的流量路由到 reviews:v2 实例,为测试用户“jason”启用 ratings 服务。

istioctl replace -f samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
 name: reviews
spec:
 hosts:
 - reviews
 http:
 - match:
 - headers:
 end-user:
 exact: jason
 route:
 - destination:
 host: reviews
 subset: v2
 - route:
 - destination:
 host: reviews
 subset: v1

在 productpage 网页上以用户“jason”身份登录。现在应该在每次评论旁边看到评分(1- 5 颗星)。请注意,如果您以任何其他用户身份登录,您将会继续看到 reviews:v1 版本服务,即不包含星级评价的页面。

三:原理

首先使用 Istio 将 100% 的请求流量都路由到了 Bookinfo 服务的 v1 版本。然后再设置了一条路由规则,该路由规则在 productpage 服务中添加基于请求的“end-user”自定义 header 选择性地将特定的流量路由到了 reviews 服务的 v2 版本。

为了利用 Istio 的 L7 路由功能,Kubernetes 中的服务(如本任务中使用的 Bookinfo 服务)必须遵守某些特定限制。

1. 需要给端口正确命名:服务端口必须进行命名。端口名称只允许是 协议 [- 后缀 -] 模式,其中 协议 部分可选择范围包括 http、http2、grpc、mongo 以及 redis,Istio 可以通过对这些协议的支持来提供路由能力。例如 name: http2-foo 和 name: http 都是有效的端口名,但 name: http2foo 就是无效的。如果没有给端口进行命名,或者命名没有使用指定前缀,那么这一端口的流量就会被视为普通 TCP 流量(除非显式的用 Protocol: UDP 声明该端口是 UDP 端口)。

2. 关联服务:Pod 必须关联到 Kubernetes 服务,如果一个 Pod 属于多个服务,这些服务不能再同一端口上使用不同协议,例如 HTTP 和 TCP。

3.Deployment 应带有 app 以及 version 标签:在使用 Kubernetes Deployment 进行 Pod 部署的时候,建议显式的为 Deployment 加上 app 以及 version 标签。每个 Deployment 都应该有一个有意义的 app 标签和一个用于标识 Deployment 版本的 version 标签。app 标签在分布式跟踪的过程中会被用来加入上下文信息。Istio 还会用 app 和 version 标签来给遥测指标数据加入上下文信息。

四:清除路由

istioctl delete -f samples/bookinfo/networking/virtual-service-all-v1.yaml

以上是“kubernetes 中 Istio 如何配置请求路由”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计4467字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)