目錄
一、認(rèn)識(shí) Kubernetes 網(wǎng)絡(luò)
二、外部網(wǎng)絡(luò)如何訪問(wèn) k8s 內(nèi)部服務(wù)
1. NodePort
2. Load Balancer
3. Ingress
一、認(rèn)識(shí) Kubernetes 網(wǎng)絡(luò)
Kubernetes 最底層的網(wǎng)絡(luò)為節(jié)點(diǎn)網(wǎng)絡(luò),用來(lái)保證 k8s 集群的節(jié)點(diǎn)(master 和 worker、worker 節(jié)點(diǎn)之間)能夠做正常的 IP 尋址和通訊。
Kubernetes 第二層網(wǎng)絡(luò)就是 Pod 網(wǎng)絡(luò),構(gòu)建于節(jié)點(diǎn)網(wǎng)絡(luò)之上,用來(lái)保證 k8s 集群中的 pod 之間能夠做正常的 IP 尋址和通訊。作為集群最基本的調(diào)度單位,一個(gè) Pod 內(nèi)部可以有一個(gè)或多個(gè)容器,容器之間直接通過(guò) localhost 互相訪問(wèn);這些容器可共享 Pod 的網(wǎng)絡(luò)棧,容器想要訪問(wèn)外部資源則通過(guò)此網(wǎng)絡(luò)棧。如下為該兩層的示意圖:
那么在 Pod 之間又是如何進(jìn)行 IP 尋址和通訊的呢?
在 Kubernetes 集群當(dāng)中,可以把每一個(gè) Pod 看成是一個(gè)自帶虛擬網(wǎng)卡的小型虛擬機(jī)。在節(jié)點(diǎn)網(wǎng)絡(luò)的基礎(chǔ)上,k8s 會(huì)創(chuàng)建一個(gè)專(zhuān)門(mén)為 Pod 尋址和訪問(wèn)服務(wù)的虛擬網(wǎng)絡(luò)(即 Pod 網(wǎng)絡(luò)),首先 k8s 會(huì)在每個(gè)節(jié)點(diǎn)之間創(chuàng)建虛擬網(wǎng)橋,并管理網(wǎng)橋的 IP 地址空間和分配,其次 k8s 會(huì)修改路由器的路由規(guī)則,使得不同節(jié)點(diǎn)上的 Pod 可以相互通信。
但是還有一個(gè)問(wèn)題,那就是 Pod?在 k8s 中是不固定的,可能會(huì)掛起或者重啟,且掛起重啟都是不可預(yù)期的,那么這就會(huì)導(dǎo)致服務(wù)的 IP 也隨著不停的變化,給用戶的尋址造成一定的困難。在上文中我們也提到了解決此問(wèn)題用到了服務(wù)?service。service 網(wǎng)絡(luò)的實(shí)現(xiàn)也就是 Kubernetes 的第三層網(wǎng)絡(luò)。
service 是由 k8s 單獨(dú)創(chuàng)建和管理的,有獨(dú)立的 IP 地址空間,它的 IP 稱(chēng)為 Cluster-IP。
二、外部網(wǎng)絡(luò)如何訪問(wèn) k8s 內(nèi)部服務(wù)
要知道,Pod 網(wǎng)絡(luò)和 service 網(wǎng)絡(luò)都是 k8s 的內(nèi)部網(wǎng)絡(luò),外部用戶是無(wú)法訪問(wèn)的,而外部網(wǎng)絡(luò)和 節(jié)點(diǎn)網(wǎng)絡(luò)是可以互通的。那么如果能夠?qū)崿F(xiàn)節(jié)點(diǎn)網(wǎng)絡(luò)和 service 網(wǎng)絡(luò)的互通,就可以間接實(shí)現(xiàn)外部與 service 網(wǎng)絡(luò)的互通了。
1. NodePort
NodePort 是一種將 Kubernetes 服務(wù)暴露在節(jié)點(diǎn)網(wǎng)絡(luò)上的一種機(jī)制。其實(shí)就是 k8s 中一種特殊的 service,k8s 會(huì)在集群中的每一個(gè)節(jié)點(diǎn)上暴露一個(gè)相同的端口,通過(guò)端口以及 kube-proxy 轉(zhuǎn)發(fā)服務(wù)讓節(jié)點(diǎn)網(wǎng)絡(luò)可以訪問(wèn)到 k8s 內(nèi)部的 service。?
2. Load Balancer
Node Port 將 k8s 中的服務(wù)暴露在節(jié)點(diǎn)網(wǎng)絡(luò)中后,想要外部網(wǎng)絡(luò)訪問(wèn)到節(jié)點(diǎn)網(wǎng)絡(luò)進(jìn)而訪問(wèn)到 k8s 中的服務(wù)還需要引入負(fù)載均衡設(shè)備,也就是 load balancer。
load balancer 具有公網(wǎng) IP,可以將外部流量轉(zhuǎn)換路由到節(jié)點(diǎn)網(wǎng)絡(luò)中,還能夠?qū)崿F(xiàn)對(duì)節(jié)點(diǎn)網(wǎng)絡(luò)的負(fù)載均衡,以實(shí)現(xiàn)用戶通過(guò)公網(wǎng) IP 訪問(wèn)到 k8s 內(nèi)部的服務(wù)。
load balancer 也是一種特殊的 service,本地 Kubernets 部署是不支持 load balances 的;公有云如阿里云等則是支持的,可以按需銷(xiāo)毀和創(chuàng)建 load balancer。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-795123.html
3. Ingress
如果需要暴露在節(jié)點(diǎn)網(wǎng)絡(luò)中的服務(wù)有很多,僅僅使用 load balancer 的話成本是很高的。Ingress 可以等價(jià)于反向代理或者網(wǎng)關(guān),它的主要作用就是反向路由,它可以將多個(gè) k8s 內(nèi)部的服務(wù)同時(shí)暴露出去但僅需一個(gè) load balancer。Ingress 還有一些其他功能如動(dòng)態(tài)路由更新、安全認(rèn)證、日志監(jiān)控等。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-795123.html
到了這里,關(guān)于【云原生 ? Kubernetes】認(rèn)識(shí) k8s 網(wǎng)絡(luò)、外部網(wǎng)絡(luò)訪問(wèn) k8s 內(nèi)部服務(wù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!