如何使用Kiali和Istio来应用服务网规则?

585 阅读5分钟

简介

我们使用Kiali的用户界面仪表板,应用博客"服务网的快速指南 "中定义的服务网的所有功能。

什么是Kiali?

根据官方文档,Kiali是Istio服务网的管理控制台。我们将Kiali作为Istio的一个插件来安装,或者作为你生产环境的一部分来使用。

Kiali的各种服务包括。

  • 监控:可视化集群中通信的服务
  • 健康:这可以快速识别问题
  • 细节:检查细节、日志和指标
  • 配置:查看和编辑istio定制的yaml配置

前提条件

  • 足够的资源,即Istio的RAM和内存

注意:为了正常运行,Istio需要4个vCPU和8GB的内存。

在Kiali上工作

在我们转到Kiali之前,你可以通过得到类似的输出来检查你在集群上的配置是否正确。

$ kubectl get all -n istio-system

NAME                                        READY   STATUS              RESTARTS   AGE

pod/istio-ingressgateway-5f86977657-cqv56   1/1     Running             0          70m

pod/istiod-7587989b4f-6s9w5                 1/1     Running             0          70m

pod/kiali-575cc8cbf-9qj6b                   0/1     ContainerCreating   0          14s

pod/prometheus-6544454f65-nm65s             0/2     ContainerCreating   0          13s


NAME                           TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)                                      
AGE

service/istio-ingressgateway   LoadBalancer   10.96.84.182    10.96.84.182   15021:30723/TCP,80:30373/TCP,443:30929/TCP   70m

service/istiod                 ClusterIP      10.101.176.29   <none>         15010/TCP,15012/TCP,443/TCP,15014/TCP        70m

service/kiali                  ClusterIP      10.98.6.199     <none>         20001/TCP,9090/TCP                           15s

service/prometheus             ClusterIP      10.111.174.15   <none>         9090/TCP                                     13s


NAME                                   READY   UP-TO-DATE   AVAILABLE   AGE

deployment.apps/istio-ingressgateway   1/1     1            1           70m

deployment.apps/istiod                 1/1     1            1           70m

deployment.apps/kiali                  0/1     1            0           15s

deployment.apps/prometheus             0/1     1            0           13s


NAME                                              DESIRED   CURRENT   READY   AGE

replicaset.apps/istio-ingressgateway-5f86977657   1         1         1       70m

replicaset.apps/istiod-7587989b4f                 1         1         1       70m

replicaset.apps/kiali-575cc8cbf                   1         1         0       15s

replicaset.apps/prometheus-6544454f65             1         1         0       13s


NAME                                                       REFERENCE                         TARGETS         
MINPODS   MAXPODS   REPLICAS   AGE

horizontalpodautoscaler.autoscaling/istio-ingressgateway   Deployment/istio-ingressgateway   <unknown>/8
0%   1         5         1          70m

horizontalpodautoscaler.autoscaling/istiod                 Deployment/istiod                 <unknown>/8
0%   1         5         1          70m

现在,我们将启动上一篇博客中显示的Kiali仪表板,并在浏览器上运行网址。

$ istioctl dashboard kiali

http://localhost:20001/kiali

Kiali Dashboard

Kiali Dashboard

集群流量可视化

  • 现在我们看到整个集群的工作图,点击侧面导航窗格上的图形
    • 在名称空间中选择devops
    • 在流量中,让默认配置出现在那里
    • 选择 "Versioned Graph"。
    • 在显示中,选择流量分布,流量率,闲置边缘,闲置节点,服务节点,流量动画
    • 点击图形仪表板中间的 "创建闲置边缘的图形"。你可能会看到类似的输出

Kiali Cluster Graph

Kiali集群图

  • 我们需要创建流量,所以我们运行下面的命令,用ingressgateway创建路径,用watch命令多次ping它,创建一个虚拟流量。
$ export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')

$ export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')

$ export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].port}')

$ echo "$INGRESS_HOST"

10.96.84.182

$ echo "$INGRESS_PORT"

80

$ echo "$SECURE_INGRESS_PORT"

443

$ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT

$ echo "$GATEWAY_URL"

10.96.84.182:80

$ echo "http://$GATEWAY_URL/productpage"

http://10.96.84.182:80/productpage

$ watch  exec curl -s -o /dev/null "http://$GATEWAY_URL/productpage"


service mesh cluster traffic graph

带流量的集群图

使用Kiali和Istio进行流量转移

流量转移面板允许我们选择流量百分比,将其路由到一个特定的工作负载。

  • 由于它只移动到版本1,我们希望它以平等的方式移动到所有版本,为此我们改变了交通规则
    • 选择评论,打开信息栏
    • 点击评论

service mesh Traffic Shifting

  • 现在我们看到当前的流量路由
  • 点击评论
  • 现在我们要删除这个流量路由,点击仪表盘右侧的行动。选择 "删除交通路线"
  • 确认删除虚拟服务和目的地规则

Traffic Shifting

Traffic Shifting

  • 使用"行动"中的 "流量转移"创建新的交通路线。
  • 它可以通过提供权重来重定向我们想要的流量。我们将在这里使用相等的比例。在预先设置中,你可以改变目的地。例如,我们在网关中使用DNS进行审查,使用istio网关。同样,在流量策略中,你可以配置TLS配置、负载均衡器等。在断路器中,你可以编辑连接设置,如最大连接数或HTTPS最大待处理请求。
  • 点击预览

Traffic Shifting

  • 现在你可以看到yaml文件创建了新的虚拟服务和目标规则。
  • 点击创建
  • 这将创建一个新的路由
  • 在图形中看到它与集群图形可视化中的方式相同。

Traffic Shifting

New Rules Traffic Shifting

Using Kiali dashboard to show case New Cluster Graph

新规则后的群集图

:我们以类似的方式执行下一个Kiali操作,直到删除步骤,然后改变

使用Kiali与Istio的故障注入

故障注入面板允许我们注入故障以测试服务的弹性。

注意

  • HTTP延迟:该规范涉及到在请求转发路径中注入延迟。
  • HTTP Abort : 这个规范处理的是立即中止请求并返回一个预定义的状态代码。

Actions中选择Fault Injection,你将能够按照要求应用故障。

fault inject

故障注入向导

使用Kiali与Istio进行请求路由处理

请求路由向导允许你创建多个路由规则。

  • 每个规则由请求匹配部分和路由至部分组成。
  • 请求匹配
    • 添加多个过滤器 HEADERS、URI、SCHEME、METHOD或AUTHORITY HTTP参数。
    • 这可以是空的,在这种情况下,收到的任何HTTP请求都会与此规则匹配。
  • 路由部分可以指定被路由到任何工作负载的流量百分比。

与上一个动作类似,按照步骤直到删除,然后选择请求路由。Istio按顺序实现路由规则,因此自上而下的路由是由第一个匹配HTTP请求的规则进行的。
可以使用匹配路由向导来修改规则的顺序。
要进行调整,请打开该向导。

request route

请求路由向导

使用Kiali与Istio的网关、断路器和流量策略

流量路由向导高级部分提供其他配置。而一个可用的高级选项是通过现有的网关将一个服务暴露给外部流量,或者为这个服务创建一个新的网关。

gateway configuration

网关配置

现在点击 "电路断路器"。

该向导允许在服务上定义电路断路器,作为可用高级选项的一部分。

  • 连接池:用于对上游主机的连接限制。
  • 离群检测:根据报告的连续错误实施断路器。

Traffic Circuit Breaker

流量断路器

另一个选项是流量策略,这允许定义安全和负载平衡设置。

  • TLS部分,包含与上游服务连接的设置。
  • 为该服务生成一个 "对等认证 "资源。
  • 特定目的地的负载平衡策略。

Traffic Policy

流量策略

使用Kiali与Istio进行请求超时处理

Istio被请求超时面板用来配置Envoy的请求超时。重复上述步骤直到删除,并从Action中选择Request Timeout。在这个向导中。

  • HTTP超时定义了请求超时。
  • 当一个HTTP请求失败时,HTTP重试指定了要遵循的重试程序。

Request TImeout

请求超时

总结

认证的管理是Kiali不能使用的一项任务。Devops人员使用Istio手动设置。