云原生 - 体验Istio的完美入门之旅(一)
作者:justmine
头条号:大数据与云原生
微信公众号:大数据与云原生
创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处。
为了方便大家阅读,可以关注头条号或微信公众号,后续所有的文章将在移动端首发,想学习更多云原生知识,请关注我。
前言
随着微服务架构的流行,服务网格技术获得了业界的广泛关注,作为实现云原生的重要积木,各大厂商也纷纷开始布局,Amazon在2019年4月份推出了App Mesh;Google、IBM、Lyft联合开发了Istio。
Istio作为下一代服务网格的整体解决方案,得到了业界的普遍认可,站在kubernetes巨人的肩膀上,极大地提高了分布式应用的研发和运维效率。
2020是云原生普及的一年,如何部署、使用、运维Istio又是必须要学习知识,本篇希望带给大家一个完美的入门体验。
一、安装环境
- 本地环境:Linux ubuntu
- kubernetes版本:1.15.2
二、准备工作
1、下载最新版本
从Istio最新发布列表下载最新发布版本1.4.3压缩包,及其命令行工具(Istioctl),如下:
# 创建工作目录
mkdir -p /root/service-mesh/istio && cd /root/service-mesh/istio;
# 下载
wget https://github.com/istio/istio/releases/download/1.4.3/istioctl-1.4.3-linux.tar.gz;
## istio也可以演示的时候在下载
wget https://github.com/istio/istio/releases/download/1.4.3/istio-1.4.3-linux.tar.gz;
话外音:请下载相同版本的Istioctl和Istio,避免无法预料的问题。
2、安装命令行工具
tar -vxzf istioctl-1.4.3-linux.tar.gz && cp istioctl /usr/local/bin;
三、安装Istio
为了满足不同的安装需求,Istio内置了一系列的安装配置文件,生产环境建议以default
安装配置文件为起点。
话外音:可以使用
istioctl profile list
命令查看内置配置文件列表,然后使用istioctl profile dump [配置文件名称]
打印配置文件内容。
# 安装 default
# istioctl manifest apply --set profile=default
- Applying manifest for component Base...
✔ Finished applying manifest for component Base.
- Applying manifest for component Galley...
- Applying manifest for component IngressGateway...
- Applying manifest for component Citadel...
- Applying manifest for component Kiali...
- Applying manifest for component Prometheus...
- Applying manifest for component Policy...
- Applying manifest for component Pilot...
- Applying manifest for component Injector...
- Applying manifest for component Telemetry...
✔ Finished applying manifest for component IngressGateway.
✔ Finished applying manifest for component Citadel.
✔ Finished applying manifest for component Prometheus.
✔ Finished applying manifest for component Policy.
✔ Finished applying manifest for component Galley.
✔ Finished applying manifest for component Injector.
✔ Finished applying manifest for component Pilot.
- Finished applying manifest for component Kiali.
✔ Finished applying manifest for component Telemetry.
# 验证
# kubectl get pod -n istio-system
NAME READY STATUS RESTARTS AGE
istio-citadel-7c959c8d59-hssf4 1/1 Running 0 100m
istio-galley-5479df66b5-tr5hf 2/2 Running 0 100m
istio-ingressgateway-7c95796d59-s5sc2 1/1 Running 0 100m
istio-pilot-656556b575-7zzht 2/2 Running 0 100m
istio-policy-5b9b9f5cd9-788rg 2/2 Running 6 100m
istio-sidecar-injector-7dbcc9fc89-554vg 1/1 Running 0 100m
istio-telemetry-7d5b5947db-tgbmg 2/2 Running 6 100m
prometheus-685585888b-5f77l 1/1 Running 0 100m
等待几分钟,当所有的组件状态都为Running时,表示安装成功。
四、安装kiali
通过将基础设施转移到Istio,使得应用开发者无需重复建设基础设施,只需专注于业务逻辑。Istio负责管理整个应用服务集合,这些服务集合组成的网络拓扑就叫服务网格,Istio提供了kiali来可视化整个服务网格。
1、创建登录凭证
# KIALI_USERNAME=$(read -p 'Kiali Username: ' uval && echo -n $uval | base64);
Kiali Username: 用户名
# KIALI_PASSPHRASE=$(read -sp 'Kiali Passphrase: ' pval && echo -n $pval | base64);
Kiali Passphrase: 密码
# cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: kiali
namespace: istio-system
labels:
app: kiali
type: Opaque
data:
username: $KIALI_USERNAME
passphrase: $KIALI_PASSPHRASE
EOF
2、使用Istioctl安装
# istioctl manifest apply --set values.kiali.enabled=true
[...]
✔ Finished applying manifest for component Kiali.
[...]
3、联网
使用NodePort方式暴露kiali服务到互联网,如下:
话外音:应该根据
k8s
环境选择不同联网方式,生产环境建议暴露为LoadLalancer
。
# kubectl -n istio-system edit svc kiali
[...]
spec:
ports:
- name: http-kiali
[...]
nodePort: 9527
type: NodePort
[...]
4、访问
浏览器键入地址http://[ip]:9527/kiali
,键入上面创建的凭证,登录成功,如下:
五、演示
本节将部署一个多语言异构化的微服务示例(Bookinfo),让大家对服务网格有一个清晰的认识。
Bookinfo - 在线图书商店
productpage
微服务调用
details
和reviews
微服务,提供图书单品完整信息。details
微服务提供图书详细信息。
reviews
微服务提供图书评论信息。
一共有三个版本。v1版本不会调用
ratings
微服务;v2版本调用ratings
服务,并将每个等级显示为1到5个黑色星号;v3版本调用ratings
服务,并将每个等级显示为1到5个红色星号。ratings
微服务提供图书星级评分信息。
一图胜千言,整体架构如下:
部署Bookinfo到Istio
将Bookinfo部署到k8s默认命名空间,即default。
1、启动边车自动注入
kubectl label namespace default istio-injection=enabled
2、部署到k8s
# 进入工作目录,解压刚刚下载的Istio
root@just: cd /root/service-mesh/istio && tar -vxzf istio-1.4.3-linux.tar.gz
# 使用kubectl部署到k8s
root@just: kubectl apply -f istio-1.4.3/samples/bookinfo/platform/kube/bookinfo.yaml
service/details created
serviceaccount/bookinfo-details created
deployment.apps/details-v1 created
service/ratings created
serviceaccount/bookinfo-ratings created
deployment.apps/ratings-v1 created
service/reviews created
serviceaccount/bookinfo-reviews created
deployment.apps/reviews-v1 created
deployment.apps/reviews-v2 created
deployment.apps/reviews-v3 created
service/productpage created
serviceaccount/bookinfo-productpage created
deployment.apps/productpage-v1 created
3、联网
# 为Bookinfo部署入口网关
root@just: kubectl apply -f istio-1.4.3/samples/bookinfo/networking/bookinfo-gateway.yaml
gateway.networking.istio.io/bookinfo-gateway created
virtualservice.networking.istio.io/bookinfo created
# 获取网关地址
root@just: export INGRESS_HOST=$(kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}')
root@just: export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
root@just: export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
# 获取图书单品页地址
echo http://${GATEWAY_URL}/productpage
备注:生产环境一般使用
istio-ingressgateway
作为联网的唯一出入口。
4、访问
5、查看服务网格
不停地刷新图书单品页,kiali会实时地绘制服务网格,如下:
基于权重流量的实时控制,如下:
对于服务的可观察性,kiali还提供了很多其他的功能,这也是Istio相较于其他服务网格框架的优势,这里就不展示了。
六、总结
本篇使用Istioctl搭建了一套完整的Istio系统,先从战略上鸟瞰Istio,进一步从战术上学习Istio将更加容易,作为一个完整解决方案,后面系列将一步步学习如何运用Istio的连接、安全、控制、可观察性全面地治理分布式应用。
话外音:到目前为止,大家应该明白Istio是个什么东东了吧。
七、参考
https://github.com/istio/istio/releases
https://istio.io/docs/setup/additional-setup/config-profiles
https://istio.io/docs/setup/getting-started
https://istio.io/docs/setup/install/istioctl/#customizing-the-configuration
https://istio.io/docs/reference/commands/istioctl
https://istio.io/docs/ops/diagnostic-tools/istioctl
https://istio.io/news/releases/1.4.x/announcing-1.4.3
https://istio.io/docs/examples/bookinfo
最后
如果有什么疑问和见解,欢迎评论区交流。
如果你觉得本篇文章对您有帮助的话,感谢您的【推荐】。
如果你对云原生感兴趣的话可以【关注我】。
云原生 - 体验Istio的完美入门之旅(一)的更多相关文章
- 持续优化云原生体验,阿里云在Serverless容器与多云上的探索
近日,阿里云宣布推出Serverless Kubernetes服务此举意在降低容器技术的使用门槛.简化容器平台运维.并同时发布阿里云服务对Open Service Broker API标准支持,通过一 ...
- 云原生实践之 RSocket 从入门到落地:Servlet vs RSocket
技术实践的作用在于:除了用于构建业务,也是为了验证某项技术或框架是否值得大规模推广. 本期开始,我们推出<RSocket 从入门到落地>系列文章,通过实例和对比来介绍RSocket.主要围 ...
- 云原生 - Istio可观察性之分布式跟踪(三)
作者:justmine 头条号:大数据与云原生 微信公众号:大数据与云原生 创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处. 为了方便阅读,微信公众号已按分类排版,后续的文 ...
- 云原生 - Istio可观察性之监控(四)
作者:justmine 头条号:大数据与云原生 微信公众号:大数据与云原生 创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处. 为了方便阅读,微信公众号已按分类排版,后续的文 ...
- 云原生生态周报 Vol. 13 | Forrester 发布企业级容器平台报告
业界要闻 近日,全球知名市场调研机构 Forrester 发布首个企业级公共云容器平台报告.其中,阿里云容器服务的市场表现全球前三.中国第一,同时创造中国企业最好成绩,进入强劲表现者象限.报告显示,阿 ...
- 精彩分享 | 欢乐游戏 Istio 云原生服务网格三年实践思考
作者 吴连火,腾讯游戏专家开发工程师,负责欢乐游戏大规模分布式服务器架构.有十余年微服务架构经验,擅长分布式系统领域,有丰富的高性能高可用实践经验,目前正带领团队完成云原生技术栈的全面转型. 导语 欢 ...
- 云原生 - Why is istio(二)
出处:https://cizixs.com/2018/08/26/what-is-istio 创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处. 前言 随着微服务架构的流行, ...
- Istio 将被捐赠给开源基金会 | 云原生生态周报 Vol. 47
作者 | 陈俊.徐迪.陈有坤.李鹏.敖小剑 业界要闻 1.Google Cloud CEO 表示将把 Istio 项目捐赠给基金会 Istio 项目找到了理想的发展方向: 捐赠给开源基金会. 2.Ko ...
- 云原生流水线 Argo Workflow 的安装、使用以及个人体验
注意:这篇文章并不是一篇入门教程,学习 Argo Workflow 请移步官方文档 Argo Documentation Argo Workflow 是一个云原生工作流引擎,专注于编排并行任务.它的特 ...
随机推荐
- 浅谈使用spring security中的BCryptPasswordEncoder方法对密码进行加密与密码匹配
浅谈使用springsecurity中的BCryptPasswordEncoder方法对密码进行加密(encode)与密码匹配(matches) spring security中的BCryptPass ...
- 【js】vue 2.5.1 源码学习 (四) 钩子函数 资源选项 watch 的合并策略
大体思路 (三) 1.钩子函数 自定义策略 LIFECYCLE_HOOKS= [] created = [function(){} , function(){}] 组装方法 ...
- 算法提高 密码锁 (BFS)
问题描述 你获得了一个据说是古代玛雅人制作的箱子.你非常想打开箱子看看里面有什么东西,但是不幸的是,正如所有故事里一样,神秘的箱子出现的时候总是会挂着神秘的锁. 这个锁上面看起来有 N 个数字,它 ...
- Linux 内核class_simple 接口
class_simple 接口意图是易于使用, 以至于没人会抱怨没有暴露至少一个包含设备的被 分配的号的属性. 使用这个接口只不过是一对函数调用, 没有通常的和 Linux 设备模型 关联的样板. 第 ...
- oracle中update语句修改多个字段
如需要修改下列数据:表名为student 一般会这样写: update student set sname = '李四', sage = 20, sbirthday = to_date('2010-0 ...
- 解决win10台式机插入耳机没有声音或者音量不大
没有声音 如果是插入机箱的前面板,尝试切换到后面板,因为有些组装机箱的前面板是不能用的 有声音,单音量不大(注意:并不一定适用于所有情况,但是可以尝试一下) 原因:缺少驱动,可以确定下控制面板是否有这 ...
- Sybase commands
(1)update table statistics $table name if we change index info for a table ,such as create or drop i ...
- 程序员必须掌握的性能调优 X Y Z
热评博文:<如何设计出优美的Web API?>,现阅读量超 2500,小伙伴们不要错过哦! 2003 ~ 2008 年,这五年老兵哥我在通信行业做实习生和开发岗,主要用 C / C++ / ...
- TCP/IP||IP选路
1.选路原理 在IP搜索路由表分为几个步骤 1.搜索匹配的主机地址 2.搜索匹配的网络地址 3.搜索默认表项. IP层进行选路实际是一种选路机制,搜索路由表并决定向哪个网络接口发送分组,区别选路策略, ...
- alpha week 2/2 Scrum立会报告+燃尽图 06
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/9803 小组名称:“组长”组 组长:杨天宇 组员:魏新,罗杨美慧,王歆瑶, ...