kubernetes(二十二) 服务网格化istio入门

网友投稿 261 2022-10-27

kubernetes(二十二) 服务网格化istio入门

服务网格化

ServiceMesh

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

总结 治理服务的能力 应用无感知 服务通信的基础设施层 解耦应用程序的重试/超时,监控,追踪和服务发现

istio 概述

Isito是Service Mesh的产品化落地,是目前最受欢迎的服务网格,功能丰富、成熟度高。Linkerd是世界上第一个服务网格类的产品。

官方站点: https://istio.io/

主要功能 连接 流量控制 负载均衡 灰度发布 安全 认证 鉴权 控制 限流 ACL 观察 监控 调用链

istio 架构与组件

Istio 有 4 个配置资源,落地所有流量管理需求: VirtualService:实现服务请求路由规则的功能。 DestinationRule:实现目标服务的负载均衡、服务发现、故障处理和故障注入的功能。 Gateway:让服务网格内的服务,可以被全世界看到。 ServiceEntry :让服务网格内的服务,可以看到外面的世界

在kubernetes集群部署istio

$ wget https://github.com/istio/istio/releases/download/1.4.2/istio-1.4.2-linux.tar.gz $ tar zxvf istio-1.4.2-linux.tar.gz $ cd istio-1.4.2 $ mv bin/istioctl /usr/bin $ istioctl manifest apply --set profile=demo $ kubectl get pods -n istio-system $ kubectl get svc -n istio-system

卸载:

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

SideCar注入

作用: 将应用接入sidecar管理

部署web实例

$ cd istio-1.4.2/samples/httpbin $ kubectl apply -f #nodeport服务,默认是在default ns $ kubectl get pod,svc

访问测试:apply -f <(istioctl kube-inject -f httpbin-nodeport.yaml) 或者 istioctl kube-inject -f |kubectl apply -f - $ kubectl get pod NAME READY STATUS RESTARTS AGE 1/1 Running 0 8m3s 0/2 PodInitializing 0 11s

自动注入

$ kubectl label namespace default istio-injection=enabled $ kubectl apply -f httpbin-gateway.yaml $ kubectl get gateway NAME AGE 3m21s

$ kubectl get svc -n istio-system istio-ingressgateway LoadBalancer 10.0.0.114 15020:32361/TCP,80:31929/TCP,443:31088/TCP,15029:31493/TCP,15030:32677/TCP,15031:30048/TCP,15032:32207/TCP,15443:30034/TCP 75m

访问K8SNODEIP:31929 即可访问,此线路是走的SideCar的gateway

服务网关: gateway

Gateway为网格内服务提供负载均衡器,提供以下功能: • L4-L7的负载均衡 对外的mTLS Gateway根据流入流出方向分为: IngressGateway:接收外部访问,并将流量转发到网格内的服务。 EgressGateway:网格内服务访问外部应用。

部署 bookinfo 微服务示例

部署bookinfo实例

kubectl create ns bookinfo kubectl label namespace bookinfo istio-injection=enabled #sidecar自动注入开启 cd istio-1.4.2/samples/bookinfo/ kubectl apply -f platform/kube/bookinfo.yaml -n bookinfo kubectl apply -f networking/bookinfo-gateway.yaml -n bookinfo kubectl get svc -n istio-system| grep ingress #查到80对应31929的端口暴露

访问找k8s其中的一台节点,安装nginx(192.168.56.12)

配置nginx LB

$ vim /etc/nginx/nginx.conf upstream ingressgateway { server 192.168.56.11:31929; server 192.168.56.12:31929; server 192.168.56.13:31929; } server { listen 80 default_server; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { proxy_pass http://ingressgateway; proxy_set_header Host $host; proxy_ 1.1; } ..... $ nginx -t $ nginx

配置域名解析测试

$ vim /etc/hosts 192.168.56.12 bookinfo.cropy.cn

bookinfo gateway 配置(其实也就是要配置hosts与LB保持一致)

$ cd ~/istio-1.4.2/samples/bookinfo $ vim networking/bookinfo-gateway.yaml apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: bookinfo-gateway spec: selector: istio: ingressgateway # use istio default controller servers: - port: number: 80 name: http protocol: HTTP hosts: - "bookinfo.cropy.cn" --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: bookinfo spec: hosts: - "bookinfo.cropy.cn" gateways: 。。。。 $ kubectl apply -f networking/bookinfo-gateway.yaml -n bookinfo

Istio 实现灰度发布

主流发布方案 蓝绿发布 滚动发布 灰度发布 A/B Test

蓝绿发布

项目逻辑上分为AB组,在项目升级时,首先把A组从负载均衡中摘除,进行新版本的部署。B组仍然继续提供服务。A组升级完成上线,B组从负载均衡中摘除。

特点: 策略简单 升级/回滚速度快 用户无感知,平滑过渡 缺点: 需要两倍以上服务器资源 短时间内浪费一定资源成本 有问题影响范围大

滚动发布

每次只升级一个或多个服务,升级完成后加入生产环境,不断执行这个过程,直到集群中的全部旧版升级新版本。Kubernetes的默认发布策略。

特点: 用户无感知,平滑过渡 缺点: 部署周期长 发布策略复杂 不易回滚 有影响范围较大

灰度发布(金丝雀发布)

只升级部分服务,即让一部分用户继续用老版本,一 部分用户开始用新版本,如果用户对新版本没有什么 意见,那么逐步扩大范围,把所有用户都迁移到新版 本上面来。

特点: 保证系统整体稳定性 用户无感知,平滑过渡 缺点: 自动化要求高

A/B Test

灰度发布的一种方式,主要对特定用户采样后,对收 集到的反馈数据做相关对比,然后根据比对结果作出 决策。用来测试应用功能表现的方法, 侧重应用的可用性,受欢迎程度等,最后决定是否升级。

基于权重的路由

流量全部发送到reviews v1版本(不带五角星) 将90%的流量发送到reviews v1版本,另外10%的流量发送到reviews v2版本(5个黑色五星),最后完全切换到v2版本 将50%的流量发送到v2版本,另外50%的流量发送到v3版本(5个红色五角星)

$ cd ~/istio-1.4.2/samples/bookinfo $ kubectl apply -f networking/virtual-service-all-v1.yaml -n bookinfo $ kubectl apply -f networking/destination-rule-all.yaml -n bookinfo $ kubectl apply -f networking/virtual-service-reviews-90-10.yaml -n bookinfo $ kubectl apply -f networking/virtual-service-reviews-v2-v3.yaml -n bookinfo

基于请求内容的路由(A/B Test)

任务:

将特定用户的请求发送到reviews v2版本(5个黑色五 角星),其他用户则不受影响(v3)

$ kubectl apply -f networking/virtual-service-reviews-jason-v2-v3.yaml

可视化监控:监控指标、网格可视化、调用链跟踪

监控指标(Grafana) 网格可视化(Kiali) 调用链跟踪(Jaeger)

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:基于FPGA的1553B总线接口设计与验证
下一篇:k8s 实验 helm 创建自己的包
相关文章

 发表评论

暂时没有评论,来抢沙发吧~