一、Service Mesh介绍与istio安装

本文详细介绍了服务网格的概念,重点讲解了Istio作为服务网格的代表,包括其功能、架构和组件。Istio提供连接、安全、控制和观察四大能力,用于管理微服务间的通信。在Kubernetes环境中部署Istio,涉及到如Sidecar、Mixer、Pilot等关键组件。文中还提到了部署过程中可能遇到的问题及解决方案,例如DNS解析问题。
摘要由CSDN通过智能技术生成

Service Mesh

Service Mesh 的中文译为 “服务网格” ,是一 个用于处理服务和服务之间通信的基础设施层,它 负责为构建复杂的云原生应用传递可靠的网络请求, 并为服务通信实现了微服务所需的基本组件功能, 例如服务发现、负载均衡、监控、流量管理、访问 控制等。在实践中,服务网格通常实现为一组和应 用程序部署在一起的轻量级的网络代理,但对应用 程序来说是透明的。
所以说服务网格是一个概念 而不是一个产品,代表产品有Istio、Envoy、Linkerd等
Isito是Service Mesh的产品化落地,是目前最受欢迎的服务网格,功能丰富、成熟度高。 Linkerd是世界上第一个服务网格类的产品。
Service Mesh 部署网络结构图在这里插入图片描述

如果使用服务网格,那么将遵循以下的通讯逻辑:

  • 微服务之间调用不会直接通讯,而是通过代理程序。

  • 服务网格内置服务发现、熔断、超时等相关网络控制高级功能。

  • 服务网格与编程语言无关。

  • 服务之间的通信局部故障可以由服务网格处理。

服务网格的特点

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

从上图可以得知,所有应用的流量都是需要通过Sidecar,然后经过Sidecar进行转发流量。

istio 概述

istio的功能可以总结为以下几点
• 连接(Connect):流量管理、负载均衡、灰度发布
• 安全(Secure):认证、鉴权
• 控制(Control):限流、ACL
• 观察(Observe):监控、调用链
官网:https://istio.io/

Isito 架构与组件

数据平面:由一组代理组成,这些代理微服务所 有网络通信,并接收和实施来自Mixer的策略。 • Proxy:负责高效转发与策略实现(envoy).
控制平面:管理和配置代理来路由流量。此外, 通过mixer实施策略与收集来自边车代理的数据。

  • Mixer:适配组件,数据平面与控制平面通 过它交互,为Proxy提供策略和数据上报。
  • Pilot:策略配置组件,为Proxy提供提供服务发现、流量管理以及弹性功能,比如:A/B测试、金丝雀发布、超时、重试、熔断等。
  • Citadel:Citadel是Istio的核心安全组件,负责服务的密钥和数字证书管理,用于提供自动生成、分发、轮换及撤销密钥和数据证书的功能。
  • Galley:Galley负责向Istio的其它组件提供支撑功能,它用于校验进入网络配置信息的格式内容正确性,并将这些配置信息提供给Pilot。

Istio 基本概念

Istio 有 4 个配置资源,落地所有流量管理需求:

  • VirtualService:实现服务请求路由规则的功能。(VirtualService类似于nginx的虚拟主机server)
  • DestinationRule:实现目标服务的负载均衡、服务发现、故障处理和故障注入的功能。
  • Gateway:让服务网格内的服务,可以被全世界看到。
  • ServiceEntry :让服务网格内的服务,可以看到外面的世界。

在 Kubernetes 部署 Istio

目前最新版本为1.9.1

wget https://github.com/istio/istio/releases/download/1.9.1/istio-1.9.1-linux-amd64.tar.gz

我去, 安装的时候发现1.9.1的版本最低支持k8s的版本都是1.17,只能重新下载低版本,我们选择1.4.2版本

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
#部署istiod的命令
istioctl manifest apply --set profile=demo

查看istio相关的资源

[root@master ~]# kubectl get pod -n istio-system
NAME                                      READY   STATUS    RESTARTS   AGE
grafana-6b65874977-zjg5j                  1/1     Running   3          18h
istio-citadel-86dcf4c6b-bx5rr             1/1     Running   3          18h
istio-egressgateway-68f754ccdd-4qlz6      1/1     Running   2          6h25m
istio-galley-5fc6d6c45b-56kl7             1/1     Running   3          18h
istio-ingressgateway-6d759478d8-r9f24     1/1     Running   2          6h25m
istio-pilot-5c4995d687-qpvnc              1/1     Running   2          6h25m
istio-policy-57b99968f-6hg7t              1/1     Running   30         6h15m
istio-sidecar-injector-746f7c7bbb-xnn87   1/1     Running   3          18h
istio-telemetry-854d8556d5-scdjf          1/1     Running   31         6h15m
istio-tracing-c66d67cd9-m2mth             1/1     Running   5          17h
kiali-8559969566-flrg2                    1/1     Running   3          17h
prometheus-66c5887c86-x8ghf               1/1     Running   3          18h

pod解释:
grafana:
提供istio的一些监控指标
istio-citadel:

  • 用于安全相关功能,为服务和用户提供认证和鉴权、管理凭据和 RBAC,挂掉则会导致认证,安全相关功能失效
  • –set security.enabled=false 如果要禁能则通过设置security,它对应的镜像就是citadel
  • 如果前期不使用安全相关的功能可以禁能,不会影响整体使用
  • 如果部署了 istio-citadel,则 Envoy 每 15 分钟会进行一次重新启动来刷新证书

istio-egressgateway

  • 出口网关,可选的,根据自身业务形态决定

istio-ingressgateway:

  • 入口网关,必须的
  • 对外流量入口,所有从外部访问集群内部的服务都需要经过入口网关ingressgateway。需要多实例、防止单点;同时要保证多实例进行负载均衡;
  • 如果异常则导致整个流量入口异常
  • 承担相对较大的并发和高峰流量

istio-galley:

  • istio API配置的校验、各种配置之间统筹,为 Istio 提供配置管理服务,包含有Kubernetes CRD资源的listener,通过用Kubernetes的Webhook机制对Pilot 和 Mixer 的配置进行验证
  • 这个服务挂掉会导致配置校验异常,是一个必须的组件, 比如创建gateway、virtualService等资源,就会需要校验,如果不想校验,可以通过设置helm 的选项参数–set global.configValidation=false来关闭校验

istio-pilot:

  • 控制sidecar中envoy的启动与参数配置
  • 如果异常则envoy无法正常启动,应用服务的流量无法进行拦截和代理,所有配置、流量规则、策略无法生效
  • 必要组件

istio-policy:

  • Mixer相关组件,用于与envoy交互,check需要上报的数据,确定缓存内容,挂掉会影响check相关功能,除非设置为不进行check
  • 不能直接关闭或者说禁能这个策略组件,因为默认请求都是要去policy pods进行check检测的,如果失败则会导致请求失败,通过安装参数–set mixer.enabled=false禁用

istio-sidecar-injector:

  • sidecar自动注入功能组件
  • 对应的设置是选项是sidecarInjectorWebhook.enabled,sidecarInjectorWebhook.image对应就是sidecar_injector
  • 这个只是对自动注入Sidecar有影响,如果是通过手动注入kubectl kube-inject命令参数执行的没有影响,不管使能这个前还是后,都对手动注入Sidecar没有影响
  • 如果异常则会导致sidecar无法自动注入;如果注入策略设置为必须注入(policy为Fail),则会导致新创建的应用服务(Pod)无法启动,因为无法注入 Sidecar

istio-telemetry:

  • 9093端口是Mixer组件本身的prometheus暴露的端口,这个是istio-policy 组件提供的
  • 42422是所有 Mixer 生成的网格指标,这个是istio-telemetry 组件提供的
  • Mixer相关组件的Service,用于采集envoy上报的遥测数据
  • 高并发下会有性能影响,会间接导致整体性能下降,业界针对这个有较多探讨;可以禁能
    为提高性能,需要设置为多实例,防止单点;均衡流量
  • 暴露9091、9093、15004、42422端口
  • 通过安装参数–set mixer.enabled=false禁能
  • 如果异常,则通过Mixer进行上报的一些监控采集数据无法采集到,并不影响整体流程

istio-tracing:
主要用于链路追踪

kiali:

  • Kiali 为网格管理和可观察性提供了良好的用户体验的可视化工具;
  • Kiali 为我们提供了查看相关服务与配置提供了统一化的可视化界面,并且能在其中展示他们的关联;同时他还提供了界面让我们可以很方便的验证 istio 配置与错误提示;

prometheus:

  • 暴露9090端口
  • prometheus组件的Service
  • 如果采用外部的prometheus则不用
  • 其他组件如jaeger、grafana则同样采用外部系统,因此可以不用和istio一起安装

如果出现类似pod没正常起来

istio-egressgateway-68f754ccdd-4qlz6      0/1     Running   2          61m
istio-ingressgateway-6d759478d8-r9f24     0/1     Running   2          61m

我们可以查看其日志,可以发现错误
lookup istio-galley.istio-system on 10.10.10.2:53: read udp 172.17.134.19:56…
其实这是我们istio pod 访问不到svc错误,请检查K8S 上dns服务是否正常,我们去测试一下

kubectl exec -ti centoschao -- nslookup kube-dns.kube-system

结果还真有问题,不能正确的解析到地址,我的解决方案是再kubelet中强行加了一行配置指定dns的svc地址。

--cluster-dns=10.0.0.2 \

重启kubelet问题解决。到此istio安装完毕。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值