istio初步了解

news/2024/10/30 17:24:57/

istio

控制平面:

  • Pilot:管理和配置部署在特定istio服务网格中的所有sidecar代理实例,管理sidecar代理之间的路由流量规则,并配置故障恢复功能,如超时、重试、熔断。

  • Citadel:istio中负责身份认证和证书管理的核心安全组件,1.5之后的版本取消啦其独立进程,作为模块整合进istiod

    • 证书签发机构(CA),SDS服务器:负责密钥和证书管理
    • API服务器将安全配置分发给数据平面(将证书以secret的形式挂载到命名空间)
    • 客户端、服务端通过代理进行安全通信
    • Envoy代理管理遥测和审计
  • Galley:早版本只负责配置验证,1.1之后升级为整个控制平面的配置管理中心,不仅提供配置验证,还负责配置管理和分发。通过网格配置协议和其他组件进行配置交互。

数据平面:

服务发现、健康检测、流量路由、负载均衡、身份认证和授权、链路追踪

  • 手动sidecar注入:istioctl kube-inject -f ${yaml_file} | kubectl apply -f -
  • 单命名空间注入:kubectl label namespace ${namespace_name} istio-injection=enabled
  • 全局注入:kubectl edit mutatingwebhookconfiguration istio-sidecar-injector(修改namespaceSelector配置,如果某个命名空间不想自动注入,则加上istio-injection=disabled标签即可)
istio注入过程:
  • init容器isto-init:用于设置pod中的iptables端口的转发
    sidecar容器istio-proxy:运行sidecar代理,如envoy或Mosn

  • sidecar(envoy启动配置)
    查看:kubectl exec -it ${pod_name} -c istio-proxy – bash

    • 初始化配置文件:/etc/istio/proxy/envoy-rev0.json

      • node区域:包含envoy所在节点的相关信息,ID、所属集群、IP
      • admin区域:Envoy的日志路径及管理端口
      • dynamic_resources:动态资源,来自xDS服务器下发的配置
      • static_resources:静态资源,包括预制的Listener和Cluster
      • tracing:分布式调用追踪的配置
    • 全局配置:curl http:127.0.0.1:15000/config_dump

      • BootstrapConfigDump:即为上述初始化配置文件内容
      • ClusterConfigDump:集群配置,包括对应于外部服务的Outbound Cluster和自身所在节点服务的Inbound
      • ListenersConfigDump:监听器配置,包括用于堆外业务请求的Outbound Listener,处理入栈业务请求的Inbound Listener,以及作为流量处理入口的Virtual Listener
      • RoutesConfigDump:路由配置,用于HTTP请求的路由配置
      • SecretConfigDump:TLS双向认证的配置,包括自身的证书,以及用于验证请求方的CA根证书
实现流量控制的自定义资源
  • VirtualService:用于控制流量转发规则及api粒度治理功能(配置timeout和retry实现超时、重试,配置fault实现故障注入)
  • DestinationRule:定义路由的目标服务和流量策略(在此资源的Traffic Policy中设置熔断、健康检查配置)
  • ServiceEntry:注册外部服务到网格内
  • Gateway:用来控制进出网格的流量,包括入口和出口网关
  • Sidercar:用sidecar代理进行整体设置
  • WorkloadEntry/WorkloadGroup:将虚拟机接入网格。

istio的安装

  • 基于已有的K8S环境
  • 下载istio
    • 最新版本:curl -L https://istio.io/downloadIstio | sh -
    • 指定版本:curl -L https://istio.io/downloadIstio | ISTIO_version=1.6.8 TARGET_ARCH=x86_64 sh -
  • 添加环境变量:export PATH=PATH:PATH:PATH:(pwd)/istio-1.11.2/bin
  • demo配置安装istio:istioctl install --set=demo -y
  • 验证相关服务:kubectl get all -n istio-system

istio的升级

  • 金丝雀升级:
    • 安装canary版本控制平面:istioctl install --set revision=canary
    • 确定当前istiod pod情况:kubectl get pod -n istio-system
    • 确认新版的sidecar inject:kubectl get mutatingwebhookconfigurations
    • 数据平面升级:kubectl label namespace default istio-injection- istio.io/rev=canary(先去除istio-injection标签,因为此标签优先级高于canary)
    • 重新注入sidecar:kubectl rollout restart deployment -n default
    • 验证当前控制平面:istioctl proxy-config endpoints ${pod_name}.default --cluster xds-grpc -ojson | grep hostname

注意事项:
1、不建议一次性跨越多个版本升级
2、使用金丝雀升级,让新老版本istiod同时存在
3、只安装canary版本的控制平面不会对现有代理产生影响

  • 热升级:

1、确认k8s集群环境:kubectl config view
2、执行命令升级:istio upgrade(安装时使用-f,升级也要用,安装时使用–set,升级时也要用同样标志。)
3、重新注入sidecar:kubectl rollout restart deployment -n default

注意事项:
1、istioctl upgrade升级当检测到版本间配置有变化会提醒用户
2、只支持istioctl安装的istio
3、升级过程中,服务可能会发生中断,保证除citadel以外组件至少两个副本在运行

  • 相关资源之间联系
    • gateway中的spec.server.port与ingressgateway的svc的port对应
    • gateway中的spec.selector与标签选中的ingressgateway的pod联系(设置下发代理)
    • vituralservice中的spec.gateways 与对应的gateway联系
    • DestinationRule中的spec.subsets(子集)定义啦vitualservice中的spec.http.route.destination.subset
    • DestinationRule在vitualservice路由规则生效后使用,应用于真实的目标地址
    • DestinationRule中的subsets通过标签匹配pod
      virtualservice的spec.hosts和serviceEntry的spec.hosts一致,则可以实现对外部服务的访问规则设置

http://www.ppmy.cn/news/26885.html

相关文章

Netty核心原理(线程模型、核心API)与入门案例详解

Netty核心原理(线程模型、核心API)与入门案例详解 文章目录Netty核心原理(线程模型、核心API)与入门案例详解Netty 介绍原生 NIO 存在的问题概述线程模型线程模型基本介绍传统阻塞 I/O 服务模型Reactor 模型单 Reactor 单线程Nett…

Shiro框架详解

1.Shiro简介 1.1.基本功能点 Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境。Shiro 可以帮助我们完成:认证、授权、加密、会话管理、与 Web 集成、缓存等。 Authentication:身份…

数据库必知必会:TiDB(11)TiDB集群安装

数据库必知必会:TiDB(11)TiDB集群安装TiDB集群安装单机环境上安装集群下载并安装TiUP工具安装TiUP cluster组件创建拓扑文件配置SSH免密登录检查安装要求创建安装目录部署集群启动集群验证集群启动使用命令验证通过Dashboard查看通过Grafana查…

2023只会“点点点”,被裁只是时间问题,高薪的自动化测试需要掌握那些技能?

互联网已然是存量市场了,对人员规模的需求正在放缓。在存量市场里,冗余人员和低效人员会被淘汰、被外包。而优秀的人才也会一直受到招聘方的青睐。所以我们就看到了近期行业里冰火两重天的一幕,一边是大量的低端测试工程师被淘汰、求职屡屡碰…

C++的完美讲解,还不快来看看?

目录 简介: 创建C程序: Windows编译简介: Hello,C World! 简介: C融合了3中不同的编程传统:C语言代表的过程性传统、C在C语言基础上添加的类代表的面向对象语言的传统以及C模板支持的通用编程传统。一般来说,计算机语言…

人工智能基础部分13-LSTM网络:预测上证指数走势

大家好,我是微学AI,今天给大家介绍一下LSTM网络,主要运用于解决序列问题。 一、LSTM网络简单介绍 LSTM又称为:长短期记忆网络,它是一种特殊的 RNN。LSTM网络主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题…

Linux信号-进程退出状态码

当进程因收到信号被终止执行退出后,父进程可以通过wait或waitpid得到它的exit code。进程被各信号终止的退出状态码总结如下:信号编号信号名称信号描述默认处理方式Exit code1SIGHUP挂起终止12SIGINT终端中断终止23SIGQUIT终端退出终止、coredump1314SIG…

C++中的类型转换

目录 一、C语言中的类型转换 二、C中的类型转化 2.1 static_cast 2.2 const_cast2.2 const_cast 2.3reinterpret_cast 重解释转换 2.4 dynamic_cast 动态转换(!!!) 3. explicit 防止隐式类型转化 一、C语言…