文章目录
ServiceMesh介绍
扯淡环节
- 什么是服务网格?–服务间通信,可扩展性和灵活性
- 服务网格的工作原理 --Sidecars处理从服务中抽象出来的任务
- 为什么采用服务网格?–分离和管理服务间通信
颜色代表的含义 - 绿色部分:业务代码
- 蓝色部分:应用流量的入口和出口
服务网格的好处
随着微服务数量的增加,服务网格的优势变得愈加明显。然而,服务网格的发展滞后于 Kubernetes 和容器技术的发展。目前,只有少数企业在使用服务网格,因为大部分功能已经能通过中间件实现。
服务网格的主要特性
- 可靠性:通过 Sidecar 提高了服务的隔离性、透明性和动态性(例如动态路由、流量控制和故障恢复)。
- 可观测性:提供监控、追踪和日志功能,例如使用 Prometheus 和 Jaeger 等工具。
- 安全性:支持加密通信、访问控制和身份验证,但这些功能一般在内部服务中不常使用。
服务网格的优点和缺点
优点
- 简化微服务之间的通信。
- 更容易诊断通讯错误,因为错误会发生在服务网格的基础设施层上。
- 支持加密、认证和授权等安全特性。
缺点
- 增加复杂性、性能开销等
Istio解决方案
Istio架构设计图:
服务网格建立在微服务之上
安装Istio
官网:https://istio.io/latest/docs/setup/getting-started/
官网给出了4个步骤
istio_51">第一步 下载istio
脚本里的url有github的 国内有的访问不到
所以直接去github下载最新版
https://github.com/istio/istio/releases
把bin/istioctl
复制到环境里/usr/local/bin/
查看istio版本:istioctl version
目前是没有运行的
istio_60">第二步 安装istio环境
执行官网给的命令
istioctl install --set profile=demo -y
下载完成
接着给default命名空间打一个label
官方是为了区分
kubectl label namespace default istio-injection=enabled
istio_72">第三部 安装istio应用
回到下载istio的目录
执行官网给出的命令
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
创建完成之后看一下pod
等待变成Running
验证是否已经部署成功
kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
这样就是部署成功了
第四部 暴露到外部流量
接着官网的步骤做: 安装gateway
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
验证一下
下一步是把ip:port
找到 然后访问
有两种方式 minikube或其他平台
应该都是其他平台
执行:kubectl get svc istio-ingressgateway -n istio-system
这里是LoadBalancer
需要改写为node port
来访问
kubectl edit svc istio-ingressgateway -n istio-system
跳到最下面 把type: LoadBalancer
改为:type: NodePort
再看一下就是nodeport了
通过任意一个节点的ip 加上nodeport就可以访问到
ip:32184
然后发现找不到
看一下创建的gateway
vim samples/bookinfo/networking/bookinfo-gateway.yaml
找到VirtualService
官方创建的gateway是绑定了VirtualService 匹配的路径的
加上后缀/productpage
正常访问
不断刷新发现访问的可能不一样 是因为负载均衡
然后再下一步 把dashboard弄好
执行安装插件:kubectl apply -f samples/addons
等待插件的pod都启动起来
然后把kiali
暴露出来
官方给了张图 可以看到清晰的流量链路 调用情况
kiali就做这个事情
官网给了一个模拟流量的命令
其实可以不执行这个
直接疯狂刷新ip:pord/productpage
来搞流量
现在访问不到kiali 是因为kiali的svc是ClusterIP
需要改写为NodePort
kubectl edit svc kiali -n istio-system
跳到最下面 把type: LoadBalancer
改为:type: NodePort
再看一下svc 就是NodePort了 同时映射了一个端口 这边是30795
打开任意一个节点+port 访问
去看一下Graph里 筛选ns 看到流量没有联系 右上角是15s匹配一次
再拼一次手速 单身20年手速 疯狂访问ip:pord/productpage
再看一下 和官网的图就类似了
完成
补充一下gateway
和virtualservice
的原理
gateway入口
进一个gateway看一下 它是istio定义的一个资源
virtualservice是虚拟服务和这个gateway绑定在了一起
意思是 通过gateway进入之后 会给virtualservice虚拟服务一个匹配关系
virtualservice在k8s中有一个抽象的管理层
太麻烦了不说了 ok完成