服务网格是一种分布式系统的架构模式,它致力于处理微服务之间的通信,并提供多种功能和服务来帮助管理微服务的流量、性能、安全性和可观察性。以下是服务网格常见的功能和服务:
-
流量控制:服务网格可以控制微服务之间的流量,例如进行负载均衡、路由和限流,以保证每个微服务都能够正常处理请求,同时避免出现过度负载的情况。
-
服务发现:服务网格提供服务注册和服务发现的能力,使得微服务能够自动发现其他微服务的位置和接口信息,并进行调用。
-
安全性:服务网格可以提供多种安全性功能,例如身份验证、授权和数据加密,以确保微服务间的通信是安全的。
-
监控和可观察性:服务网格可以收集应用程序运行时的统计信息、日志和指标,以便进行监控和故障排除。
-
追踪和调试:服务网格可以提供强大的追踪和调试工具,例如分布式跟踪和断路器,以便更好地处理故障和故障排除。
-
可扩展性:服务网格能够动态地扩展微服务的实例数,以处理更大的请求流量。
-
负载均衡:服务网格能够根据相应的规则,将请求分发给多个微服务的实例,以实现负载均衡。
-
故障处理:服务网格能够自动将请求流量从故障的微服务实例转移到可用的实例,以最大程度地减少故障的影响。
总的来说,服务网格为微服务提供了一个更加安全、高效、可靠和可伸缩的基础架构。通过利用服务网格所提供的丰富的功能和服务,开发人员和运维人员可以更加轻松地部署、管理和维护微服务架构,从而更好地支持企业的业务需求。
解决生命周期
状态
绑定
网络
环境准备
提前部署k8s集群
root@k8s-master:/usr/local/istio# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane 20h v1.27.2
k8s-node01 Ready <none> 20h v1.27.2
k8s-node02 Ready <none> 20h v1.27.2
k8s-node03 Ready <none> 3h38m v1.27.2
部署istio
lstio部署官网地址:https://istio.io/latest/docs/setup/getting-started/
配置hosts ,可用解析GitHub
185.199.108.133 raw.githubusercontent.com
下载lstio
curl -L https://istio.io/downloadIstio | sh -
root@k8s-master:~# mv istio-1.18.0/ /usr/local/
root@k8s-master:~# cd /usr/local/
root@k8s-master:/usr/local# ln -sv istio-1.18.0/ istio
root@k8s-master:/usr/local# ln -sv /usr/local/istio/bin/istioctl /usr/local/bin/
获得 Istio 中可用配置文件的完整列表
root@k8s-master:/usr/local# istioctl profile list
Istio configuration profiles:
ambient
default 生产可用
demo 测试
empty
external
minimal
openshift
preview
remote
安装,查看pod运行正常,拉取镜像很慢
istioctl install --set profile=demo
root@k8s-master:/usr/local# kubectl get pods -n istio-system
给lstio-ingressgateway服务添加一个外部ip,添加一个存在的ip,我这里用master的eth0的第二个ip
root@k8s-master:/usr/local# kubectl get svc -n istio-system
root@k8s-master:/usr/local# kubectl edit svc -n istio-system istio-ingressgateway
externalIPs:
-192.168.1.90
启用 Istio 的自动 sidecar 代理注入功能。标签为 istio-injection=enabled 的命名空间中自动注入 sidecar 代理。此标签也可以在单个 Pod 上使用,以便在 Pod 内部使用 sidecar 代理。此外,在 Istio 中使用 VirtualServices 和 Gateways 时,需要在命名空间上启用 sidecar 注入。
root@k8s-master:/usr/local# kubectl label namespace default istio-injection=enabled
root@k8s-master:/usr/local# kubectl get ns --show-labels
部署istio各插件
root@k8s-master:/usr/local/istio/samples/addons# kubectl apply -f /usr/local/istio/samples/addons/
查看
root@k8s-master:/usr/local/istio/samples/addons# kubectl api-resources --api-group=networking.istio.io
root@k8s-master:/usr/local/istio/samples/addons# istioctl proxy-status
部署lstio项目
“Istio in Practice” 是一个基于 Istio 的微服务实践项目。它向用户展示了如何使用 Istio 构建一个云原生微服务架构,并提供了演示如何使用 Istio 的各种功能,例如流量管理、规则和转发、安全性和可观察性工具等。该项目还提供了一些教程、实例和案例研究,以帮助用户学习如何在 Istio 上构建和管理微服务。
git clone https://github.com/iKubernetes/istio-in-practise.git
root@k8s-master:~/istio-in-practise/Traffic-Management-Basics/kiali-port-80# vim kiali-gateway.yaml
root@k8s-master:~/istio-in-practise/Traffic-Management-Basics/kiali-port-80# kubectl apply -f .
获取 Istio 系统命名空间下的 Gateways 列表。Gateway 是 Istio 中的一个组件,它用于将外部流量路由到 Istio 中的服务网格。
root@k8s-master:~/istio-in-practise/Traffic-Management-Basics/kiali-port-80# kubectl get gateways -n istio-system
NAME AGE
kiali-gateway 33s
获取 Istio 系统命名空间下的 Virtual Services 列表,Virtual Services 是 Istio 的一个核心概念,它是一个网络规则,用于将传入的流量路由到目标服务的一个或多个版本。
root@k8s-master:~/istio-in-practise/Traffic-Management-Basics/kiali-port-80# kubectl get virtualservices -n istio-system
部署bookinfo
“Bookinfo” 是一个示例应用程序,用于演示 Istio 平台的各种功能。它是一个简单的电子商务 Web 应用,由四个微服务组成:productpage(产品页)、details(详情页)、reviews(评论页)和ratings(评级页)。这些微服务之间相互配合,以提供完整的电子商务网站功能。
“Bookinfo” 是 Istio 官方文档中最流行的示例之一,因为它直观地演示了 Istio 在微服务架构中的所有关键功能,包括流量管理、负载平衡、安全性和可观察性工具等。用户可以使用 “Bookinfo” 示例应用程序来了解 Istio 的核心概念,并自己体验 Isto 的各项功能。同时,Istio 还提供了一些增强版的"Bookinfo" 案例,如"Multi-Cluster"、“Canary Release” 和"Dark Launch",以帮助用户更深入地了解 Istio 的高级功能。
官网:https://istio.io/latest/docs/examples/bookinfo/
https://istio.io/latest/docs/examples/bookinfo/#define-the-service-versions
root@k8s-master:/usr/local/istio/samples# kubectl apply -f /usr/local/istio/samples/bookinfo/platform/kube/bookinfo.yaml
创建客户端
root@k8s-master:/usr/local# kubectl apply -f /usr/local/istio/samples/sleep/sleep.yaml
进入客户端容器访问productpage
root@k8s-master:/usr/local# kubectl exec -it sleep-9454cc476-sw858 – bash
部署集群外部访问bookinfo
root@k8s-master:/usr/local# kubectl apply -f /usr/local/istio/samples/bookinfo/networking/bookinfo-gateway.yaml
访问
http://192.168.1.90/productpage
lstio应用-测试路由功能
部署
官网文档: https://istio.io/latest/docs/tasks/traffic-management/request-routing/
root@k8s-master:/usr/local/istio# kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml
把所有流量 发往v1:
8s-master:/usr/local/istio# kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml
通过用户控制流量 -Route based on user identity
kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml
当我们访问reviews这个服务,jason这个用户,用v2版本进行响应,其他用户统统v1
使用jason登录是v2版本,登出回到v1版本