写路由规则与韧性配置
目标
通过VirtualService根据条件将请求分为多个条件,掌握了通过DestinationRule确定目标的性质和恢复力的感觉。
为什么重要
两个资源的角色分离不是喜好,而是运营结构。每次触及部署管道的是路由(VirtualService),而服务所有者一次确定并长期保留的是目标的性质(DestinationRule)。模糊这些界限的话,每次部署都会一起摇动连接池设置。而且匹配顺序和subset的标签一致,这两种是消息故障诊断的一半。如果将无条件的基本路径放在上面,下面的规则就会死掉,如果subset标签与pad标签不一致,端点就会空出503(UH)。恢复性设置也不能根据感觉来决定——如果整个超时时间比尝试时间的总和短,则一次都无法重新尝试,并结束,如果没有隔离上限,电路断路器就会造成全面故障。
在这个环境中,数据包无法流畅传输,因此评分需要根据 Manifest 的结构进行。istioctl analyze看看结果。
阶段
开始前准备。练习板每次练习都会重新弹出,所以前一次练习安装的消息设置不会保留。kubectl get crd virtualservices.networking.istio.io如果空的话先istioctl manifest generate --set profile=minimal > /root/istio/manifest.yaml制作宣言书kubectl apply -f /root/istio/manifest.yaml请执行两次(只有CRD先注册后才会附加其余内容)。然后kubectl create ns mesh-lab && kubectl label ns mesh-lab istio-injection=enabled准备名称空间。
/opt/lab/fixtures/istio/workload-v1v2.yaml乙mesh-lab请应用于名称空间。Servicereviews的第一个端口名称是http必须做,Deploymentreviews-v1·reviews-v2的pad标签分别app: reviews哇version: v1/version: v2必须是。mesh-labDestinationRulereviews请制作。spec.host是reviews并且,spec.subsets的名字v1(labels: {version: v1})和v2(labels: {version: v2})请放两个subset。mesh-lab在VirtualServicereviews请制作。spec.hosts在reviews留下,spec.http的最后一个项目是match不要放进去 destinationhost: reviews,subset: v1请放在那里。- 请在同一个VirtualService的前面添加条件路由。条件是头
end-user去准确地labhub-tester如果是这种情况,目的地是subset: v2是。这个路由必须位于最后一个基本路径之上。 mesh-lab请在 ratings 中创建工作流程 — Serviceratings(端口名称http,端口9080)和Deploymentratings-v1(脚垫标签app: ratings,version: v1). 然后VirtualServiceratings制作match的uri.prefix的/api/ratings罗,rewrite.uri的/ratings留为和destination是host: ratings请这样做。- 相同的VirtualService
ratings的路由timeout: 3s哇retries请粘上。attempts: 3,perTryTimeout: 1s,retryOn里面有5xx,connect-failure请包含。还有/root/istio/traffic/out/retry-note.txt如果重新尝试不匹配的请求(POST等),请写下为什么会危险。 mesh-labDestinationRuleratings制作并trafficPolicy.outlierDetection在consecutive5xxErrors: 5,interval: 10s,baseEjectionTime: 30s,maxEjectionPercent: 50请输入。还有VirtualServiceratings在fault.delay添加percentage.value: 10,fixedDelay: 2s请放在那里。istioctl analyze -n mesh-lab结果/root/istio/traffic/out/analyze.txt请保存到Error [不能留下)。还有/root/istio/traffic/out/routes.json请制作。routes排序的长度是实际的VirtualServicereviews的spec.http必须与项目数相同,在数组的最后一个元素中match请不要插入钥匙。default_subset身高值是v1是。mesh-lab中必须有2个以上的VirtualService。
参考
- 因为每次练习都会出现新的练习板,所以前一次练习的集群状态不会留下。所以将消息设置作为宣言文件留下来是可重现性的原因。宣言式的设置的价值不是抽象的原则,而是在这个练习中可以直接感受到的原因。
kubectl apply -f - -n mesh-lab可以在标准输入中直接应用。应用后kubectl get virtualservice reviews -n mesh-lab -o yaml请确认实际存储的样子。- 8次路由的数量是
kubectl get virtualservice reviews -n mesh-lab -o json | jq '.spec.http | length'选的话就不会出错。 - 在第5题中,如果只创建VirtualService而不创建目标工作量,静态分析会抛出“找不到参考的主机”错误。第8题会捕获那个错误。
- 常见的错误1:将条件路由放在数组最后面。基本路径先被抓住,条件变得毫无意义。
- 常见的错误2:在subset中
labels只写名字,不写。名字只用于Envoy群集名称,选择板是标签。
上传目标工作负载和版本标签
/opt/lab/fixtures/istio/workload-v1v2.yaml乙mesh-lab请应用于名称空间。Servicereviews的第一个端口名称是http必须做,Deploymentreviews-v1·reviews-v2的pad标签分别app: reviews哇version: v1/version: v2必须是。
直接应用图片就可以了。但是请确认Service端口是否有名称,以及Pad模板中是否有app和version标签。消息根据端口名称判断协议。
定义每个版本的subset
mesh-labDestinationRulereviews请制作。spec.host是reviews并且,spec.subsets的名字v1(labels: {version: v1})和v2(labels: {version: v2})请放两个subset。
subset不会仅根据名称来选择板子。必须写下每个subset要选择什么标签的板子,该标签必须与实际板子标签相同。
将基本路径发送为v1
mesh-lab在VirtualServicereviews请制作。spec.hosts在reviews留下,spec.http的最后一个项目是match不要放进去 destinationhost: reviews,subset: v1请放在那里。
必须有一个无条件路由,否则匹配失败的请求就没有地方去了。请把那个路由放在数组的末尾。
以头衔条件发送为v2
请在同一个VirtualService的前面添加条件路由。条件是头end-user去准确地labhub-tester如果是这种情况,目的地是subset: v2是。这个路由必须位于最后一个基本路径之上。
匹配从上到下依次执行,并写入第一次匹配的值。如果条件路由低于默认路径,则永远不会执行。
路径前缀匹配和重新编辑
mesh-lab请在 ratings 中创建工作流程 — Serviceratings(端口名称http,端口9080)和Deploymentratings-v1(脚垫标签app: ratings,version: v1). 然后VirtualServiceratings制作match的uri.prefix的/api/ratings罗,rewrite.uri的/ratings留为和destination是host: ratings请这样做。
当外部暴露的路径和后端知道的路径不同时使用。如果目标服务不在群集中,静态分析会出错,请一起创建工作负载。
附加超时和重试
相同的VirtualServiceratings的路由timeout: 3s哇retries请粘上。attempts: 3,perTryTimeout: 1s,retryOn里面有5xx,connect-failure请包含。还有/root/istio/traffic/out/retry-note.txt如果重新尝试不匹配的请求(POST等),请写下为什么会危险。
重新尝试才有意义,尝试必须在整个超时内完成。而且即使重新尝试,也要先判断是否是安全的请求。
异常检测和缺陷注入
mesh-labDestinationRuleratings制作并trafficPolicy.outlierDetection在consecutive5xxErrors: 5,interval: 10s,baseEjectionTime: 30s,maxEjectionPercent: 50请输入。还有VirtualServiceratings在fault.delay添加percentage.value: 10,fixedDelay: 2s请放在那里。
隔离必须设定上限。全部去除的话,服务就会全部停止。注入缺陷的比例也必须指定才能进行实验。
验证设置并整理路由顺序
istioctl analyze -n mesh-lab结果/root/istio/traffic/out/analyze.txt请保存到Error [不能留下)。还有/root/istio/traffic/out/routes.json请制作。routes排序的长度是实际的VirtualServicereviews的spec.http必须与项目数相同,在数组的最后一个元素中match请不要插入钥匙。default_subset身高值是v1是。mesh-lab中必须有2个以上的VirtualService。
不要用手数路由器数量,请从实际资源中提取。基本路径没有条件的事实也应该在配置文件中体现出来。