十五分钟过下ISTIO

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了十五分钟过下ISTIO相关的知识,希望对你有一定的参考价值。

官网本身有详细的说明,这里简述,当快速入门

目录

什么是ISTIO

Istio 是一个用来连接、管理和保护微服务的开放平台。

Istio 提供一种简单的方式来为已部署的服务建立网络,该网络具有负载均衡、服务间认证、监控等功能,而不需要对服务的代码做任何改动。想要让服务支持 Istio,只需要在您的环境中部署一个特殊的 sidecar,使用 Istio 控制平面功能配置和管理代理,拦截微服务之间的所有网络通信。

  • HTTP、gRPC、WebSocket 和 TCP 流量的自动负载均衡。
  • 通过丰富的路由规则、重试、故障转移和故障注入,可以对流量行为进行细粒度控制。
  • 可插入的策略层和配置 API,支持访问控制、速率限制和配额。
  • 对出入集群入口和出口中所有流量的自动度量指标、日志记录和跟踪。
  • 通过强大的基于身份的验证和授权,在集群中实现安全的服务间通信。

ISTIO有什么用

Istio 提供了一个完整的解决方案,通过为整个服务网格提供行为洞察和操作控制来满足微服务应用程序的多样化需求。它在服务网络中统一提供了许多关键功能:

  • 流量管理。控制服务之间的流量和API调用的流向,使得调用更可靠,并使网络在恶劣情况下更加健壮。
  • 服务身份和安全。为网格中的服务提供可验证身份,并提供保护服务流量的能力,使其可以在不同可信度的网络上流转。
  • 策略执行。将组织策略应用于服务之间的互动,确保访问策略得以执行,资源在消费者之间良好分配。可以通过通过配置网格而不是修改应用程序代码来完成策略的更改。
  • 遥测:了解服务之间的依赖关系,以及它们之间流量的本质和流向,从而提供快速识别问题的能力。

架构

Istio 服务网格逻辑上分为数据平面和控制平面。

  • 数据平面由一组以 sidecar 方式部署的智能代理(Envoy)组成。这些代理可以调节和控制微服务及 Mixer 之间所有的网络通信。
  • 控制平面负责管理和配置代理来路由流量。此外控制平面配置 Mixer 以实施策略和收集遥测数据。
    下图显示了构成每个面板的不同组件:

    技术分享图片


Envoy

  • 动态服务发现
  • 负载均衡
  • TLS 终止
  • HTTP/2 & gRPC 代理
  • 熔断器
  • 健康检查、基于百分比流量拆分的灰度发布
  • 故障注入
  • 丰富的度量指标
    Envoy 被部署为 sidecar,和对应服务在同一个 Kubernetes pod 中。这允许 Istio 将大量关于流量行为的信号作为属性提取出来,而这些属性又可以在 Mixer 中用于执行策略决策,并发送给监控系统,以提供整个网格行为的信息。

Mixer

Mixer 是一个独立于平台的组件,负责在服务网格上执行访问控制和使用策略,并从 Envoy 代理和其他服务收集遥测数据。代理提取请求级属性,发送到 Mixer 进行评估。

Pilot

Pilot 为 Envoy sidecar 提供服务发现功能,为智能路由(例如 A/B 测试、金丝雀部署等)和弹性(超时、重试、熔断器等)提供流量管理功能。它将控制流量行为的高级路由规则转换为特定于 Envoy 的配置,并在运行时将它们传播到 sidecar。

Citadel

Citadel 通过内置身份和凭证管理可以提供强大的服务间和最终用户身份验证。可用于升级服务网格中未加密的流量,并为运维人员提供基于服务标识而不是网络控制的强制执行策略的能力。从 0.5 版本开始,Istio 支持基于角色的访问控制,以控制谁可以访问您的服务

基于kubernetes的安装

下载和准备安装

curl -L https://git.io/getLatestIstio | sh -
mv    istio-0.8.0  /usr/local/istio
echo ‘PATH=$PATH:/usr/local/istio/bin:‘ >>  /etc/profile

安装 Istio 的核心部分

kubectl apply  -f  install/kubernetes/istio.yaml

确认安装

查看启动的服务

$ kubectl get svc -n istio-system

技术分享图片

查看pod是否都启动成功

$ kubectl get pods -n istio-system

从运行的组件理解ISTIO

grafana

Grafana支持多种不同的时序数据库数据源,Grafana对每种数据源提供不同的查询方法,而且能很好的支持每种数据源的特性。

istio-citadel

实现istio的Citadel功能的组件

istio-egressgateway

控制内部访问外部链接的代理,如果这里没设置规则,Envoy将因为不能识别访问规则而抛弃访问请求。

istio-ingressgateway

控制外部访问内部数据的策略,只有配置后外部(kubernetes集群外)业务才能访问集群内业务。

istio-pilot

ISTIO的pilot组件

istio-policy

ISTIO的策略控制组件

istio-sidecar-injector

提供自动注入功能,这样yaml文件就不需要再手动打补丁注入

istio-telemetry

ISTIO 实现遥测数据的组件

prometheus

替代heapster的一个监控数据收集工具

servicegraph

Istio网格中的服务生成一个图。在这个task中,你将安装Servicegraph 插件并使用基于web的界面来查看服务网格的服务图。

技术分享图片

tracing,zipkin

服务轨迹跟踪,同时可以记录到业务的访问量等


测试下:Bookinfo 应用

Bookinfo 应用分为四个单独的微服务:

  • productpage :productpage 微服务会调用 details 和 reviews 两个微服务,用来生成页面。
  • details :这个微服务包含了书籍的信息。
  • reviews :这个微服务包含了书籍相关的评论。它还会调用 ratings 微服务。
  • ratings :ratings 微服务中包含了由书籍评价组成的评级信息。

reviews 微服务有 3 个版本:

  • v1 版本不会调用 ratings 服务。
  • v2 版本会调用 ratings 服务,并使用 1 到 5 个黑色星形图标来显示评分信息。
  • v3 版本会调用 ratings 服务,并使用 1 到 5 个红色星形图标来显示评分信息。

技术分享图片

安装bookinfo

安装bookinfo应用,由于默认启动了istio-sidecar-injector,所以不需要手动注入

$  kubectl apply -f /usr/local/istio/samples/bookinfo/kube/bookinfo.yaml

添加一个Ingress gateway 应用,以便外部可以访问测试

$ kubectl apply -f   /usr/local/istio/samples/bookinfo/kube/bookinfo-gateway.yaml 

确认所有的服务和 Pod 都已经正确的定义和启动:

$ kubectl get services
$ kubectl get pods
确认都是处于runing状态

技术分享图片

  • 测试下部署是否成功
curl   curl -o /dev/null -s -w "%{http_code}
"   http://172.254.48.40:9080/productpage

技术分享图片

可以看到有三个版本,一个没等级信息,所有没font(v1),一个颜色是红色(v2),一个颜色是黑色(v3)

以上是关于十五分钟过下ISTIO的主要内容,如果未能解决你的问题,请参考以下文章

读书摘要之十五------Istio服务网格技术解析与实践(上)

Istio实战(十五)-Sidecar注入

想变得更强吗? 5分钟带你了解云原生核心 -- Istio (上)

想变得更强吗? 5分钟带你了解云原生核心 -- Istio (上)

三分钟带你初步了解Service Mesh开源实现之Istio架构

5分钟看懂Istio与给企业带来的优势