kubernetes Istio是什么

 

 

一、Istio

Istio 是一个服务网格,它允许集群中的 pods 和服务之间进行更详细、复杂和可观察的通信。

它通过使用 CRD 扩展 Kubernetes API 来进行管理,它将代理容器注入到所有 pods 中,然后由这些 pods 来控制集群中的流量。

 

二、kube-proxy

Kubernetes 中的服务是由运行在每个节点上的 kube-proxy 组件实现的,该组件创建 iptables 规则,并将请求重定向到 Pod。

因此,服务就是 iptables 规则。

 

下图中,服务 service-nginx 指向 nginx pods,服务 service-python 指向 python pods。

红线显示了从 pod1-nginx 中的 nginx 容器向 service-python 服务发出的请求,该服务将请求重定向到 pod2-python

kubernetes Istio是什么

 

三、Kubernetes Istio

集群中安装了 Istio,每个 pod 都有第二个称为 istio-proxy 的 sidecar 容器,该容器在创建期间会自动将其注入到 pods 中。

拥有 istio-proxy 的 pods 将不再使用 kube-proxy 组件了。

kubernetes Istio是什么

每当配置或服务发生变化时,Istio 控制平面就会对所有 istio-proxy sidecars 进行处理。

Istio 控制平面使用现有的 Kubernetes 服务来接收每个服务点所指向的所有 pods ,通过使用 pod IP 地址,Istio 实现了自己的路由。

 

 

四、Istio 工作原理

所有的 istio-proxy 容器已经被 Istio 控制平面所管控,并包含所有必要的路由信息。

来自 pod1-nginx 的 nginx 容器向 service-python 发出请求。

请求被 pod1-nginx 的 istio-proxy 容器拦截,并被重定向到一个 python pod 的 istio-proxy 容器,该容器随后将请求重定向到 python 容器。

kubernetes Istio是什么

 

五、Istio优势

1. 可以掌握所有请求流量的详细信息

现在所有流量都通过每个 Pod 中的 istio-proxy 容器进行路由,每当 istio-proxy 接收并重定向一个请求时,它还会将有关该请求的信息提交给 Istio 控制平面。

因此 Istio 控制平面可以准确地知道该请求来自哪个 pod、存在哪些 HTTP 头、从一个istio-proxy 到另一个 istio-proxy 的请求需要多长时间等等。

在具有彼此通信的服务的集群中,这可以提高可观察性并更好地控制所有流量。

 

2. 先进的路由

Kubernetes 内部 Services 只能对 pods 执行轮询或随机分发请求,使用 Istio 可以实现更复杂的方式。比如,如果发生错误,根据请求头进行重定向,或者重定向到最少使用的服务。

 

3. 部署

允许将一定比例的流量路由到特定的服务版本。

 

4. 加密

可以对 pods 之间从 istio-proxy 到 istio-proxy 的集群内部通信进行加密。

 

5. 监控/图形

Istio 可以连接到 Prometheus 等监控工具,也可以与 Kiali 一起展示所有的服务和他们的流量。

kubernetes Istio是什么

 

6. 追踪

因为 Istio 控制平面拥有大量关于请求的数据,所以可以使用 Jaeger 等工具跟踪和检查这些数据。

kubernetes Istio是什么

 

7. 多集群 mesh

kubernetes Istio是什么

 

 

 

 

六、Istio 会取代 Kubernetes 的服务吗?

不会,因为 Istio 会使用现有的 Kubernetes 服务获取它们的所有 endpoints/pod IP 地址。

 

七、Istio 取代了 Kubernetes 的 Ingress 吗?

是的,Istio 提供了新的 CRD 资源,比如 Gateway 和 VirtualService,甚至还附带了 ingress 转换器 istioctl convert-ingress。

下图显示了 Istio 网关如何处理进入流量,网关本身也是一个 istio-proxy 组件。

kubernetes Istio是什么

 

 

 

 

 

神作https://mp.weixin.qq.com/s/CALHF1UBpiKtNNS-NFHVnA

 

上一篇:kubectl 常用命令汇总


下一篇:Kubernetes Pods (三)