
杜軍
本書是容器與Kubernetes網絡的基礎和進階書籍,旨在讓更多人瞭解和學習雲原生時代的底層網絡模型與實現機制,指導企業在落地雲原生時的網絡方案選型。全書包括:容器網絡虛擬化基礎、Docker容器網絡、Kubernetes網絡和Istio網絡4部分,共6章。第1章容器網絡虛擬化基礎將支撐容器網絡的內核技術娓娓道來。第2章簡單介紹了Docker原生的容器網絡能力。Kubernetes網絡分爲3章,第3章介紹Kubernetes網絡的基礎概念和使用,第4章爲讀者剖析了Kubernetes網絡的底層實現原理,第5章詳解了業界主流的Kubernetes網絡插件。Istio網絡總共1章,重點解析Istio網絡流量管控的背後機制。
對於線上環境是使用kubernetes集羣部署的,強烈推薦大家看看這本書,作者從最原始的namespace劃分到veth pair,bridge,tunnel,overlay網絡,再到docker的網絡和kubernetes網絡,以及k8s網絡標準的演變之路,pod,service,ingress再到外界的lb負載均衡,還有把業務和網絡剝離的service mesh,層層解剖整個kubernetes的網絡世界,和選擇它們的技術背後心路歷程。既有垂直的深度(應用層到內核層),也有廣度(kubernetes的網絡世界非常的廣泛,比如網絡插件就有很多種選擇,cni網絡插件鉤子),值得大家時不時地翻看和溫習。相比於在網上看一下細枝末節的文章,我更喜歡看這類自成體系的書籍。感恩遇見。~
本來想通過此書來了解k8s的原理,結果作者一上來並沒有按套路講什麼“辦酒席,需要打包……”之內的容器抽象概念,而是從Linux內核的虛擬化說起,再逐層遞進到虛擬設備-路由-封包-隧道…Docker-kubertets…,真正把容器基於Linux內核虛擬化技術的這個本質說了個透,作者不愧爲業界大佬,分析問題一針見血、直擊要害,其實對得起《Kubernetes網絡權威指南》這個書名。美中不足的是有些核心點只是寥寥帶過,並沒有展開細說,比如BPF之類的程序,當然,每一個關鍵的知識點深入下去都是一門學問,路漫漫其修遠兮,吾將上下而求索。
優點: 內容深度與廣度足夠,主要聚焦雲原生的網絡實現原理,比如基礎層面的veth pair, tun/tap, netns, linux bridge, vxlan,ip tables。實現層面的flannel,calico等等。考慮到出版時間,基礎層面的內容比實現層面更豐富反而是優點,因爲變化不大。 缺點: 錯誤太多,尤其是實踐相關的內容,比如截圖與描述不符。實現層面的內容介紹包含具體的安裝步驟,這些內容其實很容易變化,另外實現層面的內容多且抽象,難以面面俱到,所以更關注原理實現或者不依賴平臺的實踐示例可能會更好。 總的來說瑕不掩瑜,基礎層面的內容更有價值
對於linux網絡虛擬化的章節看得很仔細,也做了一些實驗去驗證書中的理論。對於後面的章節內容看得比較快,基本走馬觀花。不過不妨礙這本書的作者對於kubernetes網絡架構從前期引導到後期描述都很細緻,值得今後多多翻閱參考。
非常好的技術講解。基本上把容器網絡技術的來龍去脈清清楚楚的梳理了一遍;這些技術基本上也是sdn的基礎,值得反覆揣摩; 因爲軟件組網的靈活性,將各種基礎技術像積木一樣組合排列,能實現許多傳統硬件組網設備很難實現的功能,sdn的發展還大有可爲
作者功底深厚,一看就是從一線做起,又寫書,書從底層講起,深入淺出,完全可以當成一本工具書,先淺顯的讀一遍,以後具體實施的過程中需要某一部分知識,再來回回顧。 摘抄段落: 1、雖然在軟件版本快速迭代的高壓面前,這種良好的追求有時也會變成一種奢求,但是我堅信工程師不能只當一個使用者,而一定要理解當前正在使用的技術的底層實現機制。 2、Docker容器作爲一項輕量級的虛擬化技術,它的隔離能力來自Linux內核的namespace技術。 3、network namespace #創建一個namespace ip netns add netns1 #進入命令空間 ip netns exec netns1 ip link list #列出命名空間 ip netns list #刪除命令空間 ip netns delete netns1 #啓用迴環接口 (lo) ip netns exec netns1 ip link set lo up #創建一對虛擬的以太網卡 ip link add veth0 type veth peer name veth1 #把 veth pair的一端放到netns1 network namespace上 ip link set veth1 netns netns1 #此是veth0跟veth1之間還不能通信,需要綁定ip,並設置爲啓動 ip netns exec netns1 ifconfig veth1 10.1.1.1/24 up ifconfig veth0 10.1.1.2/24 up #這樣在主機上就可以ping通了 [root@k8s-node2 ~]# ping 10.1.1.1 PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data. 64 bytes from 10.1.1.1: icmp_seq=1 ttl=64 time=0.071 ms #再進入 netns1 也可以ping通 10.1.1.2了 [root@k8s-node2 ~]# ip netns exec netns1 ping 10.1.1.2 PING 10.1.1.2 (10.1.1.2) 56(84) bytes of data. 64 bytes from 10.1.1.2: icmp_seq=1 ttl=64 time=0.072 ms 64 bytes from 10.1.1.2: icmp_seq=2 ttl=64 time=0.046 ms #不同network namespace之間的路由表和防火牆規則等也是隔離的,因爲進入netns1查路由表和iptables規則發現空空如也 [root@k8s-node2 ~]# ip netns exec netns1 route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 veth1 [root@k8s-node2 ~]# ip netns exec netns1 iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination 4、Linux的network namespace技術可以自定義一個獨立的網絡棧,簡單到只有loopback設備,複雜到具備系統完整的網絡能力,這就使得network namespace成爲Linux網絡虛擬化技術的基石——不論是虛擬機還是容器時代。 5、tun/tap設備就像是埋在用戶程序空間的一個鉤子,我們可以很方便地將對網絡包的處理程序掛在這個鉤子上,OpenVPN、Vtun、flannel都是基於它實現隧道包封裝的。 6、容器是進程級別的隔離技術,因此相比虛擬機有啓動快、佔用資源少、體積小等優點。 7、查看主機上有多少個docker network,可以使用以下命令:docker network ls 8、如果希望刪除某個網絡,則只需使用network rm子命令: docker network rm <id> 9、每個Pod內的第一個系統容器pause的作用就是佔用一個Linux的network namespace。 10、Kubernetes主機內容器的默認組網方案是bridge。flannel、Calico這些第三方插件解決容器之間的跨機通信問題,典型的跨機通信解決方案有bridge和overlay等。 11、Service具有穩定的IP地址(區別於容器不固定的IP地址)和端口,並會在一組匹配的後端Pod之間提供負載均衡,匹配的條件就是Service的Label Selector與Pod的Labels相匹配。 12、Ingress的作用就是在邊界路由處開個口子,放外部流量進來。因此,Ingress是建立在Service之上的L7訪問入口,它支持通過URL的方式將Service暴露到k8s集羣外 13、Kubernetes Master存儲了所有Service的定義和更新 14、問個開放性問題,Kubernetes爲什麼要發明Ingress這個概念呢?筆者認爲,其中一個重要的原因便是服務動態發現和負載均衡。 15、Calico的slogan:爲容器和虛擬機工作負載提供一個安全的網絡連接。 16、總結Calico網絡使用BGP的原因有: (1)BGP是一種簡單的路由協議。 (2)擁有當前行業的最佳實踐。 (3)唯一能夠支撐Calico網絡規模的協議。
K8s 網絡說簡單也簡單,從使用角度來說;說複雜也很複雜,從異構網絡的問題排查角度來說。K8s 集羣所在的環境只有想不到,還沒有做不到的,所以就更需要從業者從底層瞭解 Pod 網絡,不論是運維人員還是研發人員。 書中由淺入深,介紹了 K8s 當前網絡架構的演進,當然也帶着讀者一步步深入學習相關的網絡知識。但是個人看完後,覺得最後的部分講得太少了,只能去找其他書籍了。 看完本書後的感覺就是書如其名,應當作爲 K8s 從業者必備的一本書。
從內容安排非常合理,對初學者很友好。 內容的深度和廣度都是逐步遞進的,從linux網絡,到單機容器網絡,到集羣網絡,再到網絡插件和mesh,雖然有點虎頭蛇尾,但是前半部分確實做到了深入淺出,可以在學習完k8s基本用法之後通過這本書繼續瞭解容器網絡方面的底層和細節內容,非常推薦。
個人覺得比較適合我現在這個階段看,我現在的階段應該是處於,基本會用,又知道一丟丟的原理,但不繫統不深入,所以這本書算是給我,在會用到原理的方向前進了一步,當然前路漫漫,還有很長的路要走。所以對於我來說,還是挺不錯的一本書。不過這本書,有些地方寫錯了,在舉例子說明的時候,把ip給搞混了,文字的ip和圖上的ip對不上。
錯誤有點多,學到了東西但是書本讀起來還是需要自己查不少資料,就感覺有的地方寫的還挺豐富有些就隨便丟一個名詞就過去了,比如bgp