中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Kubernetes中暴露服務訪問

發布時間:2020-07-10 14:13:13 來源:網絡 閱讀:2277 作者:RancherLabs 欄目:網絡安全

Kubernetes概述


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


如何在Kubernetes中暴露服務訪問


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


如何在Kubernetes中暴露服務訪問


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


如何在Kubernetes中暴露服務訪問


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

 

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


如何在Kubernetes中暴露服務訪問


ClusterIP & NodePort & Loadbalancer


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


如何在Kubernetes中暴露服務訪問


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


如何在Kubernetes中暴露服務訪問


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


  • ClusterIP:使用集群內的私有ip —— 這是默認值

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

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

 

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


如何在Kubernetes中暴露服務訪問


Ingress


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


如何在Kubernetes中暴露服務訪問


在實際使用時,Ingress的架構如下圖所示:


如何在Kubernetes中暴露服務訪問


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

 

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


如何在Kubernetes中暴露服務訪問


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


Rancher K8s中暴露服務訪問


Rancher自己實現了一個rancher-ingress-controller,它本質上是包裝了k8s-ingress-controller,在真正創建負載均衡器上它會調用Rancher Cattle API來創建Rancher自身的LB。


如何在Kubernetes中暴露服務訪問


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


如何在Kubernetes中暴露服務訪問


創建Ingress后,也可在Rancher UI上展現出來。


如何在Kubernetes中暴露服務訪問

  

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


原文來源:Rancher Labs


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沁水县| 平昌县| 临江市| 临漳县| 都昌县| 绍兴县| 嘉定区| 宁晋县| 九龙县| 博爱县| 拜泉县| 宣汉县| 高安市| 扎囊县| 西乌珠穆沁旗| 开原市| 民勤县| 南京市| 宣威市| 北宁市| 白玉县| 甘泉县| 喀喇沁旗| 突泉县| 高邑县| 宜良县| 周至县| 隆化县| 巴林左旗| 巩义市| 洪雅县| 富宁县| 钟山县| 北海市| 汤阴县| 鹤山市| 垦利县| 顺昌县| 新河县| 华亭县| 方正县|