侧边栏壁纸
博主头像
DevOpsHub博主等级

生活百般滋味,人生需要笑对

  • 累计撰写 22 篇文章
  • 累计创建 2 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

istio学习笔记

admin
2023-12-30 / 0 评论 / 0 点赞 / 52 阅读 / 5800 字
温馨提示:
本文最后更新于 2024-01-05,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

istio学习笔记

什么是istio

  • Istio是一个开源的服务网格,透明的接入到分布式服务中。它也是一个平台,集成任何日志、遥测和策略系统的 API 接口。
  • Istio 成功高效地运行分布式微服务架构,并提供保护、连接和监控微服务的统一方法。
  • Istio 有助于降低 DevOps 压力、开发团队的压力。

为什么使用istio

Istio 提供一种简单的方式来为已部署的服务建立网络,该网络具有负载均衡、服务间认证、监控等功能,只需要对服务的代码进行一点或不需要做任何改动。想要让服务支持 Istio,只需要在您的环境中部署一个特殊的 sidecar 代理,使用 Istio 控制平面功能配置和管理代理,拦截微服务之间的所有网络通信:

  • HTTP、gRPC、WebSocket 和 TCP 流量的自动负载均衡。
  • 通过丰富的路由规则、重试、故障转移和故障注入,可以对流量行为进行细粒度控制。
  • 可插入的策略层和配置 API,支持访问控制、速率限制和配额。
  • 对出入集群入口和出口中所有流量的自动度量指标、日志记录和追踪。
  • 通过强大的基于身份的验证和授权,在集群中实现安全的服务间通信。

Istio 旨在实现可扩展性,满足各种部署需求。

istio安装

先决条件

开始之前,检查下列先决条件:

  1. 下载 Istio 发行版
  2. 执行必要的平台安装
  3. 检查 Pod 和服务的要求

使用默认配置安装istio

最简单的选择是用下面命令安装 Istio 默认配置档

istioctl install

给命名空间添加标签,指示 Istio 在部署应用的时候,自动注入 Envoy 边车代理:

kubectl label namespace default istio-injection=enabled

开放外部访问地址

kubectl edit svc istio-ingressgateway -n istio-system

新增如下内容

....................................................
....................................................
spec:
  allocateLoadBalancerNodePorts: true
  clusterIP: 10.233.50.216
  clusterIPs:
  - 10.233.50.216
  externalIPs:  # 新增
  - 192.168.3.204  # 新增
  externalTrafficPolicy: Cluster
  internalTrafficPolicy: Cluster
  ipFamilies:
...................................................
...................................................

补充

使用如下的命令分析您当前的集群:
所有namespace

istioctl analyze --all-namespace

具体的一个namespace

istioctl analyze --namespace default

例如,如果您忘记启用 Istio 注入(一个非常常见的问题),则会收到以下警告:

Info [IST0102] (Namespace default) The namespace is not enabled for Istio injection. Run 'kubectl label namespace default istio-injection=enabled' to enable it, or 'kubectl label namespace default istio-injection=disabled' to explicitly mark it as not needing injection.

查看注入sidecar的namespace

kubectl get namespace -L istio-injection
NAME                   STATUS   AGE    ISTIO-INJECTION
app-dev                Active   12h    enabled
default                Active   19d    enabled
ingress-nginx          Active   12h    
istio-system           Active   5d9h   
kube-node-lease        Active   19d    
kube-public            Active   19d    
kube-system            Active   19d    
kubernetes-dashboard   Active   19d

istio架构

Istio 服务网格从逻辑上分为数据平面控制平面
数据平面 由一组智能代理(Envoy)组成, 被部署为 Sidecar。这些代理负责协调和控制微服务之间的所有网络通信。 它们还收集和报告所有网格流量的遥测数据。

控制平面 管理并配置代理来进行流量路由。

下图展示了组成每个平面的不同组件:

arch.svg组件

以下各节概述了 Istio 的每个核心组件。

Envoy

Istio 使用 Envoy 代理的扩展版本。Envoy 是用 C++ 开发的高性能代理,用于协调服务网格中所有服务的入站和出站流量。Envoy 代理是唯一与数据平面流量交互的 Istio 组件。

Envoy 代理被部署为服务的 Sidecar,在逻辑上为服务增加了 Envoy 的许多内置特性,例如:

  • 动态服务发现
  • 负载均衡
  • TLS 终端
  • HTTP/2 与 gRPC 代理
  • 熔断器
  • 健康检查
  • 基于百分比流量分割的分阶段发布
  • 故障注入
  • 丰富的指标
    这种 Sidecar 部署允许 Istio 可以执行策略决策,并提取丰富的遥测数据, 接着将这些数据发送到监视系统以提供有关整个网格行为的信息。

Sidecar 代理模型还允许您向现有的部署添加 Istio 功能,而不需要重新设计架构或重写代码。

由 Envoy 代理启用的一些 Istio 的功能和任务包括:

流量控制功能:通过丰富的 HTTP、gRPC、WebSocket 和 TCP 流量路由规则来执行细粒度的流量控制。
网络弹性特性:重试设置、故障转移、熔断器和故障注入。
安全性和身份认证特性:执行安全性策略,并强制实行通过配置 API 定义的访问控制和速率限制。
基于 WebAssembly 的可插拔扩展模型,允许通过自定义策略执行和生成网格流量的遥测。

Istiod

Istiod 提供服务发现、配置和证书管理。

Istiod 将控制流量行为的高级路由规则转换为 Envoy 特定的配置, 并在运行时将其传播给 Sidecar。Pilot 提取了特定平台的服务发现机制, 并将其综合为一种标准格式,任何符合 Envoy API 的 Sidecar 都可以使用。

Istio 可以支持发现多种环境,如 Kubernetes 或 VM。

您可以使用 Istio 流量管理 API 让 Istiod 重新构造 Envoy 的配置,以便对服务网格中的流量进行更精细的控制。

Istiod 安全通过内置的身份和凭证管理, 实现了强大的服务对服务和终端用户认证。您可以使用 Istio 来升级服务网格中未加密的流量。 使用 Istio,运营商可以基于服务身份而不是相对不稳定的第 3 层或第 4 层网络标识符来执行策略。 此外,您可以使用 Istio 的授权功能控制谁可以访问您的服务。

Istiod 充当证书授权(CA),并生成证书以允许在数据平面中进行安全的 mTLS 通信。

评论区