日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何在Kubernetes中暴露服务访问

發(fā)布時間:2025/3/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在Kubernetes中暴露服务访问 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Kubernetes概述


最近的一年,kubernetes的發(fā)展如此閃耀,正被越來越多的公司采納用于生產(chǎn)環(huán)境的實踐。同時,我們可以在最著名的開發(fā)者問答社區(qū)StackOverflow上看到k8s的問題數(shù)量的增長曲線(2015.5-2016.5),開發(fā)者是用腳投票的,從這一點看也無疑證明了k8s的火爆程度。



k8s來源于Google生產(chǎn)環(huán)境的實踐,社區(qū)活躍度很高,在github上的Star數(shù)17k+,30k+commits,同時由Google主導CNCF基金會也在強力運作k8s的社區(qū)發(fā)展,也就在幾個月前OpenStack社區(qū)宣布全面擁抱k8s,這也宣布了全球第大的開源IAAS云社區(qū)已經(jīng)選擇k8s作為容器的唯一解決方案。



談到k8s,無論怎樣的議題怎樣的開始,我們都先介紹一個k8s整體架構(gòu)(如下圖所示):



etcd 作為配置中心和存儲服務(wù),保存了所有組件的定義以及狀態(tài),k8s的多個組件之間的互相交互也主要通過etcd;kube-apiserver 提供和外部交互的接口,提供安全機制,大多數(shù)接口都是直接讀寫etcd中的數(shù)據(jù);kube-scheduler 調(diào)度器,主要干一件事情,監(jiān)聽etcd中的pod目錄變更,然后通過調(diào)度算法分配node,最后調(diào)用apiserver的bind接口將分配的node和pod進行關(guān)聯(lián);kube-controller-manager 承擔了master的主要功能,比如和CloudProvider(IaaS)交互,管理node,pod,replication,service,namespace等?;緳C制是監(jiān)聽etcd /registry/events下對應的事件,進行處理;kubelet 主要包含容器管理,鏡像管理,Volume管理等;kube-proxy 主要用于實現(xiàn)k8s的service機制。提供一部分SDN功能以及集群內(nèi)部的智能LoadBalancer。

?

本文分享的內(nèi)容主要是在minion節(jié)點上的pod和service上,pod是k8s應用的具體實例抽象,而service便是這些抽象的集合。



ClusterIP & NodePort & Loadbalancer


回到本文的主題,在k8s中暴露Service訪問(無論內(nèi)部還是外部),都要經(jīng)過kube-proxy,比如下圖中我們定義一個Service,便可以通過訪問Service的80端口轉(zhuǎn)發(fā)到Pod的9376端口上。



kube-proxy在轉(zhuǎn)發(fā)時主要有兩種模式Userspace和Iptables。如下圖,左側(cè)是Userspace模式,也是kube-proxy默認的方式,所有的轉(zhuǎn)發(fā)都是通過kube-proxy軟件實現(xiàn)的;右側(cè)是Iptables模式,所有轉(zhuǎn)發(fā)都是通過Iptables內(nèi)核模塊實現(xiàn),而kube-proxy只負責生成相應的Iptables規(guī)則。從效率上看,Iptables會更高一些,但是需要Iptables version >=1.4.11,Iptables模式在k8s1.2版本放出,是否開啟使用還需要具體斟酌。



從Service本身看,有三種方式來暴露訪問:


  • ClusterIP:使用集群內(nèi)的私有ip —— 這是默認值

  • NodePort:除了使用cluster ip外,也將service的port映射到每個node的一個指定內(nèi)部port上,映射的每個node的內(nèi)部port都一樣。

  • LoadBalancer:使用一個ClusterIP & NodePort,但是會向cloud provider申請映射到service本身的負載均衡。

?

LoadBalancer Provider主要有aws、azure、openstack、gce等云平臺提供。相關(guān)實現(xiàn)可以在k8s的源碼中看到,如下圖所示:



Ingress


Ingress也是k8s中單獨定義的對象(如下圖所示),它的作用就是實現(xiàn)對外暴露訪問的負載均衡,那么它和Service本身LoadBalancer有哪些區(qū)別呢?Ingress支持L4、L7負載均衡,LoadBalancer設(shè)計上只支持L4;Ingress基于Pod部署,并將Pod網(wǎng)絡(luò)設(shè)置成external network;Ingress controller支持Nginx、Haproxy、GCE-L7,能夠滿足企業(yè)內(nèi)部使用。



在實際使用時,Ingress的架構(gòu)如下圖所示:



但是在實際使用中,pod可能會產(chǎn)生漂移,由于Ingress Controller也是基于Pod部署,這樣Ingress對外的IP會發(fā)生變化。在企業(yè)內(nèi)部都會在防火墻上給Service的訪問IP設(shè)定規(guī)則,而IP變動對這一機制是致命的,因為企業(yè)不可能經(jīng)常手動修改防火墻規(guī)則。

?

那么我們就需要一個VIP功能,同時也要能保證Ingress的HA。我們可以考慮在Ingress Controller基礎(chǔ)上增加一個keepalived,可以利用keepalived+haproxy的機制來完成VIP的功能。要實現(xiàn)這一機制,可以參考并改動k8s社區(qū)中的contrib-keepalived-vip機制。



除了以上介紹的暴露服務(wù)機制,還有Hpcloud-service-loadbalancer ,它實現(xiàn)了支持keepalived+nginx、F5、OpenStack Lbaas這些方式,并且支持L4 & L7負載均衡,但是與k8s社區(qū)本身的發(fā)展機制并不兼容,所以一直沒有被合并到社區(qū)中。另外還有 Contrib-service-loadbalancer ,這個是社區(qū)內(nèi)部正在發(fā)展的,它的想法更遠大,考慮會支持Cross-namespace、 Cross-cluster這種級別的負載均衡,同時也是設(shè)計了插件機制,目前支持Haproxy,同樣也支持L4 & L7負載均衡。


Rancher K8s中暴露服務(wù)訪問


Rancher自己實現(xiàn)了一個rancher-ingress-controller,它本質(zhì)上是包裝了k8s-ingress-controller,在真正創(chuàng)建負載均衡器上它會調(diào)用Rancher Cattle API來創(chuàng)建Rancher自身的LB。



相關(guān)代碼也是開源的,https://github.com/rancher/lb-controller,lb-controller在啟動時候會指定provider為rancher,對應的實現(xiàn)也可在package provider/rancher中看到。



創(chuàng)建Ingress后,也可在Rancher UI上展現(xiàn)出來。


??

創(chuàng)建過程,可以看我錄制這段視頻教程,http://v.youku.com/v_show/id_XMTc2MDAzNjQ4OA==.html


原文來源:Rancher Labs


轉(zhuǎn)載于:https://blog.51cto.com/12462495/1895492

總結(jié)

以上是生活随笔為你收集整理的如何在Kubernetes中暴露服务访问的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。