一、简介(Istio 是什么?)
云平台令使用它们的公司受益匪浅。但不可否认的是,上云会给 DevOps 团队带来压力。为了可移植性,开发人员必须使用微服务来构建应用,同时运维人员也正在管理着极端庞大的混合云和多云的部署环境。 Istio 允许您连接、保护、控制和观察服务。
从较高的层面来说,Istio 有助于降低这些部署的复杂性,并减轻开发团队的压力。它是一个完全开源的服务网格,作为透明的一层接入到现有的分布式应用程序里。它也是一个平台,拥有可以集成任何日志、遥测和策略系统的 API 接口。Istio 多样化的特性使您能够成功且高效地运行分布式微服务架构,并提供保护、连接和监控微服务的统一方法。
服务网格是什么?
Istio 解决了开发人员和运维人员所面临的从单体应用向分布式微服务架构转变的挑战。了解它是如何做到这一点的可以让我们更详细地理解 Istio 的服务网格。
术语服务网格用来描述组成这些应用程序的微服务网络以及它们之间的交互。随着服务网格的规模和复杂性不断的增长,它将会变得越来越难以理解和管理。它的需求包括服务发现、负载均衡、故障恢复、度量和监控等。服务网格通常还有更复杂的运维需求,比如 A/B 测试、金丝雀发布、速率限制、访问控制和端到端认证。
Istio 提供了对整个服务网格的行为洞察和操作控制的能力,以及一个完整的满足微服务应用各种需求的解决方案。
为什么使用 Istio?
通过负载均衡、服务间的身份验证、监控等方法,Istio 可以轻松地创建一个已经部署了服务的网络,而服务的代码只需很少更改甚至无需更改。通过在整个环境中部署一个特殊的 sidecar 代理为服务添加 Istio 的支持,而代理会拦截微服务之间的所有网络通信,然后使用其控制平面的功能来配置和管理 Istio,这包括:
- 为 HTTP、gRPC、WebSocket 和 TCP 流量自动负载均衡。
- 通过丰富的路由规则、重试、故障转移和故障注入对流量行为进行细粒度控制。
- 可插拔的策略层和配置 API,支持访问控制、速率限制和配额。
- 集群内(包括集群的入口和出口)所有流量的自动化度量、日志记录和追踪。
- 在具有强大的基于身份验证和授权的集群中实现安全的服务间通信。
Istio 为可扩展性而设计,可以满足不同的部署需求。
核心特性
Istio 以统一的方式提供了许多跨服务网络的关键功能:
流量管理
Istio 简单的规则配置和流量路由允许您控制服务之间的流量和 API 调用过程。Istio 简化了服务级属性(如熔断器、超时和重试)的配置,并且让它轻而易举的执行重要的任务(如 A/B 测试、金丝雀发布和按流量百分比划分的分阶段发布)。
有了更好的对流量的可视性和开箱即用的故障恢复特性,您就可以在问题产生之前捕获它们,无论面对什么情况都可以使调用更可靠,网络更健壮。
请参考流量管理文档获取更多细节。
安全
Istio 的安全特性解放了开发人员,使其只需要专注于应用程序级别的安全。Istio 提供了底层的安全通信通道,并为大规模的服务通信管理认证、授权和加密。有了 Istio,服务通信在默认情况下就是受保护的,可以让您在跨不同协议和运行时的情况下实施一致的策略——而所有这些都只需要很少甚至不需要修改应用程序。
Istio 是独立于平台的,可以与 Kubernetes(或基础设施)的网络策略一起使用。但它更强大,能够在网络和应用层面保护pod到 pod 或者服务到服务之间的通信。
请参考安全文档获取更多细节。
可观察性
Istio 健壮的追踪、监控和日志特性让您能够深入的了解服务网格部署。通过 Istio 的监控能力,可以真正的了解到服务的性能是如何影响上游和下游的;而它的定制 Dashboard 提供了对所有服务性能的可视化能力,并让您看到它如何影响其他进程。
Istio 的 Mixer 组件负责策略控制和遥测数据收集。它提供了后端抽象和中介,将一部分 Istio 与后端的基础设施实现细节隔离开来,并为运维人员提供了对网格与后端基础实施之间交互的细粒度控制。
所有这些特性都使您能够更有效地设置、监控和加强服务的 SLO。当然,底线是您可以快速有效地检测到并修复出现的问题。
请参考可观察性文档获取更多细节。
平台支持
Istio 独立于平台,被设计为可以在各种环境中运行,包括跨云、内部环境、Kubernetes、Mesos 等等。您可以在 Kubernetes 或是装有 Consul 的 Nomad 环境上部署 Istio。Istio 目前支持:
- Kubernetes 上的服务部署
- 基于 Consul 的服务注册
- 服务运行在独立的虚拟机上
整合和定制
Istio 的策略实施组件可以扩展和定制,与现有的 ACL、日志、监控、配额、审查等解决方案集成。
二、安装部署
官方给出的istio安装部署方法很多,如下图所示,包括:istioctl命令、istio operator、helm、多集群和虚拟机等多种安装方式,大家根据自己不同的需求和场景来进行安装。
Note: 我这里选择helm的方式,环境是AWS托管的EKS服务
1.下载官方istio托管在GitHub上面的代码仓库
$ git clone https://github.com/istio/istio.git
2.创建名为istio-system的名称空间
$ kubectl create namespace istio-system
3.安装istio控制平面所使用的基础资源
$ helm install istio-base manifests/charts/base -n istio-system
4.安装istio核心组件istiod
$ helm install istiod manifests/charts/istio-control/istio-discovery \ -n istio-system
5.安装ingress gateway组(可选项)
$ helm install istio-ingress manifests/charts/gateways/istio-ingress \
-n istio-system
6.安装egress gateway组件(可选项)
$ helm install istio-egress manifests/charts/gateways/istio-egress \ -n istio-system
三、验证
确认是否安装成功,如下pod正常运行
$ kubectl get pod -n istio-system
NAME READY STATUS RESTARTS AGE
istio-ingressgateway-d595474b7-gfw6z 1/1 Running 0 21h
istiod-6c5c6cd4c6-v7snh 1/1 Running 0 21h
四、备份和恢复
1.备份istio相关的资源
$ kubectl get istio-io –all-namespaces -oyaml > “$HOME”/istio_resource_backup.yaml
2.恢复备份
$ kubectl apply -f “$HOME”/istio_resource_backup.yaml
五、卸载
1.列出所有安装项
$ helm list -n istio-system
2.helm卸载已安装项
$ helm uninstall istio-base istiod istio-ingress istio-egress
3.删除名称空间istio-system
$ kubectl delete namespace istio-system
4.删除istio定义的CRDs资源
$ kubectl get crd | grep –color=never ‘istio.io’ | awk ‘{print $1}’ \ | xargs -n1 kubectl delete crd
评论前必须登录!
注册