Istio,Kubernetes 的微服务支持
2018-02-14 13:25
357 查看
简介
Istio 是一个由 IBM、Google 以及 Lyft 联合推出的开源软件,以无痛方式为运行在 Kubernetes 上的微服务提供流量管理,访问策略管理以及监控等功能。这一软件目前仅在 Kubernetes 上运行,今后可能会扩展到其他平台。本文会结合官方例子,完成安装和基础的监控内容。架构和组件
总体架构如图所示。Envoy
一个 C++ 编写的高性能代理服务器,这里做了扩展,在 Istio 中会以 Sidecar 方式跟应用运行在同一 Pod 内,一方面可以接收并执行关于规则、流量拆分等方面的指令,另一方面能够产生各种指标用于监控和跟踪。Mixer
Mixer 组件,主要进行访问控制以及策略控制,同时也负责从 Envoy 中获取各项指标。Pilot
Pilot 是用户和 Isito 之间的桥梁,负责接收各种配置,并发送给各个组件。Istio auth
内置认证和凭证管理,利用 TLS 提供服务之间、用户和服务之间的认证。 可以用来将没有加密支持的服务升级为加密版本,并且在网络策略之外,提供服务级别的策略控制,今后还会增加更多的鉴权和审计方面的能力。功能 & 特性
无需对现有服务进行变更支持 http 1.1/2、gRPC 以及 TCP 流量的负载均衡和故障转移
可替换的组件
流量监控
可提供身份认证功能
可定制的路由规则
错误处理,例如超时、重试、访问量控制、健康检查和熔断器等。
安装
先决条件
Kubernetes互联网连接
准备工作
首先去https://github.com/istio/istio/releases下载最新版本(目前为 0.1.6),解压并设置 istioctl 命令的执行路径 。下面命令中描述的相对目录就是基于此目录执行命令kubectl api-versions | grep rbac查看当前集群的 RBAC 设置:如果返回内容为空则无需理会。如果返回内容中包含beta,则需要运行kubectl apply -f install/kubernetes/istio-rbac-beta.yaml来进行授权
如果返回内容中只有alpha ,就要kubectl apply -f install/kubernetes/istio-rbac-beta.yaml创建相应的角色和绑定了。
运行
最后,运行kubectl create -f install/kubernetes/istio.yaml创建一系列的 Deployment 以及 Services。注1: 其实上面的内容照做并不一定能成功,反正我的 1.6.6 上面是没能成功,Pilot Pod 中的 API Server 容器会出错,错误信息大概是“system:serviceaccount:default:istio-pilot-service-account” cannot get thirdpartyresources.extensions at the cluster scope.”,也就证明了 beta.yaml 中的 RBAC 设置是不够的,这里我把几个 RoleBinding 都改成为 ClusterRoleBinding,运行就成功了。注2:istio.yaml 中的 Ingress 服务是 Loadbalancer 类型的,如果测试集群不具备这样的条件,还请自行修改成其他合适内容。至此,基础的 istio 组件就已经运行完毕了。运行应用
安装包内包含了一个叫 bookinfo 的小应用,由 Product(入口页)、Detail 和 Review 三部分组成,具体应用 YAML 在安装目录的samples/apps/bookinfo/bookinfo-v1.yaml文件中。打开文件我们会发现这是个很简单的小应用,无非是几个 Deployment 和 Service 的组合。该应用的微服务相互关系大致如下图所示,这个例子很好的展示了 istio 的一大特性——不拘泥于某种语言。istio 提供了一个工具叫 istioctl,这个工具的功能之一,就是把普通的应用 YAML 注入为 istio 支持的应用模式,例如:istioctl kube-inject -f bookinfo-v1.yaml > bookinfo-istio-v1.yaml,比较新旧两个文件不难发现,这一工具为每个 Pod 新增了一个名为 proxy 的容器,以此接管流量,给监控和管理打下基础。
接下来我们运行这一应用: – kubectl create -f bookinfo-istio-v1.yaml:运行注入后的 应用 -kubectl create -f bookinfo-ingress.yaml:创建 Ingress 资源
监控
istio 内置了对 ServiceGraph、Prometheus 以及 Zipkin 的支持,简单的运行一下kubectl create -f install/kubernetes/addons,就会启用这几个服务。注意这几个服务使用的也都是 Loadbalancer 模式,读者应根据集群情况自行修改。各个服务启动之后,可以使用负载工具例如 wrk 对 Productpage 页面进行一段时间的访问,来模拟工作情况。Grafana
Grafana 启动后,我们可以使用服务暴露的地址进行访问,在其中可以看到如下图所示的 Dashboard,展示了我们应用中的几个服务的各种监控数据。Service Graph
这一个服务提供了两个入口,一个是 /dotvz,以图形的方式供服务关系展示,而/graph则提供了 JSON 格式的文档供结构化使用。例如:{"nodes": {
"details": {},
"productpage": {},
"reviews": {},
"unknown": {}
},
"edges": [
{
"source": "productpage",
"target": "reviews",
"labels": {
"qps": "0.030416",
"version": "v1"
}
},
{
"source": "unknown",
"target": "productpage",
"labels": {
"qps": "0.030416",
"version": "v1"
}
},
{
"source": "productpage",
"target": "details",
"labels": {
"qps": "0.030416",
"version": "v1"
}
}
]
}
Zipkin
Istio 提供了开箱即用的 Zipkin 跟踪支持,打开页面之后,我们会看到 Zipkin 的查找页面,并无特殊内容,就不展开细谈了。文中介绍内容只是很粗浅的入门操作,后续会进一步跟进、挖掘和学习这一系统的其他强大功能。
相关文章推荐
- Istio,Kubernetes 的微服务支持
- Kubernetes如何支持有状态服务的部署?
- 阿里云容器服务新增支持Kubernetes编排系统,性能重大提升
- Kubernetes上的服务网格 Istio - 分布式追踪篇
- 11月30日云栖精选夜读:阿里云容器服务新增支持Kubernetes编排系统,性能重大提升
- 利用 istio 来对运行在 Kubernetes 上的微服务进行管理
- 阿里云容器服务新增支持Kubernetes编排系统,性能重大提升
- 【译文】亚马逊宣布容器服务成功支持Kubernetes
- 阿里云容器服务新增支持Kubernetes编排系统,性能重大提升
- 阿里云容器宣布开放支持Kubernetes托管服务
- HashiCorp Consul 与 Kubernetes 服务目录同步
- Windows Azure新功能:健康监控、中文支持、移动服务支持Android
- Kubernetes服务之“运行单实例的有状态服务”
- Java EE 7 教程 第一部分 简介 第1章 概述 第1.5节 Web服务支持
- SOA系列五:原生WEB服务对面向服务原则的支持
- 微软停止Windows XP和Office 2003主流支持服务
- 让busybox的http服务支持php
- WCF 无法激活服务,因为它不支持 ASP.NET 兼容性。已为此应用程序启用了 ASP.NET 兼容性
- WCF与AJAX编程开发实践(4):支持JSON的Ajax WCF服务
- 【转】kubernetes 中 deployment 支持哪些键值