阿里巴巴硅谷 Istio 专家解读Istio 1.0 发布

来源:阿里巴巴中间件

Istio 1.0 于北京时间8月1日0点正式发布!虽然比原本官网公布的发布时间晚了9个小时,但这并未影响到Istio在社区的热度。

Istio 是 Service Mesh概念的具体实现。2018年被称为 Service Mesh 原年,誉为新一代的微服务架构,有了Service Mesh,像Docker和Kubernetes标准化部署操作一样来标准化我们的应用程序运行时的操作便成为可能。Istio是其中最成熟和被广泛接受的开源项目。它是连接、管理和保护微服务的开放平台。今天发布的1.0 版本是一个重要的里程碑。这意味着Istio的所有核心功能都已经可以落地部署,不再只是演示版了。

本文来自阿里巴巴中间件事业部硅谷团队 Istio 技术专家 Andy在 Istio上的实践和对1.0版本的解读,Andy长期关注Service Mesh,在Cloud Foundry,Kubernetes,Envoy上有着丰富的实践和开发经验。

从功能上说,1.0版本是对0.8版本的补充和加强。从0.8之前版本到1.0版本,改变的部分从网络,策略和遥测,适配器,到安全等几大模块,都有补充和增强。

一、Istio 新功能简介

1.0 版本中的新功能大致如下:

➤ 网络

  • 使用 Virtual Service 进行 SNI 路由
  • 流式 gRPC 恢复
  • 旧版本(v1alpha1)的网络 API 被移除
  • Istio Ingress 被gateway替代

➤ 策略和遥测

  • 属性更新
  • 缓存策略检查
  • 遥测缓冲
  • 进程外适配器
  • 客户端遥测

➤ Mixer 适配器

  • SignalFX
  • Stackdriver

➤ 安全

  • RPC 级授权策略
  • 改进的双向 TLS 认证控制
  • JWT 认证

二、几个重要的改变

在众多的改变中,下面几点和之前版本相比,有较大的增强和改动,在这里我们展开介绍下:

➤ IstioGateway 替代 IstioIngress

在 istio 1.0 之前,Istio Ingress 直接使用 Kubernetes Ingress,因此受到 Kubernetes 的 Ingress 本身只有 L7 的网络控制功能的限制,很多功能无法实现。这些功能包括:

  • L4-L6的LB
  • 对外的mTLS
  • 对SNI(服务器名称指示)的支持
  • 以及其它在Pilot已经实现的对内部网络的功能,比如Traffic splitting,fault injection, mirroring, header match等。

为了解决这些问题,Istio 在 1.0 版本提出了 Istio Gateway 的概念,从而摆脱了对 Kubernetes Ingress 的依赖,可以实现更多的功能,例如: L4-L6的LB,对外的mTLS,对SNI(服务器名称指示)的支持等。

如果我们希望给一个 Kubernetes 的 guestbook ui Service 做一个 Istio Ingress 的话,在 0.8 版本以前我们需要如下定义一个 Istio Ingress Resourse:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: istio
  name: simple-ingress
spec:
  rules:
    - http:
        paths:
          - path: /.*
            backend:
              serviceName: guestbook-ui
              servicePort:80

这里面是我们对 L7 的策略配置。但是可以看到,基于这种 Ingress 并不能支持 mTLS 等高级功能。现在在 Istio 1.0 版本,我们可以使用新的 Istio Gateway 来完成类似的配置。这种配置会分两部分:

  • L4-L6 的配置在 Gateway 这种资源中;
  • L7 的配置在绑定的 Virtual Services 配置资源中。

对于上面同样的例子,Istio Gateway 资源的定义是这样的:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: simple-gateway
spec:
  servers:
  - port:
      number:80
      name: http
      protocol: HTTP
  - port:
      number:443
      name: https
      protocol: HTTPS 
    hosts:
    - sample.default.example.com
    tls:
      mode: SIMPLE
      serverCertificate: /tmp/tls.crt
      privateKey: /tmp/tls.key

通过 Gateway 这种资源,我们提供了对mTLS的支持。为了完成对 HTTP path 的匹配和对 Virtual Host 的支持,我们需要定一个新的 VirtualService 资源并且将它和 Gateway 资源绑定。Virtual Services 很像以前的 Virtual Host,它可以允许同一个IP对应不同的域名,所以即使同样的路径也不会产生重复。

它的配置和与 Gateway 的绑定如下:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: sample
spec:
  hosts:
    - guestbook-ui.default.example.com 
  gateways:
  - simple-gateway  
  http:
  - match:
    - uri:
        prefix: /get
    route:
...

➤ Mixer 进程外适配器

适配器是让第三方用户来扩展Mixer功能的,比如和自己的 Logging 系统集成。以前的适配器,是与 Mixer 主进程在一起的。这样有些问题,比如如果适配器有用户的认证信息,那么上传的时候所有人都知道了。另外,如何对这些适配器做健康检查(health check)呢? 它们在同一个进程里。

新的版本,适配器在 Mixer 主进程之外,用户不但可以决定是否要把适配器上传,而且运行时也可以进行外部健康检查了。

不过由于适配器 和 Mixer 主进程不在同一个进程,需要进行进程间通讯,因此适配器要和主进程通讯会依赖 RPC。这里 Mixer 选用了比较流行的标准 RPC 框架 gRPC作为实现。

有了这个功能,在 Istio 的 Mixer 中开发外适配器功能只需要如下三个步骤:

  • 编译适配器源代码
  • 生成适配器模版
  • 部署适配器镜像

如果有兴趣更深入的了解适配器的开发和使用,请参考这两个教程

第一部分:

https://github.com/istio/istio/wiki/Out-Of-Process-gRPC-Adapter-Dev-Guide

第二部分:

https://github.com/istio/istio/wiki/gRPC-Adapter-Walkthrough

➤ 支持可以使用身份验证策略配置的 JWT 身份验证

JWT(JSON Web Token)是一种基于token的鉴权机制。JWT很流行的原因主要是它的简单易用,特别是采用JSON格式,是大部分编程语言支持的。所以尽管出现的时间不长,但却是很多编程人员的鉴权首选。因此 Istio 对 JWT 进行了支持。

例如我们创建一个 JWT token payload来庆祝 Istio 1.0 GA :

{
  "iss":"istio",
  "sub":"1.0 GA",
  "iat":1533073556
}

用户调用时,需要把 JTW token 来编码后,以 Bearer 形式进行传递:

GET http://35.45.16.16/api/v1/packages?packageNumber=MPDS-372766142-5899
Host: sample.default.example.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJpc3RpbyIsInN1YiI6IjEuMCBHQSIsImlhdCI6MTUzMzA3MzU1Nn0.SkgIHM5ecYsn_hWGewyPFgBAQw79g4hAMEtpXzidKaM

Istio 就用这个Bearer来作最终用户认证。是不是很简单呢?Istio 之前就支持基于 JWT 的Authentication。新的版本开始支持 Authorization。对用户来说,只是在同一个Authentication policy 的资源上扩展一部分而已。

Istio的 Authorization 是基于角色的访问控制,它提供命名空间级别, 服务级别和 method-level 的访问控制。

要实现Authorization,只需要如下几步:

  • 首先要开启允许授权;
  • 开启了特定级别(如:命名空间)的授权;
  • 创建这个级别的访问控制策略。

更详尽的内容,可以参考 Istio 安全文档:

https://istio.io/zh/docs/concepts/security/

三、阿里巴巴对 Istio 生态的支持

以上是关于Istio 1.0的简单介绍。如果大家感兴趣的话,可以通过以下的教程进行实践

https://github.com/szihai/istio-workshop

阿里巴巴中间件技术团队会持续关注和参与Service Mesh的开发和推广活动。并提供一系列关于Service Mesh和 Istio 的解读、实践和教程,详细介绍 Istio新版本中的概念、功能以及未来最新的动态。我们也正计划在Dubbo 2.7的版本中加入对Istio的集成,充分利用Service Mesh的理念,进一步简化微服务的管理。

- END -

原文发布于微信公众号 - 程序猿DD(didispace)

原文发表时间:2018-08-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算

现代网络负载平衡和代理介绍

原文地址:https://blog.envoyproxy.io/introduction-to-modern-network-load-balancing-an...

4234
来自专栏腾讯云技术沙龙

陈曦:性能与稳定并存 Elasticsearch调优实践

我今天分享的是Elassticsearch调优实践,首先自我介绍一下,我资历比较浅,我是腾讯TEG基础架构部后台开发工程师,虽然我不是项目经理,但是我们项目负责...

3173
来自专栏崔庆才的专栏

你的 Mac 用对了吗?推荐一些 Mac 上比较好用的软件

最近有一个朋友刚入手了 Mac,准备专门搞开发用,让我给他推荐几款软件,然后我就把我的 Launchpad 截图发给了他,他看到这密密麻麻的软件完全不知所措,如...

5010
来自专栏web前端教室

[前端常见病] 之 后端数据还没有,前端怎么进行?

标题所描述的情况,一般出现在后端进度滞后,前端又积累了一些工作量的情况下。在业务需求已经基本清晰的时候,前端的进度是很快的,UI设计出设计图,前端小兄弟切页面,...

23610
来自专栏顾宇的研习笔记

你的 CI 在挖比特币吗?—— 记一次 CI 入侵的调查

我们的持续集成服务器搭建在AWS上的一个EC2的虚拟机中。采用Jenkins 2.46.1并且只有一个Master实例来运行所有的任务。且采用持续部署——团队每...

1222
来自专栏数据和云

从一个故障案例看强大到令人发紫的Oracle数据库--我和数据中心的故事

作为一名混迹数据库江湖十几年的老DBA,当你对关系型数据库的了解越来越深入时,你会发现,Oracle数据库真的是强大到令人发紫! Oracle数据库的强大,不仅...

3184
来自专栏linux驱动个人学习

Linux各种版本

 1.1   Fedora Core和Fedora     一开始总搞不清楚 Fedora Core和Fedora有什么关系?有什么不同,现在终于明白了,自从F...

6164
来自专栏FreeBuf

移动渗透测试平台搭建 – NetHunter 3.0

* 本文原创作者:gowabby,本文属FreeBuf原创奖励计划,未经许可禁止转载 NetHunter是一款专为渗透测试人员打造的基于CyanogenMod...

3036
来自专栏施炯的IoT开发专栏

Windows on Device 项目实践 4 - 智能风扇制作

在前面的文章中,我们已经学习并且利用Intel Galileo开发板和Windows on Device制作了火焰报警器、感光灯和PWM调光灯。在这个项目中,我...

2038
来自专栏ThoughtWorks

Kubernetes救援 - 教你如何从新技术的坑里爬出来(上) | TW洞见

今日洞见 文章作者/配图来自ThoughtWorks:佟达。 本文所有内容,包括文字、图片和音视频资料,版权均属ThoughtWorks公司所有,任何媒体、网站...

4059

扫码关注云+社区

领取腾讯云代金券