服务网格Istio入门-详细记录Kubernetes安装Istio并使用
我最新最全的文章都在南瓜慢说 www.pkslow.com,文章更新也只在官网,欢迎大家来喝茶~~
1 服务网格Istio
Istio是开源的Service Mesh实现,一般用于Kubernetes集群容器中的连接、监控和保护。它的核心特性有:
- 流量管理
- 通过简单配置实现服务之间的流量;
- 简化服务级属性如熔断、超时、重试;
- 支持A/B测试、金丝雀发布等。
- 安全
- 通信层面的安全控制;
- 开发人员只需要专注于应用程序开发。
- 可观察性
- Metrics;
- Logging;
- Tracing。
- 平台支持
- Kubernetes;
- 各种云平台。

Istio的架构分为数据平台和控制平面,数据平面通过Sidecar代理工作,如下:

2 Kubernetes安装istio
2.1 创建服务器
为了避免出现镜像下载慢或无法下载的问题,我们使用阿里云香港的服务器来做示例。为了省钱,我使用的是抢占式实例,8CPU 16GB内存,大概是0.28/小时,用完即删就可以了。
CPU:8核
内存:16GB
系统:Ubuntu 20.04 64位
价格:0.28/时
分配公网IP:是
带宽计费模式:按使用流量
带宽峰值:最大
测试登陆如下:
ssh root@xx.xxx.xxx.xxx
$ free -h
total used free shared buff/cache available
Mem: 15Gi 153Mi 15Gi 2.0Mi 325Mi 15Gi
正常连接,可以开始使用了。
2.2 安装Kubernetes
我这里不打算创建一个Kubernetes集群,所以只用了一台机,如果有兴趣的可查看之间的文章《详细记录用kubeadm在Ubuntu上安装Kubernetes集群》。
这里通过minikube来启动kubernetes,我们一步一步来安装吧:
# 必要的更新
$ apt-get update -y
$ apt-get upgrade -y
# 下载kubectl命令行工具
$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# 执行权限
$ chmod a+x kubectl
$ mv ./kubectl /usr/local/bin/kubectl
# 安装Docker
$ apt-get install -y docker.io
# 检测Docker安装情况
$ docker --version
Docker version 20.10.7, build 20.10.7-0ubuntu1~20.04.1
# 下载minikube
$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
# 执行权限
$ chmod +x minikube
$ mv minikube /usr/local/bin
# 安装conntrack依赖
$ apt-get install -y conntrack
# 启动kubernetes,需要等待一小段时间,因为要下载镜像,启动kubernetes
$ minikube start --driver=none
# 检测启动成功
kubectl version
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.0", GitCommit:"c2b5237ccd9c0f1d600d3072634ca66cefdf272f", GitTreeState:"clean", BuildDate:"2021-08-04T18:03:20Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.2", GitCommit:"092fbfbf53427de67cac1e9fa54aaa09a28371d7", GitTreeState:"clean", BuildDate:"2021-06-16T12:53:14Z", GoVersion:"go1.16.5", Compiler:"gc", Platform:"linux/amd64"}
我们看到对应的Pod也起来了:

2.3 安装istio
安装完Istio后,我们就可以开始安装Istio了,过程如下:
# 下载安装包:
$ curl -L https://istio.io/downloadIstio | sh -
# 添加到Path
$ export PATH="$PATH:/root/istio-1.10.3/bin"
# 检测是否可以正常安装
$ istioctl x precheck
No issues found when checking the cluster. Istio is safe to install or upgrade!
# 执行安装
$ istioctl install
安装成功后,会出现如下界面:

查看命名空间,会多出一个istio-system:

3 使用istio
我们通过安装官方的示例来看如何使用。先要给对应的命令空间加标签,这样istio才会识别,才会注入代理:
$ kubectl label namespace default istio-injection=enabled
接着我们安装对应的示例代码:
kubectl apply -f istio-1.10.3/samples/bookinfo/platform/kube/bookinfo.yaml
可以看到所有应用都起来了,而且每个Pod是有两个Container的:

为了更好地监控我们的应用,我们来添加一些组件或插件:
$ kubectl apply -f istio-1.10.3/samples/addons
这样,我们就多了许多新的组件,如Grafana、Jaeger、Kiali、Prometheus等:

我们以Kiali以例,暴露服务出来,来看看它给我们带来了什么:
# 添加NodePort
$ kubectl expose deployment kiali --type=NodePort --name=kiali-nodeport -n istio-system
# 找到对应的端口
kubectl get service -n istio-system | grep kiali
# 在其它外部访问,注意IP为服务器的公网IP
$ curl 47.242.151.110:31015
<a href="/kiali/">Found</a>.
打开:http://47.242.151.110:31015/kiali ,不要用Chrome打开,对于非https的网页,Chrome会打开失败。我用Safari可以正常打开:

我们来模拟一些请求:
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
details ClusterIP 10.101.63.99 <none> 9080/TCP 77m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 132m
productpage ClusterIP 10.110.126.60 <none> 9080/TCP 77m
ratings ClusterIP 10.104.252.123 <none> 9080/TCP 77m
reviews ClusterIP 10.104.41.104 <none> 9080/TCP 77m
# 循环发送请求
for i in $(seq 1 100); do curl -s -o /dev/null "http://10.101.63.99:9080"; done
for i in $(seq 1 100); do curl -s -o /dev/null "http://10.110.126.60:9080"; done
for i in $(seq 1 100); do curl -s -o /dev/null "http://10.104.252.123:9080"; done
for i in $(seq 1 100); do curl -s -o /dev/null "http://10.104.41.104:9080"; done
查看Graph,就可以看到一些请求的线,红色是失败的,绿色是健康正常的:

当然还有其它更多的功能,这里就不一一讲解了。
4 总结
这篇为入门体验,以后更多细节我们再一一道来吧。
服务网格Istio入门-详细记录Kubernetes安装Istio并使用的更多相关文章
- K8ssandra入门-详细记录在Linux上部署K8ssandra到Kubernetes
1 什么是K8ssandra Cassandra是一款非常优秀的开源的分布式NoSQL数据库,被许多优秀的大公司采用,具有高可用.弹性扩展.性能好等特点. 正应Cassandra的优势,我们经常需要在 ...
- windows下Gulp入门详细教程 &&gulp安装失败的原因(红色)
以下教程亲自实践可行: 另外添加一个Gulp自动编译.压缩.更新.测试的教程链接:https://markpop.github.io/2014/09/17/Gulp%E5%85%A5%E9%97%A8 ...
- 在Mac上安装Istio并使用,有丰富的监控Kiali、Grafana、Jaeger
我最新最全的文章都在南瓜慢说 www.pkslow.com,文章更新也只在官网,欢迎大家来喝茶~~ 1 简介 之前在文章<服务网格Istio入门-详细记录Kubernetes安装Istio并使用 ...
- 【连载】微服务网格Istio(一)
Istio基础 服务网格是用于描述构成应用程序的微服务网络以及应用之间的交互,服务网格的功能包括服务发现.负载均衡.故障恢复.指标和监控以及更加复杂的运维工作,例如A/B测试.金丝雀发布.限流.访问控 ...
- Istio(二):在Kubernetes(k8s)集群上安装部署istio1.14
目录 一.模块概览 二.系统环境 三.安装istio 3.1 使用 Istioctl 安装 3.2 使用 Istio Operator 安装 3.3 生产部署情况如何? 3.4 平台安装指南 四.Ge ...
- 初识 Istio - 服务网格管理工具
What is a service mesh(服务网格)? 微服务在国内流行已经多年了,大多数公司选择了基于容器化技术( Docker )以及容器编排管理平台 ( Kubernetes )落地微服务 ...
- Istio最佳实践:在K8s上通过Istio服务网格进行灰度发布
Istio是什么? Istio是Google继Kubernetes之后的又一开源力作,主要参与的公司包括Google,IBM,Lyft等公司.它提供了完整的非侵入式的微服务治理解决方案,包含微服务的管 ...
- 微软开源Kubernetes服务网格项目Open Service Mesh
尽管微服务环境提供可移植性,允许更快更频繁的部署周期,甚至还能让组织创建关注于特定领域的团队,但这也伴随着对于流量管理.安全以及可观测性等需求的增长.在整个生态系统中,针对这些需求的服务网格模式的实现 ...
- Istio技术与实践6:Istio如何为服务提供安全防护能力
凡是产生连接关系,就必定带来安全问题,人类社会如此,服务网格世界,亦是如此. 今天,我们就来谈谈Istio第二主打功能---保护服务. 那么,便引出3个问题: l Istio凭什么保护服务? l ...
随机推荐
- BFS经典面试题——C++版
文章目录 蛇梯棋 单词接龙 青蛙过河 蛇梯棋 N x N 的棋盘 board 上,按从 1 到 N*N 的数字给方格编号,编号 从左下角开始,每一行交替方向. 例如,一块 6 x 6 大小的棋盘,编号 ...
- centos 8.3安装 OPENJDK
centos 8.3安装 OPENJDK 查找可安装的OPENJDK [root@xamppr10 ~]# yum search java | grep -i --color openjdk 命令执行 ...
- 15、linux文件、目录的权限及如何改变权限(root用户不受任何权限的限制)
15.1.linux普通文件的读.写.执行权限说明: r:读,表示具有读取\阅读文件内容的权限: w:可写,表示具有新增,修改文件内容的权限: 如果没有r配合,那么vi编辑文件会提示无法编辑(但可以强 ...
- 14、oracle sql语法
14.0.注释: 1.单行注释:-- 2.多行注释:/* */ 14.1.sqlplus中的set指令: 1.设置每行显示的数据长度: SET LINESIZE 500; #有效范围是1-32767, ...
- yoyogo v1.7.4 发布,支持 grpc v1.3.8 & etcd 3.5.0
YoyoGo (Go语言框架)一个简单.轻量.快速.基于依赖注入的微服务框架( web .grpc ),支持Nacos/Consoul/Etcd/Eureka/k8s /Apollo等 . https ...
- spring cloud服务器启动之后立刻通过zuul访问其中的实例报zuul连接超时的问题
spring cloud服务启动之后,立刻进行调用 报错:com.netflix.zuul.exception.ZuulException: Forwarding error Caused by: c ...
- pip 下载时出现问题TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'
我这里解决就是更新下载源,马德,中科的源居然不够快,我就只能换源了,一换就成功了 1.一次性(临时使用): 可以在使用pip的时候加参数-i https://pypi.tuna.tsinghua.ed ...
- Pytest学习笔记12-配置文件pytest.ini
前言 pytest配置文件可以改变pytest的运行方式,它是一个固定的文件pytest.ini文件,读取配置信息,按指定的方式去运行. 常用的配置项 marks 作用:测试用例中添加了自定义标记( ...
- XXE学习(待更新)
XXE基础 XXE(XMl External Injection),即XML外部实体注入漏洞. XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体得加载,导致可以加载恶意外部文件,造成文件读取 ...
- HCNA Routing&Switching之动态路由协议OSPF基础(二)
前文我们主要了解了OSPF的区域.区域分类.路由器类型.OSPF的核心工作流程,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/15025533.html:今天 ...