Service Mesh - Istio 1.7 任性的小子

原文:https://makeoptim.com/service-mesh/istio1-7

前言

盼着盼着 Istio 1.7 终于如约而至,Istio 团队完美兑现了发布路线图的诺言。在官方的 Announcing 中是这么描述的:

“伟大的 Istio 社区(Istio’s great community)”

确实,在这个版本中,来自 40 多个公司的 200 多个开发者做出了贡献。

那究竟 Istio 1.7 怎么样呢?值得我们更新吗?还是再等等?且听笔者以下分析。

以下是此版本的一些要点:

安全增强

  • 确认了使用安全发现服务(SDS)作为证书分发的好处,并认为这是一个重要的安全最佳实践。现在这一特性也可以被使用在出口网关上,详见 Egress Gateways with TLS Origination (SDS)

    如果还没使用 SDS 的同学们,建议大家可以用起来。以入口网关为例,没有使用 SDS 之前,每次更新 TLS 证书的时候,都需要重新启动下入口网关 pod,很是麻烦。使用了 SDS 后,可以自动更新,详见 Secure Gateways

  • 增加了信任域验证TCP 流量的支持(之前只能支持 HTTP),并且还支持在 MeshConfig 中进行灵活配置。

  • 增加通过 ECC 进行 CA 通信 的能力,提高了安全性和效率。

  • 基于一条最佳实践:不要让运行的进程有多于它所需的权限,这会导致不必要的混淆网关默认使用非根(non-root)用户部署

    这一最佳实践,在编写 Dockerfile 的时候也常会用到,详见 Best practices for writing Dockerfiles

  • 修复了关于一个 Istio Gateway 和 mTLS 的 bug

易用性提升

在易用性方面主要的改进还是围绕 istioctl 命令行工具。

生产运维改进

  • 增加让 Sidecar 启动之后才启动应用容器的特性。

    这个特性非常的刚需,给 Istio 团队点个赞。举个例子,在没有这个特性的时候,应用容器启动后,第一次连接数据库总是失败的,因为 Sidecar 还没有启动,网络是无法通信的。类似,这种需要在启动时通过 Sidecar 代理来访问资源的时候,这个特性变得非常实用。使用方法,详见变更列表的流量管理

  • 强调 Istio Operator 是最佳安装方式。但是,Operator 目前还不支持金丝雀更新

  • 提供istio-agent 的指标,可以观察它的运行情况。

  • Prometheus 指标收集方面的改进

VM 安全性

本次更新对 VM 没有太多的重量级功能发布,主要更新如下:

  • VM 增加了安全特性,支持证书自动轮转

  • istioctl 增加验证 VM 的代理状态

  • 增加RPM 安装包

其他修复

升级

Require

Require Kubernetes 1.16+

Kubernetes 1.16+ is now required for installation.

说实话,看到需要 Kubernetes 1.16+ 的时候,感觉 Istio 也太任性了吧。目前绝大多数企业和用户所使用的 Kubernetes 版本应该都是 1.16 以下的。这也就相当于拒接了许多现在的用户,因为对于企业和用户来讲 Kubernetes 是比 Istio 更基础的基础设施

另外,对于低版本 Istio 的用户也是伤害极大的,想要升级 Istio,还得先升级 Kubernetes,升级前还要验证下是否有兼容性问题

安装

  • 移除了 istioctl manifest apply,使用 istioctl install 代替。

  • 废弃了 telemetry addons。

网关以非根(non-root)用户运行

因为网关以非根(non-root)用户运行,所以不具备绑定 1024 以下端口的权限。所以,在网关端口声明的地方,需要做响应的修改。举例如下:

ingressGateways:
  - name: istio-ingressgateway
    enabled: true
    k8s:
      service:
        ports:
          - port: 15021
            targetPort: 15021
            name: status-port
          - port: 80
            name: http2
          - port: 443
            name: https

这里,需要修改成明确指定有效的 targetPort

ingressGateways:
  - name: istio-ingressgateway
    enabled: true
    k8s:
      service:
        ports:
          - port: 15021
            targetPort: 15021
            name: status-port
          - port: 80
            name: http2
            targetPort: 8080
          - port: 443
            name: https
            targetPort: 8443

如果你还是想以 root 用户运行 gateway 的话,可以通过配置项设置 --set values.gateways.istio-ingressgateway.runAsRoot=true.

变更列表

流量管理

  • 增加了配置项 values.global.proxy.holdApplicationUntilProxyStarts,使 sidecar 注入器在 pod 容器列表的开始处注入 sidecar,并将其配置为阻止所有其他容器的开始,直到代理就绪为止。默认情况下禁用此选项。(Issue#11130)

  • 增加了对用于客户端证书和 CA 证书的 SDS 支持,该证书用于使用 DestinationRule 从 Egress Gateway 发起的 TLS/mTLS。(Issue#14039)

安全

  • 改进的信任域验证也可以验证 TCP 流量,以前仅支持 HTTP 流量。(Issue#26224)

  • 改进的 Istio 网关,允许在服务器的 TLS 模式为 ISTIO_MUTUAL 时使用基于源主体的授权。(Issue#25818)

  • 改进的虚拟机安全性。VM 身份现在从一个短暂的 Kubernetes 服务帐户令牌启动。VM 的工作负载证书会自动轮换。(Issue#24554)

遥测

  • 向 istio-agent 添加了 Prometheus 指标。(Issue#22825)

  • 使用 istioctl 添加了自定义度量。(Issue#25963)

  • 向 Stackdriver 添加了 TCP 度量标准和访问日志。(Issue#23134)

  • istioctl 已弃用遥测插件。默认情况下将禁用这些功能,并且在将来的版本中将其完全删除。有关安装这些插件的更多信息,请参见“集成”页面。(Issue#22762)

  • 默认情况下,已启用 Prometheus 指标合并。(Issue#21366)

  • 修复了 Prometheus 度量合并以在应用程序故障期间不删除 Envoy 度量的问题。(Issue#22825)

  • 修复了无法解释的会影响 Kiali 图的遥测。此修复程序将默认出站协议嗅探超时增加到 5s,这对像 mysql 这样的服务器优先协议产生了影响。(Issue#24379)

  • 删除了不准确的 pilot_xds_eds_instancespilot_xds_eds_all_locality_endpoints Istiod 指标。(Issue#25154)

安装

  • 增加了用于在 VM 上运行 Istio sidecar 的 RPM 软件包。(Issue#9117)

  • 增加了对单集群和多集群的实验性中心 Istiod 支持

  • 修复了防止 NodePort 服务用作 meshNetworks 中的 registryServiceName 的问题。

  • 改进的网关部署,默认情况下以非 root 身份运行。(Issue#23379)

  • 改进了 operator 默认情况下以非 root 用户身份运行的情况。(Issue#24960)

  • 通过指定严格的安全上下文改进了 operator。(Issue#24963)

  • 改进了 Istiod,默认情况下以非 root 身份运行。(Issue#24961)

  • 改进的 Kubernetes 战略合并用于覆盖 IstioOperator 用户文件,从而改善了处理列表项的方式。(Issue#24432)

  • CRDWebhook 版本升级到 v1。(Issue#18771)(Issue#18838)

    因为 Kubernetes1.16 中将 webhook 的 API 版本改为 v1,并会在 1.19 版本中删除老的 v1beta 版本。这导致 Istio 不得不在自己的 1.8 版本之前完成对应的迁移。对于我们而言,需要更新自己的 mesh 配置文件的版本号,如果你的集群应用较多,那是个不小的工作量,不单单要修改,而且还要验证。

istioctl

  • 为从 Kubernetes 的非工作负载添加了 Allow proxy-status <pod> 命令,并通过 --file 参数传递了代理配置。

  • 添加了一个配置文件以保存 istioctl 默认标志。可以使用环境变量 ISTIOCONFIG 更改其默认位置($HOME/.istioctl/config.yaml)。新命令 istioctl 实验性配置列表显示了默认标志。(Issue#23868)

  • istioctl initistioctl remove 命令添加了 --revision 标志,以支持多个控制平面升级。(Issue#23479)

  • 添加了 istioctl x uninstall 命令以卸载 Istio 控制平面。(Issue#24360)

  • 改进的 istioctl analyze 以警告是否存在已弃用的 mixer 资源。(Issue#24471)

  • 改进的 istioctl analyze 可警告 DestinationRule 是否未使用 CaCertificates 验证服务器身份。

  • 改进的 istioctl 验证以检查资源中的未知字段。(Issue#24861)

  • 改进的 istioctl 安装,在尝试以不支持的旧 Kubernetes 版本安装 Istio 时发出警告。(Issue#26141)

  • 删除 istioctl manifest apply。更简单的安装命令将替换 manifest apply。(Issue#25737)

文档

  • 如果 istio.io 页面已通过 istio.io 自动化测试进行了测试,则添加了可视指示。(Issue#7672)

小结

Istio 1.7 版本存在着太多的激进做法,也许 Istio 团队也很无奈,但是 Service Mesh(Istio)作为云原生的一个基础设施,这么“不稳定”,真的是好事吗?

Istio 1.7 版本总体上看来,并无亮点,反而因为一些激进的做法,导致用户在安装、升级过程中增加成本和不稳定性,在用户体验上是一次严重的倒退。

综上所述,笔者不建议大家立即更新 1.7。如果你硬要更新到 1.7,一定要先将升级变更列表仔细查看。

参考

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,313评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,369评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,916评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,333评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,425评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,481评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,491评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,268评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,719评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,004评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,179评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,832评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,510评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,153评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,402评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,045评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,071评论 2 352

推荐阅读更多精彩内容