Istio入門與實戰(zhàn)》 ——3 使用Vagrant管理虛擬機(jī)">《Istio入門與實戰(zhàn)》 ——3 使用Vagrant管理虛擬機(jī)
646
2025-03-31
實戰(zhàn)
Istio入門與實戰(zhàn)
毛廣獻(xiàn) 編著
Preface 前 言
近幾年來,容器技術(shù)的飛速發(fā)展使得微服務(wù)技術(shù)更容易落地,微服務(wù)架構(gòu)在業(yè)界逐漸流行起來。但是微服務(wù)架構(gòu)對基礎(chǔ)設(shè)施要求較高,微服務(wù)依賴持續(xù)集成、服務(wù)注冊、服務(wù)發(fā)現(xiàn)、負(fù)載均衡、健康檢測、配置管理、服務(wù)路由、服務(wù)容錯、日志收集、指標(biāo)收集、調(diào)用鏈追蹤等,而構(gòu)建這一套基礎(chǔ)設(shè)施的成本巨大。因此,微服務(wù)相關(guān)的框架逐漸露出水面,比如Java語言的Spring Cloud框架。雖然這些微服務(wù)框架為我們提供了很多便利,但由于這些框架是與編程語言綁定的,使得我們應(yīng)用的技術(shù)棧受到了限制。即使后來有其他的微服務(wù)框架也支持多編程語言的技術(shù)棧,但由于這些微服務(wù)框架代碼對服務(wù)代碼入侵嚴(yán)重,給后續(xù)服務(wù)框架的bug修復(fù)和版本升級帶來了一定的困難。所以,服務(wù)網(wǎng)格的概念一經(jīng)提出,便得到了很多人的支持,人們對這項技術(shù)抱有很大的期望,希望能解決當(dāng)前微服務(wù)所遇到的問題。
當(dāng)我第一次接觸服務(wù)網(wǎng)格技術(shù)的時候,就覺得服務(wù)網(wǎng)格將來可能會像IaaS、PaaS一樣成為業(yè)界的主流技術(shù),會得到廣泛應(yīng)用。其實,服務(wù)網(wǎng)格并沒有提供什么新的概念和功能,它只是把原來服務(wù)框架所做的功能完全獨(dú)立出來,整合了一個服務(wù)網(wǎng)格的基礎(chǔ)設(shè)施層。這個改變看似很小,但是能使服務(wù)與服務(wù)治理功能實現(xiàn)完全解耦,這個影響是巨大的。
2017年5月,谷歌、IBM、Lyft等公司共同努力實現(xiàn)的開源服務(wù)網(wǎng)格Istio正式發(fā)布了第一個版本。而后又一個服務(wù)網(wǎng)格開源實現(xiàn)Conduit開始啟航,服務(wù)網(wǎng)格進(jìn)入了更多技術(shù)人員的視野,經(jīng)過努力,Istio在2018年7月正式發(fā)布了1.0.0版本。
2018年是服務(wù)網(wǎng)格快速發(fā)展的一年,Istio發(fā)布的1.0.0版本標(biāo)志著Istio已經(jīng)成熟到可以接受生產(chǎn)流量的考驗。2019年服務(wù)網(wǎng)格將會持續(xù)保持熱度,作為一名技術(shù)人員,現(xiàn)在是時候了解一下服務(wù)網(wǎng)格技術(shù)了。而在所有的開源服務(wù)網(wǎng)格實現(xiàn)中,最成熟的肯定是Istio。因此,要學(xué)習(xí)和了解服務(wù)網(wǎng)格,首先應(yīng)該學(xué)習(xí)使用Istio。
由于Istio官方文檔使用英文編寫,而且只簡單演示了Istio提供的功能,沒有基于一般的使用場景,我在學(xué)習(xí)Istio時就很迷茫。于是,我結(jié)合自己的學(xué)習(xí)經(jīng)驗和方法編寫了這本如何在實戰(zhàn)中學(xué)習(xí)Istio的書,以便技術(shù)人員能以最簡單的方式上手Istio,理解Istio,并能在生產(chǎn)環(huán)境中應(yīng)用Istio服務(wù)網(wǎng)格。
由于本書是一本實戰(zhàn)類型的書,書中沒有大篇的理論知識。對于Istio提供的功能,本書只簡單地描述其作用和使用方式,然后使用實驗來演示效果。我相信,只要你跟著書中的實驗操作,并理解這些實驗的目的,學(xué)習(xí)完本書后,你就一定能熟練使用Istio,并在以后的Istio使用中得心應(yīng)手。
對服務(wù)網(wǎng)格感興趣的人都可以閱讀本書。如果你想了解服務(wù)網(wǎng)格,想知道服務(wù)網(wǎng)格提供了哪些功能,能解決什么問題,本書將是一個不錯的選擇。如果你想了解Istio,體驗Istio,將來有可能將Istio應(yīng)用于生產(chǎn)環(huán)境,那么閱讀本書將是一個不錯的開始。
本書主要內(nèi)容如下:
第1章介紹服務(wù)網(wǎng)格的由來以及服務(wù)網(wǎng)格能給我們帶來什么,接著介紹開源的服務(wù)網(wǎng)格實現(xiàn)Istio的主要功能特性及其架構(gòu)設(shè)計。
第2章說明本書后續(xù)實驗相關(guān)的環(huán)境和實驗中的注意事項,并詳細(xì)介紹后續(xù)實驗中將會使用的微服務(wù)架構(gòu)應(yīng)用,以及微服務(wù)的容器化構(gòu)建。
第3章簡單介紹Vagrant及其使用方法。使用Vagrant可以快速創(chuàng)建實驗環(huán)境,這對于我們后續(xù)實驗環(huán)境的準(zhǔn)備提供了非常大的便利,接著對創(chuàng)建實驗環(huán)境的場景進(jìn)行模擬,幫助讀者熟悉Vagrant的使用流程。
第4章介紹如何使用Kubeadm快速創(chuàng)建一個多節(jié)點(diǎn)的Kubernetes集群。Kubernetes集群是后續(xù)部署Istio的基礎(chǔ)。
第5章介紹如何以官方示例的方式部署一個包含完整功能的Istio集群,以及如何以最小資源的方式部署一個能滿足大部分實驗場景要求的Istio集群。此外,還簡單介紹了Istio中常用的資源,以及常用的istioctl、kubectl命令。
第6章介紹微服務(wù)架構(gòu)應(yīng)用如何部署在Kubernetes集群中,以及如何訪問部署在Kubernetes集群中的服務(wù),還簡單介紹了如何在Istio集群中部署和對外暴露服務(wù)。
第7章介紹Istio提供的服務(wù)流量管理功能,包括管理網(wǎng)格的入口和出口流量,根據(jù)請求進(jìn)行流量拆分,如何借助Istio實現(xiàn)A/B測試和灰度發(fā)布等功能。
第8章介紹如何讓部署在Istio中的服務(wù)更具彈性,包括負(fù)載均衡、連接池、服務(wù)健康檢測、服務(wù)熔斷、服務(wù)超時、服務(wù)重試、服務(wù)限流功能的配置。
第9章介紹服務(wù)故障注入的相關(guān)功能,提前給服務(wù)注入故障,可以測試服務(wù)在故障中的穩(wěn)定性,提前發(fā)現(xiàn)問題并修復(fù)問題。
第10章介紹服務(wù)間通信加密和服務(wù)間訪問權(quán)限的控制。Istio提供了雙向TLS進(jìn)行服務(wù)間的通信加密,使用RBAC來實現(xiàn)細(xì)粒度的服務(wù)訪問權(quán)限控制。
第11章介紹如何提升服務(wù)的可觀測性。在Istio中通過簡單的配置,就可以實現(xiàn)服務(wù)的指標(biāo)收集、日志收集。通過傳遞指定的服務(wù)請求頭,就可以輕松實現(xiàn)服務(wù)的調(diào)用鏈追蹤功能,這不但增強(qiáng)了服務(wù)的可觀測性,還大大減輕了運(yùn)維人員和開發(fā)人員的負(fù)擔(dān)。
第12章介紹Istio部署后的維護(hù)工作。通過部署開源的第三方儀表板工具,我們可以更方便地管理Istio。接著介紹如何在不停機(jī)的情況下升級Istio,如何使用Helm以定制化的方式部署Istio,以及當(dāng)Istio出現(xiàn)故障時應(yīng)該如何排查并解決問題。最后介紹了在Istio中一個請求從發(fā)出到響應(yīng)的整個流程。
第13章介紹一些不適合放在其他章節(jié)的Istio功能,包括跨域、跳轉(zhuǎn)、TCP路由、TLS路由等,以及如何在Gateway上啟用HTTPS,如何為部署在Istio中的服務(wù)開啟健康檢查功能,如何使用Envoy代理Ingressgateway來實現(xiàn)把集群內(nèi)的服務(wù)暴露給集群外部使用。最后還簡單介紹了Mixer和Adapter模型。
本書源碼
本書所有示例代碼都放在GitHub上,地址為https://github.com/mgxian/istio-lab,讀者可以查看或下載。由于部署Kubernetes集群和Istio的過程中會涉及比較多的命令,我也把相關(guān)的命令放在了源碼的cmd目錄下。
致謝
感謝所有在本書撰寫、出版過程中給予過幫助的人。這里要特別感謝機(jī)械工業(yè)出版社的吳怡編輯,沒有她的鼎力相助,就沒有本書。同時也要感謝我的家人和朋友,沒有他們的支持和理解,我不可能在有限的時間里完成本書。最后要感謝閱讀本書的讀者,非常感謝大家的支持!
目 錄? Contents
前言
第1章 服務(wù)網(wǎng)格與Istio? 1
1.1 服務(wù)網(wǎng)格簡介? 1
1.1.1 服務(wù)網(wǎng)格的概念與特點(diǎn)? 2
1.1.2 服務(wù)網(wǎng)格的優(yōu)勢? 3
1.2 Istio簡介? 4
1.3 Istio的架構(gòu)設(shè)計? 5
1.3.1 數(shù)據(jù)平面? 6
1.3.2 控制平面? 7
1.4 Istio的功能特性? 9
1.5 本章小結(jié)? 10
第2章 實驗說明? 11
2.1 實驗的環(huán)境? 11
2.1.1 基礎(chǔ)環(huán)境? 11
2.1.2 命令說明? 12
2.1.3 問題及解決方案? 13
2.2 實驗的應(yīng)用? 16
2.2.1 應(yīng)用架構(gòu)說明? 16
2.2.2 應(yīng)用詳細(xì)說明? 17
2.3 應(yīng)用的構(gòu)建? 26
2.4 本章小結(jié)? 31
第3章 使用Vagrant管理虛擬機(jī)? 32
3.1 Vagrant簡介? 32
3.2 Vagrant常用命令? 33
3.3 模擬實驗時的場景? 38
3.4 本章小結(jié)? 47
第4章 創(chuàng)建Kubernetes集群? 48
4.1 安裝Docker? 48
4.2 安裝Kubeadm? 51
4.3 配置基礎(chǔ)環(huán)境? 52
4.4 創(chuàng)建Kubernetes集群的步驟? 55
4.5 測試集群的正確性? 61
4.6 注意事項與技巧? 65
4.7 本章小結(jié)? 67
第5章 Istio部署與常用命令? 68
5.1 部署Istio? 68
5.2 常用資源類型? 77
5.2.1 流量控制? 77
5.2.2 請求配額? 80
5.2.3 mTLS認(rèn)證策略? 81
5.2.4 RBAC訪問權(quán)限? 81
5.3 常用的kubectl命令? 83
5.4 常用的istioctl命令? 83
5.4.1 通用參數(shù)說明? 84
5.4.2 常用命令? 84
5.5 注意事項與技巧? 85
5.6 本章小結(jié)? 89
第6章 微服務(wù)應(yīng)用的部署? 90
6.1 微服務(wù)應(yīng)用架構(gòu)? 90
6.2 部署服務(wù)? 94
6.3 訪問服務(wù)? 98
6.4 在Istio中部署微服務(wù)? 102
6.5 本章小結(jié)? 105
第7章 讓服務(wù)流量控制更簡單? 106
7.1 整體介紹? 106
7.2 管理集群的入口流量? 110
7.3 把請求路由到服務(wù)的指定版本? 111
7.4 根據(jù)服務(wù)版本權(quán)重拆分流量? 113
7.5 根據(jù)請求信息路由到服務(wù)的不同版本? 114
7.6 流量鏡像? 115
7.7 管理集群的出口流量? 117
7.8 實現(xiàn)服務(wù)A/B測試? 126
7.9 實現(xiàn)服務(wù)灰度發(fā)布? 128
7.10 灰度發(fā)布與A/B測試結(jié)合? 132
7.11 本章小結(jié)? 135
第8章 讓服務(wù)更具彈性? 136
8.1 整體介紹? 136
8.2 負(fù)載均衡? 138
8.3 連接池? 141
8.4 健康檢測? 144
8.5 熔斷? 145
8.6 超時? 149
8.7 重試? 151
8.8 限流? 153
8.9 本章小結(jié)? 165
第9章 讓服務(wù)故障檢測更容易? 166
9.1 整體介紹? 166
9.2 給服務(wù)增加時延? 168
9.3 給服務(wù)注入錯誤? 169
9.4 時延與錯誤配合使用? 171
9.5 本章小結(jié)? 173
第10章 讓服務(wù)通信更安全可控? 174
10.1 整體介紹? 174
10.2 Denier適配器? 176
10.3 黑白名單? 177
10.4 服務(wù)與身份認(rèn)證? 180
10.5 RBAC訪問控制? 194
10.6 本章小結(jié)? 205
第11章 讓服務(wù)更易觀測與監(jiān)控? 206
11.1 整體介紹? 206
11.2 指標(biāo)收集? 209
11.3 日志收集? 216
11.4 調(diào)用鏈追蹤? 224
11.5 服務(wù)指標(biāo)可視化? 230
11.6 服務(wù)調(diào)用樹? 235
11.7 本章小結(jié)? 239
第12章 Istio維護(hù)? 240
12.1 整體介紹? 240
12.2 Istio服務(wù)網(wǎng)格儀表板? 241
12.3 升級Istio? 245
12.4 使用Helm定制部署Istio? 253
12.5 故障排除? 257
12.6 一個請求的完整過程分析? 272
12.7 本章小結(jié)? 282
第13章 雜項? 283
13.1 CORS? 284
13.2 URL重定向? 287
13.3 URL重寫? 289
13.4 TCP路由? 290
13.5 TLS路由? 292
13.6 mTLS遷移? 295
13.7 EnvoyFilter? 297
13.8 添加請求頭? 299
13.9 在Gateway上使用HTTPS? 300
13.10 在HTTPS服務(wù)上開啟mTLS? 304
13.11 網(wǎng)格中的服務(wù)健康檢查? 306
13.12 Envoy代理Ingressgateway? 308
13.13 Mixer與Adapter模型? 311
13.14 本章小結(jié)? 312
Kubernetes 微服務(wù) Istio
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。