1、service的作用體現(xiàn)在兩個(gè)方面
(1)集群內(nèi)部:不斷跟蹤pod的變化,更新deployment中的pod對(duì)象,基于pod的ip地址不斷變化的一種服務(wù)發(fā)現(xiàn)機(jī)制
(2)集群外部:類(lèi)似于負(fù)載均衡器,把流量ip+端口,不涉及轉(zhuǎn)發(fā)url(http/https),把請(qǐng)求轉(zhuǎn)發(fā)到pod當(dāng)中
2、service
nodeport |
容器端口——service端口——nodeport 設(shè)定了nodeport,每個(gè)節(jié)點(diǎn)都會(huì)有一個(gè)端口被打開(kāi)(30000-32767) ip+端口:節(jié)點(diǎn)ip+30000-32767,實(shí)現(xiàn)負(fù)載均衡 |
loadbalancer |
云平臺(tái)上的一種service服務(wù),云平臺(tái)提供負(fù)載均衡ip地址 |
extrenal |
域名映射 |
3、ingress:基于域名進(jìn)行映射,把url(http/https)請(qǐng)求轉(zhuǎn)發(fā)到service,再由service把請(qǐng)求轉(zhuǎn)發(fā)到每個(gè)pod
①ingress:只要一個(gè)或者少量的公網(wǎng)ip/LB,可以把多個(gè)http請(qǐng)求暴露到外網(wǎng),七層反向代理
②ingress:是service的service,是一組基于域名和url路徑,把一個(gè)或者多個(gè)請(qǐng)求轉(zhuǎn)發(fā)到service的規(guī)則
④先是七層代理(ingress)——再是四層代理(server)——pod(nginx)
4、ingress的組成
(1)ingress是一個(gè)api對(duì)象,通過(guò)yaml文件來(lái)進(jìn)行配置 (2)ingress的作用:定義請(qǐng)求如何轉(zhuǎn)發(fā)到service的規(guī)則,配置模版 (3)ingress通過(guò)http和https暴露集群內(nèi)部的service,給service提供一個(gè)外部的url、負(fù)載均衡、ssl/tls(https)的能力,實(shí)現(xiàn)基于域名的負(fù)載均衡 |
ingress-controller ①具體的實(shí)現(xiàn)反向代理和負(fù)載均衡的程序,對(duì)ingress定義的規(guī)則進(jìn)行解析,根據(jù)ingress的配置規(guī)則進(jìn)行請(qǐng)求的轉(zhuǎn)發(fā) ②ingress-controller不是k8s自帶的組件功能,ingress-controller是一個(gè)統(tǒng)稱(chēng) ③ingress-controller:nginx ingress controller、traefik(開(kāi)源) ④ingress-controller的運(yùn)行方式:pod形式運(yùn)行在節(jié)點(diǎn)上 |
5、ingress資源的定義項(xiàng)
(1)定義外部流量的路由規(guī)則
(2)定義服務(wù)的暴露方式:主機(jī)名、訪(fǎng)問(wèn)的路徑(url)和其他的選項(xiàng)
(3)負(fù)載均衡(ingress-controller實(shí)現(xiàn))
6、下載nginx ingress controller
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml
7、ingress暴露服務(wù)的方式
(1)deployment+LoadBalance模式,ingress部署在公有云
①ingress的配置文件里面會(huì)有一個(gè)type,type鍵值對(duì)形式type:LoadBalance
②公有云平臺(tái)會(huì)為L(zhǎng)oadBalance的service創(chuàng)建一個(gè)負(fù)載均衡器,綁定一個(gè)公網(wǎng)地址,通過(guò)域名指向這個(gè)公網(wǎng)地址,就可以實(shí)現(xiàn)集群對(duì)外暴露
(2)daemonSet+hostnetwork+nodeselector(七層代理upstream)
①daemonset:在每個(gè)節(jié)點(diǎn)都會(huì)創(chuàng)建一個(gè)pod
②hostnetwork:pod共享節(jié)點(diǎn)主機(jī)的網(wǎng)絡(luò)命名空間,pod中的容器直接使用節(jié)點(diǎn)主機(jī)的ip+端口,pod中的容器可以直接訪(fǎng)問(wèn)主機(jī)上的網(wǎng)絡(luò)資源
③nodeselector:根據(jù)標(biāo)簽選擇部署的節(jié)點(diǎn),nginx-ingress-controller部署的節(jié)點(diǎn)
缺點(diǎn):直接利用節(jié)點(diǎn)主機(jī)的網(wǎng)絡(luò)和端口,一個(gè)node只能部署一個(gè)ingress-controller的pod,適合大并發(fā)的生產(chǎn)環(huán)境 優(yōu)點(diǎn):性能最好 |
(3)deployment+NodePort(七層+四層)
8、部署daemonSet+hostnetwork+nodeselector
(1)修改配置文件mandatory.yaml
(2)每個(gè)節(jié)點(diǎn)上傳控制器的鏡像
tar -xf ingree.contro-0.30.0.tar.gz
docker load -i ingree.contro-0.30.0.tar
(3)節(jié)點(diǎn)設(shè)置標(biāo)簽
kubectl label nodes node2 ingress=true
netstat -antp | grep nginx
8181端口:nginx-controller默認(rèn)配置的一個(gè)bachend,反向代理的端口 所有的請(qǐng)求當(dāng)中,只要是不符合ingress配置的請(qǐng)求會(huì)轉(zhuǎn)發(fā)到8181,相當(dāng)于一個(gè)error的頁(yè)面 |
(4)創(chuàng)建PVC、pod、service、ingress規(guī)則
(5)配置映射
(6)測(cè)試訪(fǎng)問(wèn)
8、deployment+NodePort(七層+四層)
(1)修改配置文件vim mandatory.yaml
(2)下載nodeport模版文件:
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml
①nodeport在每一節(jié)點(diǎn)上都暴露32110和32336的端口
(3)創(chuàng)建PVC、pod、service、ingress規(guī)則
(4)配置映射
(5)訪(fǎng)問(wèn)測(cè)試
(6)deployment+NodePort總結(jié)
①nodeport由ingress的service創(chuàng)建的,不是deployment的service創(chuàng)建的
②nodeport適用于小集群
③ingress根據(jù)標(biāo)簽匹配ingress-nodeport,ingress-nodeport再根據(jù)標(biāo)簽匹配service,service再匹配deployment
④每個(gè)節(jié)點(diǎn)都有一個(gè)controller,controller接收到解析后的請(qǐng)求ip和端口
(7)ingress暴露服務(wù)的方式:核心的控制組件nginx-ingress-controller
①host——ingress的配置找到pod——controller轉(zhuǎn)發(fā)請(qǐng)求到pod
②nodeport——controller——ingress——service轉(zhuǎn)發(fā)請(qǐng)求到pod
③nodeport暴露端口的方式是最簡(jiǎn)單的方法,但是nodeport多了一層nat地址轉(zhuǎn)換
并發(fā)量大的對(duì)性能會(huì)有一定的影響,內(nèi)部都會(huì)用nodeport
9、通過(guò)虛擬主機(jī)的方式實(shí)現(xiàn)http代理
(1)通過(guò)ingress方式實(shí)現(xiàn):一個(gè)ingress可以訪(fǎng)問(wèn)不同的主機(jī)
(2)創(chuàng)建pod和service
(3)創(chuàng)建ingress
(4)配置映射
10、總結(jié):
(1)ingress的核心組件:nginx-ingress-controller、traefik,都是開(kāi)源的ingress-controller
(2)ingress的三種工作方式(重點(diǎn))
deployment+loadbalancer: 需要云平臺(tái)提供一個(gè)負(fù)載均衡的公網(wǎng)地址,公有云上配置 |
daemonset+hostnetwork+nodeselector:指定節(jié)點(diǎn)部署controller ①缺點(diǎn):和宿主機(jī)共享網(wǎng)絡(luò),只能是一個(gè)controller的pod,多個(gè)端口會(huì)造成沖突 ②hostnetwork會(huì)和宿主機(jī)共享網(wǎng)絡(luò) |
deployment+nodeport:最常見(jiàn)、最常用、最簡(jiǎn)單的方式 ①集中一個(gè)nodeport端口,所有的ingress的請(qǐng)求都會(huì)轉(zhuǎn)發(fā)到nodeport,再由service把流量轉(zhuǎn)發(fā)到pod |
(3)一個(gè)ingress的nodeport可以實(shí)現(xiàn)訪(fǎng)問(wèn)多個(gè)虛擬主機(jī)(和nginx一樣)
11、基于ingress實(shí)現(xiàn)https代理訪(fǎng)問(wèn)(證書(shū)、密鑰)
(1)生成密鑰、證書(shū)
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/0=nginxsvc"
req |
生成證書(shū)文件的請(qǐng)求 |
-x509 |
生成x.509自簽名的證書(shū) |
-sha256 |
表示使用sha-256的散列算法 |
-nodes |
表示生成的密鑰不加密 |
-day 365 |
證書(shū)有效期是265天 |
-newkey rsa:2048 |
RSA的密鑰對(duì),長(zhǎng)度2048位 |
-keyout tls.key -out tls.crt |
密鑰文件key、證書(shū)文件crt |
-subj"/CN=nginxsvc/O=nginxsvc" |
主題CN(common name)O:表示organization組織 |
(2)創(chuàng)建secret,保存證書(shū)和密鑰
kubectl create secret tls tls-secret --key tls.key --cert tls.crt
(3)創(chuàng)建pod、service、ingress
(4)設(shè)置映射
(5)測(cè)試訪(fǎng)問(wèn)
①虛擬機(jī)測(cè)試訪(fǎng)問(wèn)
②負(fù)載均衡
內(nèi)部實(shí)現(xiàn)ingress訪(fǎng)問(wèn)https:DNS域名解析
外部實(shí)現(xiàn)ingress訪(fǎng)問(wèn)https:購(gòu)買(mǎi)域名
12、ngixn的登錄賬戶(hù)認(rèn)證
(1)htpasswd生成一個(gè)認(rèn)證文件,認(rèn)證文件只能是auth
yum -y install httpd
htpasswd -c auth hyde
(2)創(chuàng)建secret保存auth認(rèn)證文件
ubectl create secret generic basic-auth --from-file=auth
(3)創(chuàng)建ingress
(4)配置映射
(5)測(cè)試訪(fǎng)問(wèn)
13、nginx的重寫(xiě)rewrite(nginx的重定向)
(1)創(chuàng)建ingress
(2)設(shè)置映射
(3)測(cè)試訪(fǎng)問(wèn)
nginx-ingress-controller全部完成
14、traefik ingress controller(和nginx ingress controller的原理一樣)
(1)traefik是一個(gè)為了讓部署微服務(wù)更加快捷而誕生的一個(gè)http反向代理、負(fù)載均衡
①traefik設(shè)計(jì)時(shí)就能夠?qū)崟r(shí)的和k8s的api進(jìn)行交互,可以感知后端service以及pod的變化,可以自動(dòng)更新配置和重載
(2)traefik的部署方式
①daemonset
②deployment
(3)daemonset部署的特點(diǎn)
①每個(gè)節(jié)點(diǎn)都會(huì)部署一個(gè)traefik
②節(jié)點(diǎn)感知,可以自動(dòng)發(fā)現(xiàn)、更新容器的配置,不需要手動(dòng)重載
③缺點(diǎn):資源占用,在大型集群中,daemonset可能會(huì)運(yùn)行多個(gè)traefik的實(shí)例,尤其是在不需要大量容器運(yùn)行的情況下(資源利用率不是很好,沒(méi)有辦法擴(kuò)縮容)
④應(yīng)用于部署對(duì)外集群(對(duì)外的業(yè)務(wù)會(huì)經(jīng)常變更,使用daemonset可以更好的、自動(dòng)的發(fā)現(xiàn)服務(wù)配置變更)
⑤設(shè)定標(biāo)簽:traffic-type:internal(對(duì)內(nèi)服務(wù))
(4)deployment部署的特點(diǎn)
①優(yōu)點(diǎn):集中辦公控制,可以使用少量的實(shí)例來(lái)運(yùn)行處理整個(gè)集群的流量,更容易升級(jí)和維護(hù)
②缺點(diǎn):deployment的負(fù)載均衡不會(huì)均分到每個(gè)節(jié)點(diǎn);無(wú)法感知容器內(nèi)部的配置變化,需要手動(dòng)更新
③應(yīng)用于部署對(duì)內(nèi)集群(內(nèi)部的業(yè)務(wù)相對(duì)穩(wěn)定,更新和變化也比較少,更適合deployment)
④設(shè)定標(biāo)簽:traffic-type:iexternal(對(duì)外服務(wù))
(5)traefix-ingress和nginx-ingress的區(qū)別
①工作原理都一樣,都是七層代理,都可以動(dòng)態(tài)的更新配置,都可以自動(dòng)發(fā)現(xiàn)服務(wù)
②traefix自動(dòng)更新的重載速度更快,更方便
③traefix適用于小集群,traefix處理并發(fā)的能力只有nginx-ingress的60%
(6)traefik的實(shí)例之deployment+nodeport模式
①生成模版文件
wget ?https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-deployment.yaml
wget ?https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-rbac.yaml
wget ?https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-ds.yaml
wget ?https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/ui.yaml
②運(yùn)行配置文件
③訪(fǎng)問(wèn):20.0.0.71:31800
* 刪除ingress
④創(chuàng)建pod、service、ingress
⑤測(cè)試訪(fǎng)問(wèn)
⑥設(shè)置映射
⑦配置自動(dòng)發(fā)現(xiàn)
* 縮容
* 擴(kuò)容
15、總結(jié)
(1)ingress的組件(開(kāi)源):nginx-ingresscontroller、traefik-ingress-controller
(2) nginx-ingress的部署方式
①deployment+loadbalancer:公有云提供負(fù)載均衡的公網(wǎng)地址
②daemonset+hostnetwork+nodeselector:和節(jié)點(diǎn)服務(wù)器共享網(wǎng)絡(luò),一個(gè)節(jié)點(diǎn)只能部署一個(gè)controller pod,使用宿主機(jī)的端口,性能最好,適合大并發(fā)
③deployment+nodeport:最常見(jiàn)、最常用、最簡(jiǎn)單的方法,但是性能不太好,多了一層nat的地址轉(zhuǎn)發(fā),不太適合大并發(fā)
(3)traefik-ingress的部署方式
①對(duì)外:daemonset,可以自動(dòng)更新容器的配置(host,使用節(jié)點(diǎn)的網(wǎng)絡(luò))
②對(duì)內(nèi):deployment,無(wú)法自動(dòng)更新容器的配置(nodeport)
(4)基于ingress實(shí)現(xiàn)https代理訪(fǎng)問(wèn)(證書(shū)、密鑰)
①先生成密鑰、證書(shū)
②創(chuàng)建secret,保存證書(shū)和密鑰
③創(chuàng)建ingress的時(shí)候把secret導(dǎo)入進(jìn)去
(5)nginx登錄加密認(rèn)證
①htpasswd生成一個(gè)認(rèn)證文件,認(rèn)證文件只能是auth
②創(chuàng)建ingress的兩個(gè)代碼
第一條:聲明認(rèn)證類(lèi)型
第二條:導(dǎo)入認(rèn)證的密鑰文件(以secret的方式存儲(chǔ)在集群中)
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-816161.html
(6)nginx的rewrite重定向
①在指定的ingress文件當(dāng)中聲明的url都會(huì)跳轉(zhuǎn)到指定的頁(yè)面
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-816161.html
到了這里,關(guān)于k8s的對(duì)外服務(wù)ingress的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!