微服务治理 Istio 1.6部署和应用(上)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 微服务治理 Istio 1.6部署和应用

Service Mesh


Service Mesh 的中文译为“服务网格”,是一个用于处理服务和服务之间通信的基础设施层,它负责为构建复杂的云原生应用传递可靠的网络请求,并为服务通信实现了微服务所需的基本组件功能,例如服务发现、负载均衡、监控、流量管理、访问控制等。在实践中,服务网格通常实现为一组和应用程序部署在一起的轻量级的网络代理,但对应用程序来说是透明的。


640.png


Service Mesh 部署网络结构图 Service Mesh有四大特点:


  • 治理能力独立(Sidecar)
  • 应用程序无感知
  • 服务通信的基础设施层
  • 解耦应用程序的重试/超时、监控、追踪和服务发现


640.png


如此一来,Service Mesh将业务模块和服务治理分开。从上图中我们看到,控制面和数据面分离,应用在部署的时候,每个应用附带一个Side Car,这个Side Car是拦截每一个应用对外请求的。同时控制面的服务治理策略下到Side Car中具体的执行,这样的话,即使业务模块升级和服务治理的升级也能互不影响的,还能动态调整服务治理的规则和策略 从Service Mesh的结构和特点,我们可以总结出其对于服务治理的理念:


1、微服务治理与业务逻辑解耦:把大部分SDK能力从应用中剥离出来,并拆解为独立进程,以 sidecar 的模式进行部署。


2、异构系统的统一治理:方便多语言的实施,解锁升级带来的困难。


3、价值:(1)可观察性:服务网格捕获诸如来源、目的地、协议、URL、状态码、延迟、持续时间等线路数据;(2)流量控制:为服务提供智能路由、超时重试、熔断、故障注入、流量镜像等各种控制能力。(3)安全性高:服务的认证、服务间通讯的加密、安全相关策略的强制执行;(4)健壮性:支持故障注入,对于容灾和故障演练等健壮性检验帮助巨大。我们以Service Mesh的杰出代表Istio为例来聊聊最新的服务治理的架构,它对Service Mesh完全支持,架构清晰,拆分数据面、控制面;拥有通信、安全、控制、观察等功能,实现开放,且插件化,多种可选实现。Istio可结合K8S使用,K8S提供服务生命周期的管理,Istio在K8S之上通过服务治理的整体的功能的实现。👉


1 Istio 概述


Isito是Service Mesh的产品化落地,是目前最受欢迎的服务网格,功能丰富、成熟度高。Linkerd是世界上第一个服务网格类的产品 官方地址:👉https://istio.io


640.png


主要有以下特点


  • 连接(Connect)

- 流量管理      

- 负载均衡      

- 灰度发布

  • 安全(Secure)

- 认证      

- 鉴权

  • 控制(Control)

- 限流    

- ACL

  • 观察(Observe)

- 监控    

- 调用链


主要应用于服务治理:


640.png


👉


2 Isito 架构与组件



640.png


注:此页中图片引用自Istio官网


◆ 性能总结 Istio 负载测试网格包含了 1000 个服务和 2000 个 sidecar,全网 格范围内,QPS 为 70,000。在使用 Istio 1.6.2 运行测试后,我们 得到了如下结果:


• 通过代理的 QPS 有 1000 时,Envoy 使用了 0.5 vCPU 和 50 MB 内存。


• 网格总的 QPS 为 1000 时,istio-telemetry 服务使用了 0.6 vCPU。


• Pilot 使用了 1 vCPU 和 1.5 GB 内存。


• 90% 的情况 Envoy 代理只增加了 6.3 ms 的延迟


640.png


注:此页中图片和数据引用自Istio官网


👉


3 在 Kubernetes 部署 Istio


可参考官方文档,以部署1.6版本作为演示,部署的demo模式,所有组件都安装


# wget https://github.com/istio/istio/releases/download/1.6.2/istio-1.6.2-linux-amd64.tar.gz
# tar -zxvf istio-1.6.2-linux-amd64.tar.gz -C /data/
# cd /data/istio-1.6.2/
# mv bin/istioctl /usr/bin
# istioctl profile list
Istio configuration profiles:
    default
    demo
    empty
    minimal
    preview
    remote
# istioctl install --set profile=demo
# kubectl get pods -n istio-system 
NAME                                    READY   STATUS    RESTARTS   AGE
grafana-75745787f9-jb79g               1/1     Running   0          2d8h
istio-egressgateway-78b89c9f79-f7g58    1/1     Running   0          2d2h
istio-ingressgateway-845967d5c6-4r7dm   1/1     Running   0          2d2h
istio-tracing-7fc897dbb8-gsgfq          1/1     Running   0          2d2h
istiod-b56f454c6-9rd5f                  1/1     Running   0          55m
kiali-5645f98f9-5jkjf                   1/1     Running   0          2d1h
prometheus-7778b9d84-ncb5r              2/2     Running   0          2d2h
# kubectl get svc -n istio-system
NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                                                                                                      AGE
istio-egressgateway         ClusterIP   10.104.251.176   <none>        80/TCP,443/TCP,15443/TCP                                                                                                     71d
istio-ingressgateway        NodePort    10.99.33.183     <none>        15020:41020/TCP,80:48035/TCP,443:41862/TCP,15029:44646/TCP,15030:35600/TCP,15031:49406/TCP,15032:41959/TCP,15443:49277/TCP   71d
istio-pilot                 ClusterIP   10.111.202.110   <none>        15010/TCP,15011/TCP,15012/TCP,8080/TCP,15014/TCP,443/TCP                                                                     71d
istiod                      ClusterIP   10.96.68.5       <none>        15012/TCP,443/TCP                                                                                                            71d
jaeger-agent                ClusterIP   None             <none>        5775/UDP,6831/UDP,6832/UDP                                                                                                   71d
jaeger-collector            ClusterIP   10.106.32.219    <none>        14267/TCP,14268/TCP,14250/TCP                                                                                                71d
jaeger-collector-headless   ClusterIP   None             <none>        14250/TCP                                                                                                                    71d
jaeger-query                ClusterIP   10.96.35.176     <none>        16686/TCP                                                                                                                    71d
kiali                       ClusterIP   10.101.196.222   <none>        20001/TCP                                                                                                                    71d
prometheus                  ClusterIP   10.98.252.96     <none>        9090/TCP                                                                                                                     71d
tracing                     ClusterIP   10.101.199.222   <none>        80/TCP                                                                                                                       71d
zipkin                      ClusterIP   10.110.255.236   <none>        9411/TCP                                                                                                                     71d


卸载:


istioctl manifest generate --set profile=demo | kubectl delete -f -


4 应用演示(以bookinfo项目为例)


4.1 Sidercar 注入


# 手动注入
kubectl apply -f <(istioctl kube-inject -f xxx.yaml)
或者
istioctl kube-inject -f xxx.yaml|kubectl apply -f -
# 自动注入
kubectl label namespace xxx istio-injection=enabled
#项目空间中所有应用进行重启
#需要注意,有状态部署的应用需要手动注入,比如Apollo配置中心的server端


4.2 服务网关:Gateway


这里需要使用istio自带的ingressgateway来进行流量管理,因此需要把对应业务的流量从这里面写入,没有使用k8s自带的ingress,使用istio自带的ingress当作服务的边界,便于流量管理


640.png


Gateway为网格内服务提供负载均衡器,提供以下功能:


•L4-L6的负载均衡

•对外的mTLS


Gateway根据流入流出方向分为:


•IngressGateway:接收外部访问,并将流量转发到网格内的服务。

•EgressGateway:网格内服务访问外部应用。示例:


apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
 name: httpbin-gateway
spec:
 selector:
   istio: ingressgateway
 servers:
 - port:
     number: 80
     name: http
     protocol: HTTP
   hosts:
   - "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
 name: httpbin
spec:
 hosts:
 - "*"
 gateways:
 - httpbin-gateway
 http:
 - route:
   - destination:
       host: httpbin
       port:
         number: 8000


4.3 部署 bookinfo 微服务示例


本节将部署一个多语言异构化的微服务示例(Bookinfo),让大家对服务网格有一个清晰的认识。


4.3.1 Bookinfo - 在线图书商店


Bookinfo 应用分为四个单独的微服务:


• productpage :productpage 微服务会调用 details 和reviews两个微服务,用来生成页面。


• details :这个微服务包含了书籍的信息。


• reviews :这个微服务包含了书籍相关的评论。它还会调用ratings微服务。


• ratings :ratings微服务中包含了由书籍评价组成的评级信息。


reviews 微服务有 3 个版本:


• v1 版本不会调用 ratings 服务。


• v2 版本会调用ratings服务,并使用 5个黑色五角星来显示评分信息

• v3 版本会调用ratings服务,并使用5个红色五角星 来显示评分信息。一图胜千言,整体架构如下:


640.png


4.3.2 部署Bookinfo到Istio


将Bookinfo部署到k8s默认命名空间,即default。


启动边车自动注入


kubectl label namespace default istio-injection=enabled


部署到k8s


# 进入istio的工作目录
[root@master01 ~]# cd /data/istio-1.6.2/
# 使用kubectl部署到k8s
[root@master01 istio-1.6.2]# kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
service/details created
serviceaccount/bookinfo-details created
deployment.apps/details-v1 created
service/ratings created
serviceaccount/bookinfo-ratings created
deployment.apps/ratings-v1 created
service/reviews created
serviceaccount/bookinfo-reviews created
deployment.apps/reviews-v1 created
deployment.apps/reviews-v2 created
deployment.apps/reviews-v3 created
service/productpage created
serviceaccount/bookinfo-productpage created
deployment.apps/productpage-v1 created


获取访问地址


# 为Bookinfo部署入口网关
[root@master01 istio-1.6.2]# kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
gateway.networking.istio.io/bookinfo-gateway created
virtualservice.networking.istio.io/bookinfo created
# 获取网关地址
[root@master01 istio-1.6.2]# export INGRESS_HOST=$(kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}')
[root@master01 istio-1.6.2]# export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
[root@master01 istio-1.6.2]# export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
# 获取图书单品页地址
echo http://${GATEWAY_URL}/productpage


备注:生产环境一般使用istio-ingressgateway作为联网的唯一出入口。



访问


640.png



相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
1天前
|
Kubernetes 监控 Cloud Native
云原生架构下的微服务治理实践
【6月更文挑战第23天】在云计算的浪潮中,云原生架构以其弹性、可扩展性和高效性成为企业数字化转型的重要推手。本文将深入探讨如何利用云原生技术实现微服务的治理与优化,确保系统的稳定性和高可用性。我们将从微服务的基本概念出发,通过具体案例分析,揭示云原生环境下微服务治理的关键策略,并分享实践经验,旨在为读者提供一套完整的微服务治理解决方案。
|
1天前
|
运维 负载均衡 Cloud Native
云原生架构下的微服务治理实践
【6月更文挑战第24天】在云原生的浪潮下,微服务治理成为确保系统弹性、可维护性和可观测性的关键。本文通过深入分析微服务治理的核心要素与挑战,结合前沿技术和工具,提出一套实用的微服务治理策略,旨在帮助开发者和架构师构建更加稳定、高效且易于管理的分布式系统。
|
6天前
|
存储 运维 监控
云原生架构下的微服务治理实践
【6月更文挑战第19天】在数字化转型的浪潮中,云原生技术以其灵活、可扩展的特性成为企业IT架构升级的首选。本文深入探讨了在云原生架构下,如何有效实施微服务治理,包括服务发现、配置管理、服务监控和故障处理等方面的最佳实践。文章旨在为读者提供一套全面的微服务治理框架,帮助团队构建更加稳定、高效的分布式系统。
9 2
|
6天前
|
监控 Cloud Native 安全
云原生架构下的微服务治理实践
【6月更文挑战第18天】本文深入探讨了在云原生架构背景下,微服务治理的实践方法与技术选型。文章首先介绍了云原生的基本概念和微服务治理的重要性,随后详细阐述了服务发现、配置管理、弹性设计等关键技术的实施细节,并结合实际案例分析如何构建高效、稳定的微服务系统。最后,文章讨论了微服务治理面临的挑战及未来发展趋势。
|
6天前
|
机器学习/深度学习 人工智能 Java
【Sping Boot与机器学习融合:构建赋能AI的微服务应用实战】
【Sping Boot与机器学习融合:构建赋能AI的微服务应用实战】
10 1
|
17小时前
|
中间件 应用服务中间件 nginx
微服务原生部署有那么难吗?一篇文章带你搞定
微服务原生部署有那么难吗?一篇文章带你搞定
5 0
|
1天前
|
监控 Cloud Native API
云原生架构下的微服务治理实践
【6月更文挑战第23天】在数字化转型的浪潮中,云原生技术以其灵活性、可扩展性和弹性成为企业IT架构升级的首选。本文将深入探讨云原生架构下微服务治理的关键策略与实践,包括服务发现、配置管理、流量控制等核心组件的应用,旨在为读者提供一套完整的微服务治理解决方案,以支撑业务的快速迭代和高可用性需求。
|
4天前
|
存储 Prometheus 监控
云原生架构下的微服务治理之道
在数字化转型的大潮中,云原生技术以其弹性、可扩展和高度自动化的特点成为企业IT架构升级的首选。本文将深入探讨云原生架构下微服务治理的核心要素,包括服务发现、配置管理、流量控制等关键问题,旨在为读者提供一套系统的微服务治理策略。通过分析云原生环境下的微服务特点,结合具体的技术和工具,文章将为构建高效、稳定、易于管理的微服务系统提供实践指导。
|
4天前
|
监控 Cloud Native 安全
云原生架构下的微服务治理实践
本文旨在深入探讨在云原生环境下,如何有效实施微服务治理。通过分析微服务架构的核心价值与挑战,结合具体的云平台工具和最佳实践,文章详细阐述了服务发现、配置管理、弹性设计等关键治理策略。此外,文章还提供了关于如何在保障系统可观测性的同时,确保安全性和合规性的实用建议。读者将获得一套完整的微服务治理框架,以及在云原生旅程中应对复杂问题的能力提升。
|
4天前
|
Kubernetes 负载均衡 Cloud Native
云原生架构下的微服务治理实践
在云计算的浪潮中,云原生架构以其弹性、可扩展性及高效的资源利用成为企业数字化转型的首选。本文将深入探讨云原生环境下微服务的治理策略,包括服务发现、配置管理、流量控制等关键组件的应用,并通过案例分析展示如何构建健壮、灵活的微服务系统。
17 0

热门文章

最新文章