Isito 入门(二):Istio 的部署
本教程已加入 Istio 系列:https://istio.whuanle.cn
2,部署 Istio
在本章中,将会介绍如何在 Kubernetes 中使用 Helm 部署 Istio。
Istio 的安装方式主要有两类,第一类是基于 Kubernetes 原生集群或虚拟机的安装。另一种是基于 Azure、KubeSphere 等公私有云或 Kubernetes 管理平台上的安装。而在本章中介绍的是基于 Kubernetes 的 Helm 安装。
Istio 官网关于这两类部署方式还有很多小细节,读者可根据实际需要从官方中获取部署资料。
安装 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 的部署的更多相关文章
- 微服务(入门二):netcore通过consul注册服务
基础准备 1.创建asp.net core Web 应用程序选择Api 2.appsettings.json 配置consul服务器地址,以及本机ip和端口号信息 { "Logging&qu ...
- redis入门(二)
目录 redis入门(二) 前言 持久化 RDB AOF 持久化文件加载 高可用 哨兵 流程 安装部署 配置技巧 集群 原理 集群搭建 参考文档 redis入门(二) 前言 在redis入门(一)简单 ...
- Istio的流量管理(实操二)(istio 系列四)
Istio的流量管理(实操二)(istio 系列四) 涵盖官方文档Traffic Management章节中的inrgess部分. 目录 Istio的流量管理(实操二)(istio 系列四) Ingr ...
- Azure DevOps Server 入门实践与安装部署
一,引言 最近一段时间,公司希望在自己的服务器上安装本地版的 Azure DevOps Service(Azure DevOps Server),用于项目内的测试,学习.本着学习的目的,我也就开始学习 ...
- 【原创】NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示
前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty ...
- 单点登录CAS使用记(二):部署CAS服务器以及客户端
CAS-Server下载地址:https://www.apereo.org/projects/cas/download-cas CAS-Client下载地址:http://developer.jasi ...
- Swift语法基础入门二(数组, 字典, 字符串)
Swift语法基础入门二(数组, 字典, 字符串) 数组(有序数据的集) *格式 : [] / Int / Array() let 不可变数组 var 可变数组 注意: 不需要改变集合的时候创建不可变 ...
- Thinkphp入门 二 —空操作、空模块、模块分组、前置操作、后置操作、跨模块调用(46)
原文:Thinkphp入门 二 -空操作.空模块.模块分组.前置操作.后置操作.跨模块调用(46) [空操作处理] 看下列图: 实际情况:我们的User控制器没有hello()这个方法 一个对象去访问 ...
- DevExpress XtraReports 入门二 创建 data-aware(数据感知) 报表
原文:DevExpress XtraReports 入门二 创建 data-aware(数据感知) 报表 本文只是为了帮助初次接触或是需要DevExpress XtraReports报表的人群使用的, ...
- css入门二-常用样式
css入门二-常用样式总结 基本标签样式 背景色background-color 高度height; 宽度width; 边框对齐以及详细设定举例 width/*宽度*/: 80%; height/*高 ...
随机推荐
- ToneGenerator Init failed Crash 崩溃
需求需要在扫码时产生一个短促的提示音, 搜了下像这样实现.测试时发现多次扫码后,会触发程序崩溃问题. 异常如下 java.lang.RuntimeException: Init failed at a ...
- vue3中mixins的使用
vue3-mixins 在开发的过程中我们会遇见相同或者相似的逻辑代码. 可以通过vue的 mixin 功能抽离公共的业务逻辑, 然后通过impor再组件中引入.通过mixins注册进来. 这样我们就 ...
- minIO系列文章01---MinIO 简介
MinIO.jpeg MinIO 官网 MinIO 官方GitHub MinIO 官方文档 1.什么是对象存储? 关于对象存储,我们可以看下 阿里云OSS 的解释. 对象存储服务OSS(Object ...
- 从零开始配置vim(20)——模糊查询
在讲解vim的基础功能的时候,介绍过了vim的各种查询技巧,在同一个文件中进行搜索的话,那些技巧很有用.在多个文件中我们介绍了使用vim自带的 :grep命令进行搜索,使用quickfix 列表进行跳 ...
- TienChin 渠道管理-渠道搜索
ChannelController @PreAuthorize("hasPermission('tienchin:channel:list')") @GetMapping(&quo ...
- 数据挖掘[一]---汽车车交易价格预测(测评指标;EDA)
题目出自阿里天池赛题链接:零基础入门数据挖掘 - 二手车交易价格预测-天池大赛-阿里云天池 相关文章: 特征工程详解及实战项目[参考] 数据挖掘---汽车车交易价格预测[一](测评指标:EDA) 数据 ...
- 【6】opencv采用映射技术实现鱼眼镜头校正和鱼眼镜头还原全景图。
相关文章: [1]windows下安装OpenCV(4.3)+VS2017安装+opencv_contrib4.3.0配置 [2]Visual Studio 2017同时配置OpenCV2.4 以及O ...
- C/C++ 搜索缝隙并插入ShellCode
将ShellCode放入变量中,然后修改插入可执行文件名称,运行后即可将shellCode插入到EXE中,并设置好装载地址,程序运行后会先上线,然后在执行原始的代码,在使用metaspoit生成she ...
- SpringSecurity使用步骤
一.导入jar包(使用maven构建项目导入其坐标) <dependency> <groupId>org.springframework.security</groupI ...
- [Kafka]Kafka学习 -- 初识Kafka
Kafka学习 -- 初识Kafka 参考资料:稀土掘金<图解Kafka之实战指南>https://juejin.cn/book/6844733793220165639 Kafka是一个多 ...