Istio在UAEK中的实践改造之路
副标题[/!--empirenews.page--]
9月15日技术沙龙 | 与东华软件、AWS、京东金融、饿了么四位大咖探讨精准运维!
为什么需要ServiceMesh UCloud App Engine on Kubernetes(后简称“UAEK”)是UCloud内部打造的一个基于Kubernetes的,具备高可用、跨机房容灾、自动伸缩、立体监控、日志搜集和简便运维等特性计算资源交付平台,旨在利用容器技术提高内部研发运维效率,让开发能将更多的精力投入在业务研发本身,同时,让运维能更从容应对资源伸缩、灰度发布、版本更迭、监控告警等日常工作。 考虑到Kubernetes本来就是为自动部署、伸缩和容器化而生,再加上UCloud UAEK团队完成IPv6组网调研和设计实现后,一个成熟的容器管理平台很快正式在北京二地域的多个可用区上线了。相比于过去申请管理虚拟机部署应用服务,Kubernetes确实带来了实实在在的便利,例如方便灵活的自动伸缩以及触手可及的微服务架构,只需简单配置即可实现跨可用区容灾等。 然而,微服务化又为系统架构带来许多新的问题,例如服务发现、监控、灰度控制、过载保护、请求调用追踪等。大家已经习惯自行运维一组Zookeeper集群用以实现服务发现和客户端负载均衡,使用UAEK后能否免去运维Zookeeper的工作?为了监控业务运行状态,大家都需要在代码里加上旁路上报逻辑,使用UAEK是否能无侵入零耦合地实现监控上报? 此外,过去很多系统模块间调用缺少熔断保护策略,波峰流量一打就瘫,使用UAEK是否能帮助业务方免去大规模改造呢?过去排查问题,尤其是调用耗时环节排查总是费时费力,使用UAEK能否为定位瓶颈提供方便的工具? 显然,仅凭一个稳定的Kubernetes平台不足以解决这些问题。因此,在UAEK立项之初,团队就把ServiceMesh作为一个必须实现的目标,任何在UAEK上部署的TCP后台服务,都能享受到ServiceMesh带来的这些特性:
为什么是Istio? 关于ServiceMesh的实现,我们重点考察了Istio。通过前期的调研和测试,我们发现Istio的几个特性能很好满足UAEK的需求:
![]() 整个服务网格分成控制面板和数据面两大部分。数据面指的就是注入到应用Pod中的Envoy容器,它负责代理调度模块间的所有流量。控制面分为Pilot,Mixer和Citadel三大模块,具体功能如下:
Istio整体工作的原理和流程细节非常复杂,所涉及到的技术栈有一定的深度和广度。这里只概括一下大体过程:
Istio在UAEK环境下的改造之路 经过上述的调研和与一系列测试,UAEK团队充分认可Istio的设计理念和潜在价值,希望通过利用Istio丰富强大的微服务治理功能吸引更多的内部团队将服务迁移到UAEK环境中。 然而,事实上,在UAEK上接入Istio的过程并非一帆风顺。最早开始调研Istio的时候,Istio还在0.6版本,功能并不完善,在UAEK环境中无法开箱即用。 IPv6问题的解决 我们首先碰到的问题是,UAEK是一个纯IPv6网络环境,而Istio对IPv6流量的支持并不完备,部分组件甚至无法在IPv6环境下部署。 ![]() 在介绍具体改造案例之前,先了解下Istio Sidecar是如何接管业务程序的流量。 如上图所描述,Istio会向应用Pod注入两个容器:proxy-init容器和envoy容器。proxy-init容器通过初始化iptables设置,将所有的TCP层流量通过nat redirect重定向到Envoy监听的15001端口。以入流量为例,Envoy的服务端口接收到被重定向到来的TCP连接后,通过getsocketopt(2)系统调用,使用SO_ORIGINAL_DST参数找到该TCP连接的真实目的地IP地址,并将该请求转发到真实目的IP。 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |