本教程已加入 Istio 系列:https://istio.whuanle.cn

2,部署 Istio

在本章中,将会介绍如何在 Kubernetes 中使用 Helm 部署 Istio。

Istio 的安装方式主要有两类,第一类是基于 Kubernetes 原生集群或虚拟机的安装。另一种是基于 Azure、KubeSphere 等公私有云或 Kubernetes 管理平台上的安装。而在本章中介绍的是基于 Kubernetes 的 Helm 安装。

Istio 官网关于这两类部署方式还有很多小细节,读者可根据实际需要从官方中获取部署资料。

https://istio.io/latest/zh/docs/setup/platform-setup/

https://istio.io/latest/zh/docs/setup/install/

安装 Helm

首先添加 Helm 官方仓库地址到 apt 源中。

curl https://baltocdn.com/helm/signing.asc | sudo apt-key add -
echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list

然后更新包索引。

apt-get update

通过 apt 命令安装 Helm。

apt-get install helm

验证是否安装完成。

helm version

部署 istio-base

Google 对 istio-base 的描述信息太少了,只得请教一下 ChatGPT 哥。

也就是说,只有先安装 istio-base,才能接着安装其它 Istio 组件。

在本文教程中,安装的 Istio 与官方使用 istiocli 部署的方式不同,本教程中是逐渐安装需要的组件,不会一次性安装完成所有组件。这样便于读者逐步了解不同的 Istio 组件的作用,了解其安装方式。

在 Helm 中 添加 Istio 的仓库。

helm repo add istio https://istio-release.storage.googleapis.com/charts
helm repo update

接着提前为 Istio 组件创建命名空间 istio-system

kubectl create namespace istio-system

接下来将使用 Helm 将 Istio 组件安装到 istio-system 命名空间中。

首先安装 Istio CRD:

helm install istio-base istio/base -n istio-system
root@k8smain:~# helm install istio-base istio/base -n istio-system
NAME: istio-base
LAST DEPLOYED: Tue May 2 07:19:15 2023
NAMESPACE: istio-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Istio base successfully installed! To learn more about the release, try:
$ helm status istio-base
$ helm get all istio-base

使用 helm ls 命令验证 Istio CRD 的安装情况:

root@k8smain:~# helm ls -n istio-system
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
istio-base istio-system 1 2023-05-02 07:19:15.792125237 +0000 UTC deployed base-1.17.2 1.17.2

如果 STATUS 的内容是 deployed ,说明已经正常,接下来我们进行下一步操作。

部署 istiod

Istiod( Istio Discovery) 是 Istio 服务网格的核心组件,负责控制平面功能

istiod 具备了五大功能:

  • 配置管理:负责分发和同步 Istio 配置到数据平面(Envoy 代理)。

  • 服务发现:基于 Kubernetes 的 Service 和 Endpoint 信息生成服务发现数据,这些数据用于 Envoy Proxy 的负载均衡。

  • 证书管理:为 Envoy Proxy 提供证书签发,以支持双向 TLS 身份验证。

  • 验证和转换:验证 Istio 配置资源的正确性,并将它们转换为 Envoy Proxy 可以理解的格式。

  • Envoy 代理注入:负责将 Envoy Proxy 注入到服务 Pod 中,以便进行流量拦截和路由。

简单看一下就好了,不用记。

新版本的 Istiod 将旧版本中零散的组件如 Mixer、Pilot、Citadel、Galley 等合并起来了,所以在网上看书查找资料的时候,要注意规避过旧的内容。

在 Helm 中添加 Istiod 仓库。

helm install istiod istio/istiod -n istio-system --wait

验证 Istiod 的安装情况:

root@k8smain:~# helm ls -n istio-system
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
istio-base istio-system 1 2023-05-02 07:19:15.792125237 +0000 UTC deployed base-1.17.2 1.17.2
istiod istio-system 1 2023-05-02 07:21:07.791242626 +0000 UTC failed istiod-1.17.2 1.17.2

检查 istiod 服务是否安装成功,其 Pod 是否正在运行:

root@k8smain:~# kubectl get deployments -n istio-system -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
istiod 1/1 1 1 10m discovery docker.io/istio/pilot:1.16.1 istio=pilot

部署 istio-ingressgateway

istio-ingressgateway (Istio Ingress Gateway )类似 Kubernetes 的 Ingress ,是 Istio 控制外部流量进入 Kubernetes 的入口组件,istio-ingressgateway 作为一个入口点,允许从服务网格外部访问服务网格内部的服务,起到了类似 nginx、apisix 等入口网关的作用。

Istio Ingress Gateway 的主要包括以下作用:

  • 接收集群外部的流量,并根据 Istio 的配置将请求路由到适当的内部服务(起到网关的作用)。

  • 提供负载均衡和流量控制功能,包括请求路由、重试、超时、熔断等(流量治理)。

  • 支持 TLS 配置,以便在流量进入服务网格之前进行加密(给域名配置证书)。

  • 支持双向 TLS 身份验证,以提高服务网格的安全性(服务间通讯)。

  • 提供 Metrics、Tracing 和 Logging 收集,以便更好地观察和监控流量(需要自己安装对应的组件)。

随便看看就好,不用记这些。

安装 istio-ingressgateway。

helm install istio-ingressgateway istio/gateway -n istio-system

实际上 istio-ingressgateway 是作为一个 Kubernetes Service 对外提供访问服务。

由于 Istio-ingressgateway 默认使用的是 LoadBalancer ,需要公有云平台支撑,不然会一直处于 <pending>,因此我们需要修改 Service ,将 istio-ingressway 的网络类型从 LoadBalancer 改成 NodePort,以便直接通过服务器的 IP 访问。

   kubectl edit svc istio-ingressgateway -n istio-system

找到 type: LoadBalancer ,修改为 type: NodePort

因为 LoadBalancer 包含了 NodePort,其实不修改也行。

istio-ingressgateway 本身包含 Kubernetes Service 、Pod,通过暴露节点端口,外部可以通过节点端口将流量打入 istio-ingressgateway 的 Pod。

流量经过 Istio 分析后,流量通过负载均衡转发到其中一个 Pod。

流量进入 Istio 之后,不需要将流量转发到 Service,但是依然需要依赖 Service。 Istio 会从 Service 中获取到所有的 Pod,然后 Istio 直接将流量转发到 Pod,实现熔断、故障处理等一系列任务。

经过以上步骤,我们已经安装和了解 istio-base、istiod、istio-ingressgateway 三个 Istio 基础组件,在后面的章节中,我们将开始真正实践使用 Istio ,去解决微服务中的一些问题。

清除

如果有一天不需要 Istio 了,你可以通过当前命令清空部署的 Istio 应用。

helm delete istio-ingressgateway -n istio-system
helm delete istiod -n istio-system
helm delete istio-base -n istio-system kubectl delete namespace istio-system

Isito 入门(二):Istio 的部署的更多相关文章

  1. 微服务(入门二):netcore通过consul注册服务

    基础准备 1.创建asp.net core Web 应用程序选择Api 2.appsettings.json 配置consul服务器地址,以及本机ip和端口号信息 { "Logging&qu ...

  2. redis入门(二)

    目录 redis入门(二) 前言 持久化 RDB AOF 持久化文件加载 高可用 哨兵 流程 安装部署 配置技巧 集群 原理 集群搭建 参考文档 redis入门(二) 前言 在redis入门(一)简单 ...

  3. Istio的流量管理(实操二)(istio 系列四)

    Istio的流量管理(实操二)(istio 系列四) 涵盖官方文档Traffic Management章节中的inrgess部分. 目录 Istio的流量管理(实操二)(istio 系列四) Ingr ...

  4. Azure DevOps Server 入门实践与安装部署

    一,引言 最近一段时间,公司希望在自己的服务器上安装本地版的 Azure DevOps Service(Azure DevOps Server),用于项目内的测试,学习.本着学习的目的,我也就开始学习 ...

  5. 【原创】NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示

    前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty ...

  6. 单点登录CAS使用记(二):部署CAS服务器以及客户端

    CAS-Server下载地址:https://www.apereo.org/projects/cas/download-cas CAS-Client下载地址:http://developer.jasi ...

  7. Swift语法基础入门二(数组, 字典, 字符串)

    Swift语法基础入门二(数组, 字典, 字符串) 数组(有序数据的集) *格式 : [] / Int / Array() let 不可变数组 var 可变数组 注意: 不需要改变集合的时候创建不可变 ...

  8. Thinkphp入门 二 —空操作、空模块、模块分组、前置操作、后置操作、跨模块调用(46)

    原文:Thinkphp入门 二 -空操作.空模块.模块分组.前置操作.后置操作.跨模块调用(46) [空操作处理] 看下列图: 实际情况:我们的User控制器没有hello()这个方法 一个对象去访问 ...

  9. DevExpress XtraReports 入门二 创建 data-aware(数据感知) 报表

    原文:DevExpress XtraReports 入门二 创建 data-aware(数据感知) 报表 本文只是为了帮助初次接触或是需要DevExpress XtraReports报表的人群使用的, ...

  10. css入门二-常用样式

    css入门二-常用样式总结 基本标签样式 背景色background-color 高度height; 宽度width; 边框对齐以及详细设定举例 width/*宽度*/: 80%; height/*高 ...

随机推荐

  1. ToneGenerator Init failed Crash 崩溃

    需求需要在扫码时产生一个短促的提示音, 搜了下像这样实现.测试时发现多次扫码后,会触发程序崩溃问题. 异常如下 java.lang.RuntimeException: Init failed at a ...

  2. vue3中mixins的使用

    vue3-mixins 在开发的过程中我们会遇见相同或者相似的逻辑代码. 可以通过vue的 mixin 功能抽离公共的业务逻辑, 然后通过impor再组件中引入.通过mixins注册进来. 这样我们就 ...

  3. minIO系列文章01---MinIO 简介

    MinIO.jpeg MinIO 官网 MinIO 官方GitHub MinIO 官方文档 1.什么是对象存储? 关于对象存储,我们可以看下 阿里云OSS 的解释. 对象存储服务OSS(Object ...

  4. 从零开始配置vim(20)——模糊查询

    在讲解vim的基础功能的时候,介绍过了vim的各种查询技巧,在同一个文件中进行搜索的话,那些技巧很有用.在多个文件中我们介绍了使用vim自带的 :grep命令进行搜索,使用quickfix 列表进行跳 ...

  5. TienChin 渠道管理-渠道搜索

    ChannelController @PreAuthorize("hasPermission('tienchin:channel:list')") @GetMapping(&quo ...

  6. 数据挖掘[一]---汽车车交易价格预测(测评指标;EDA)

    题目出自阿里天池赛题链接:零基础入门数据挖掘 - 二手车交易价格预测-天池大赛-阿里云天池 相关文章: 特征工程详解及实战项目[参考] 数据挖掘---汽车车交易价格预测[一](测评指标:EDA) 数据 ...

  7. 【6】opencv采用映射技术实现鱼眼镜头校正和鱼眼镜头还原全景图。

    相关文章: [1]windows下安装OpenCV(4.3)+VS2017安装+opencv_contrib4.3.0配置 [2]Visual Studio 2017同时配置OpenCV2.4 以及O ...

  8. C/C++ 搜索缝隙并插入ShellCode

    将ShellCode放入变量中,然后修改插入可执行文件名称,运行后即可将shellCode插入到EXE中,并设置好装载地址,程序运行后会先上线,然后在执行原始的代码,在使用metaspoit生成she ...

  9. SpringSecurity使用步骤

    一.导入jar包(使用maven构建项目导入其坐标) <dependency> <groupId>org.springframework.security</groupI ...

  10. [Kafka]Kafka学习 -- 初识Kafka

    Kafka学习 -- 初识Kafka 参考资料:稀土掘金<图解Kafka之实战指南>https://juejin.cn/book/6844733793220165639 Kafka是一个多 ...