[譯]Kube Router Documentation

體系結構

Kube路由器是圍繞觀察者和控制器的概念而建立的。 觀察者使用Kubernetes監視API來獲取與創建,更新和刪除Kubernetes對象有關的事件的通知。 每個觀察者獲取與特定API對象相關的通知。 在從API服務器接收事件時,觀察者廣播事件。 控制器注冊以獲取觀察者的事件更新,并處理事件。
Kube-router由3個核心控制器和多個觀察者組成,如下圖所示。


每個controller 遵循以下結構

func Run() { for { Sync() // control loop that runs for ever and perfom sync at periodic interval } }
func OnUpdate() { Sync() // on receiving update of a watched API object (namespace, node, pod, network policy etc) } Sync() { //re-concile any state changes } Cleanup() { // cleanup any changes (to iptables, ipvs, network etc) done to the system }

查看Kube-router實戰

網絡服務控制器

網絡服務控制器負責從Kubernetes API服務器讀取服務和端點信息,并相應地在每個群集節點上配置IPVS。
請閱讀博客基于iptables與Kube-proxy的設計細節和利弊對比https://cloudnativelabs.github.io/post/2017-05-10-kube-network-service-proxy/
基于Kubernetes網絡服務代理的Kube-route IPVS演示

asciicast
特征:

  • 輪詢負載均衡
  • 基于客戶端IP的會話保持
  • 如果服務控制器與網絡路由控制器(帶有–run-router標志的kube-router)一起使用,源IP將被保留。
  • 用–masquerade-all參數明確標記偽裝(SNAT)

網絡策略控制器

網絡策略控制器負責從Kubernetes API服務器讀取命名空間,網絡策略和pod信息,并相應地配置iptables以向pod提供入口過濾.
Kube-router支持networking.k8s.io/NetworkPolicy 接口 或網絡策略V1/GA semantics以及網絡策略的beta語義
請閱讀博客網絡策略控制器的設計細節 https://cloudnativelabs.github.io/post/2017-05-1-kube-network-policies/
Kube-router的iptables基于網絡策略的實現演示

asciicast

網絡路由控制器

網絡路由控制器負責讀取由控制器管理器分配給節點的pod CIDR,并將路由通告給集群中其余節點(BGP peers)。對于基于pod-to-pod網絡,使用BGP對于用戶來說是透明的.

asciicast
但是,BGP可以用于其他用例,如通告集群ip,可路由pod ip等。只有在這種情況下,才需要了解BGP和配置。請參閱下面的演示kube-router如何向外部BGP路由器發布集群IP和pod cidrsasciicast

用戶指南

嘗試使用集群安裝程序安裝Kube-router

在Kubernetes上部署Kube-router的最好的入門方法是使用集群安裝程序.

kops

請查看steps 使用Kops部署Kubernetes集群與Kube-router。

bootkube

請查看steps 使用 bootkube部署Kubernetes集群與Kube-router。

kubeadm

請查看steps使用Kubeadm部署Kubernetes集群與Kube-router。

deployment

根據要使用的kube-router的功能,可以使用多個部署選項. 你可以使用這些參數 –run-firewall, –run-router, –run-service-proxy 有選擇地只啟用kube-router所需的功能。
您也可以選擇運行kube-router作為在每個群集節點上運行的agent。 另外可以通過daemonset在每個節點上運行kube-router作為pod。

命令行選項

Usage of ./kube-router: --advertise-cluster-ip 將該服務的集群IP添加到RIB,以便通告給BGP peers. --advertise-external-ip 將服務的外部IP添加到RIB,以便將其通告給BGP peers. --cleanup-config 清理iptables規則,ipvsipset配置并退出. --cluster-asn uint 集群節點運行iBGPASN編號. --cluster-cidr string 群集中的CIDR范圍。它被用來識別pods的范圍. --config-sync-period duration apiserver配置同步之間的延遲(例如“5s”,“1m”)。必須大于0.(默認1m0s --enable-overlay enable-overlay設置為true時,IP-in-IP隧道將用于跨不同子網中節點的pod-pod聯網。如果設置為false,則不使用隧道,并且路由基礎架構預計為不同子網中的節點之間的pod-pod聯網路由流量(默認值為true --enable-pod-egress Pod到群集外的SNAT流量。 (默認為true --hairpin-mode 為每個服務端點添加iptable規則以支持流量管控. -h, --help 打印使用信息. --hostname-override string 覆蓋節點的NodeName。如果kube-router無法自動確定您的NodeName,請設置此項. --iptables-sync-period duration iptables規則同步之間的延遲(例如'5s''1m')。必須大于0.(默認1m0s --ipvs-sync-period duration ipvs config同步之間的延遲(例如'5s''1m''2h22m')。必須大于0.(默認1m0s --kubeconfig string 具有授權信息的kubeconfig文件的路徑(主位置由主標志設置)。 --masquerade-all SNAT所有流量到群集IP /節點端口。 --master string Kubernetes API服務器的地址(覆蓋kubeconfig中的任何值)。 --nodeport-bindon-all-ip 對于NodePort類型的服務,創建監聽節點的所有IPIPVS服務. --nodes-full-mesh 集群中的每個節點都將建立與其他節點的BGP對等關系。 (默認為true --peer-router-asns uintSlice 集群節點將向其通告集群ip和節點的pid cidrBGP peersASN編號。 (默認[]) --peer-router-ips ipSlice 所有節點將對等的外部路由器的IP地址,并通告集群ippod cidr (默認[]) --peer-router-passwords stringSlice 用“--peer-router-ips”定義的BGP peers進行認證的密碼。 --routes-sync-period duration 路線更新與廣播之間的延遲(例如“5s”,“1m”,“2h22m”)。必須大于0.(默認1m0s --run-firewall 啟用網絡策略 - 設置iptablespod提供入口防火墻。 (默認為true --run-router 啟用Pod網絡 - 通過iBGP發布并學習到Pod的路由。 (默認為true --run-service-proxy 啟用服務代理 - Kubernetes服務設置IPVS (默認為true```

依賴

  • Kube-router需要訪問kubernetes API服務器以獲取有關Pod,服務,端點,網絡策略等的信息。所需的最少信息是關于在何處訪問kubernetes API服務器的詳細信息. 這個信息可以通過kube-router -master=http://192.168.1.99:8080/或kube-router -kubeconfig=<kubeconfig文件路徑>傳遞。
  • 如果在節點上運行kube-router作為agent,則必須在每個節點上安裝ipset軟件包(當以守護進程集的形式運行時,容器映像將使用ipset預先打包)
  • 如果您選擇使用kube-router進行pod-to-pod網絡連接,則需要將Kubernetes控制器管理器通過傳遞–allocate-node-cidrs = true標志并提供cluster-cidr來配置分配pod CIDR。 (例如通過傳遞–cluster-cidr = 10.1.0.0/16)
  • 如果您選擇以守護進程運行kube-router,那么kube-apiserver和kubelet必須以“–allow-privileged = true”選項運行
  • 如果您選擇使用kube-router作為pod-to-pod網絡連接,則必須將Kubernetes集群配置為使用CNI網絡插件。在每個節點上,CNI conf文件預計將以/etc/cni/net.d/10-kuberouter.conf的形式出現。應使用CNI插件和用于IPAM的“host-local”。示例conf文件,可以下載wget -O /etc/cni/net.d/10-kuberouter.conf https://raw.githubusercontent.com/cloudnativelabs/kube-router/master/cni/10-kuberouter .conf

作為daemonset運行

這是部署kube-router(不要忘記確保需求)的最快方法。只需運行:

kubectl apply -f https://raw.githubusercontent.com/cloudnativelabs/kube-router/master/daemonset/kube-router-all-service-daemonset.yaml

以上將自動在每個節點上運行kube-router作為pod。您可以根據需要更改daemonset中定義的參數以匹配您的需要。有些示例可以在https://github.com/cloudnativelabs/kube-router/tree/master/daemonset中找到,使用不同的參數來選擇kube-router應運行的服務.

作為agent運行

您可以選擇運行kube-router作為在每個節點上運行的代理。例如,如果您只想讓kube-router為pod提供入口防火墻,那么您可以這樣啟動kube-router

kube-router --master=http://192.168.1.99:8080/ --run-firewall=true --run-service-proxy=false --run-router=false

清理配置

您可以通過運行在節點上的kube-router清除所有已完成的配置(對ipvs,iptables,ip routes)

 kube-router --cleanup-config

嘗試使用kube-router作為kube-proxy的替代品

如果你有一個使用kube-proxy,并且想要嘗試kube-router來做服務代理,你可以這樣做

kube-proxy --cleanup-iptables

接下來

kube-router --master=http://192.168.1.99:8080/ --run-service-proxy=true --run-firewall=false --run-router=false

如果你想回到kube-proxy,那么通過運行清理由kube-router完成的配置

 kube-router --cleanup-config

并使用您的配置運行kube-proxy。 – 一般步驟

發夾彎模式(一種自己訪問自己的模式)

從service后面的Pod到其自己的ClusterIP:PORT的通信 默認不支持。不過,可以通過對每個服務添加kube-router.io / service.hairpin =注釋,或者通過集群中的所有服務啟動。
另外, 對于每個節點上的所有veth接口,hairpin_mode sysctl選項必須設置為1. 這可以通過在您的CNI配置中添加“hairpinMode”:true選項來完成,如果所有集群節點已經在運行kubernetes。
如果發送源IP來自Service ClusterIP,Hairpin traffic將被發現的發送點看到。

Hairpin Mode示例

10-kuberouter.conf

{ "name":"mynet", "type":"bridge", "bridge":"kube-bridge", "isDefaultGateway":true, "hairpinMode":true, "ipam": { "type":"host-local" } }

為服務“my-service”啟用hairpin traffic:

kubectl annotate service my-service "kube-router.io/service.hairpin="

服務器直接返回

請閱讀以下博客,了解如何結合使用DSR和“–advertise-external-ip”構建高度可擴展和可用的入口。 https://cloudnativelabs.github.io/post/2017-11-01-kube-high-available-ingress/
您可以為每個服務啟用DSR(直接服務器返回)功能。當啟用的服務端點將直接響應客戶端通過簽署服務代理。啟用DSR時,Kube-router將使用LVS的隧道模式來實現此功能。
要啟用DSR,您需要使用kube-router.io/service.dsr = tunnel注釋來注釋服務。例如,

kubectl annotate service my-service "kube-router.io/service.dsr=tunnel"

在當前的實現中,當在服務上應用注釋時,DSR將僅適用于外部IP。
此外,當使用DSR時,當前的實現不支持端口重新映射。所以你需要使用相同的端口和目標端口的服務
你需要在kube-router守護進程清單中啟用hostIPC:true和hostPID:true。并且必須將主路徑/var/run/docker.sock設置為kube-router的一個volumemount。
上述更改需要kube-router輸入pod namespace,并在pod中創建ipip隧道,并將外部IP分配給VIP。
對于示例清單,請查看啟用DSR要求的[manifest](../ daemonset / kubeadm-kuberouter-all-features-dsr.yaml).

負載均衡調度算法

Kube-router使用LVS作為服務代理。 LVS支持豐富的調度算法。您可以為該服務添加注釋以選擇一個調度算法。當一個服務沒有注釋時,默認情況下選擇“輪詢”調度策略

For least connection scheduling use:
kubectl annotate service my-service "kube-router.io/service.scheduler=lc" For round-robin scheduling use:
kubectl annotate service my-service "kube-router.io/service.scheduler=rr" For source hashing scheduling use:
kubectl annotate service my-service "kube-router.io/service.scheduler=sh" For destination hashing scheduling use:
kubectl annotate service my-service "kube-router.io/service.scheduler=dh"

BGP 配置

Configuring BGP Peers

本文轉自kubernetes中文社區-[譯]Kube Router Documentation

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537307.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537307.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537307.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

windows11 22H2資源管理器開啟多標簽頁

效果 步驟 windows11 22H2后續可能會推送該功能&#xff0c;現在是隱藏的&#xff0c;需要借助工具把這個隱藏功能開啟 工具&#xff1a;vivetool 下載&#xff1a;Releases thebookisclosed/ViVe GitHub 步驟1&#xff1a;右鍵開始菜單&#xff0c;選擇“終端&#xff08;…

python像素處理_Python 處理圖片像素點的實例

###在做爬蟲的時候有時需要識別驗證碼,但是驗證碼一般都有干擾物,這時需要對驗證碼進行預處理,效果如下:from PIL import Imageimport itertoolsimg Image.open(C:/img.jpg).convert(L) #打開圖片,convert圖像類型有L,RGBA# 轉化為黑白圖def blackWrite(img):blackXY []# 遍歷…

Mysql更改表名大小寫不敏感

編輯配置文件 vi /etc/my.cnf 在[mysqld]后添加添加 lower_case_table_names1 重啟服務 service mysqld stop service mysqld start 部署會遇到的問題&#xff1a; MySQL在Linux下數據庫名、表名、列名、別名大小寫規則是這樣的&#xff1a;   1、數據庫名與表名是嚴格區分大…

遇到“我覺得行才算行”的業主怎么辦?

目錄 案例 分析 案例 項目初期UI設計需求不確定,我們設計了幾稿,業主還是不滿意,沒有確定最終稿。后來呢,業主安排了一位內部的美工A過來。美工A給出了很多修改意見,我們根據美工A的意見進行了修改,又反反復復改了好幾版,最后業主不算滿意地確定了。 后來項目要收尾…

python讀取多個文件夾下所有txt_Python實現合并同一個文件夾下所有txt文件的方法示例...

本文實例講述了Python實現合并同一個文件夾下所有txt文件的方法。分享給大家供大家參考&#xff0c;具體如下&#xff1a;一、需求分析合并一個文件夾下所有txt文件二、合并效果三、python實現代碼# -*- coding:utf-8*-import sysreload(sys)sys.setdefaultencoding(utf-8)impo…

項目是臨時的,那項目組成員也是臨時的嗎?

在PMBOK定義項目屬性&#xff0c;“臨時性”是項目的三大屬性之一。 在“結束項目或階段”過程里的活動&#xff0c;重新分配人員&#xff1a;釋放團隊資源&#xff0c;在一些合同里面&#xff0c;項目結束后&#xff0c;需要給客戶提供培訓和一段時間的維護保修&#xff0c;那…

ceph安裝配置

簡介 ceph是一個開源分布式存儲系統&#xff0c;支持PB級別的存儲&#xff0c;支持對 象存儲&#xff0c;塊存儲和文件存儲&#xff0c;高性能&#xff0c;高可用&#xff0c;可擴展。 部署網絡建議架構圖 部署 部署架構圖&#xff0c;本次實驗部署jewel版本 實驗環境的Vagrant…

推薦好用的JavaScript模塊

2019獨角獸企業重金招聘Python工程師標準>>> 譯者按&#xff1a; 作者將自己常用的JavaScript模塊分享給大家。 原文&#xff1a;? JavaScript Modules Worth Using ?譯者: Fundebug為了保證可讀性&#xff0c;本文采用意譯而非直譯。另外&#xff0c;本文版權歸原…

python直接連接oracle_python連接oracle

一&#xff1a;弄清版本&#xff0c;最重要&#xff01;&#xff01;&#xff01;首先安裝配置時&#xff0c;必須把握一個點&#xff0c;就是版本一致&#xff01;包括&#xff1a;系統版本&#xff0c;python版本&#xff0c;oracle客戶端的版本&#xff0c;cx_Oracle的版本&…

項目計劃不要拖,要趕緊排

目錄 案例 復盤 應對 總結 案例 業主:這個項目很急,趕緊干活吧,明天就安排人來干活。 于是,項目經理問公司要來資源,第二天就投入到項目里。 公司只有一個項目,這樣搞,項目能順利實施,業主滿意,公司老板感覺這種方法不錯哦。 當公司項目越來越多了,員工也越來…

select函數_SQL高級功能:窗口函數

一、窗口函數有什么用&#xff1f;在日常生活中&#xff0c;經常會遇到需要在每組內排名&#xff0c;比如下面的業務需求&#xff1a;排名問題&#xff1a;每個部門按業績來排名topN問題&#xff1a;找出每個部門排名前N的員工進行獎勵面對這類需求&#xff0c;就需要使用sql的…

客戶端C++與前端js交互

客戶端與前端交互 qwebchannel.js文件引入建立通信// c發送消息給js new QWebChannel(qt.webChannelTransport, function(channel){var content channel.objects.jsContext;// 建立通信后&#xff0c;客戶端通過調用 sMsg 方法來執行后面的回調函數&#xff0c;從而實現c與j…

python動態映射_sqlalchemy動態映射

似乎您可以直接使用屬性&#xff0c;而不是使用columnsdict。考慮以下設置&#xff1a;from sqlalchemy import Table, Column, Integer, Unicode, MetaData, create_enginefrom sqlalchemy.orm import mapper, create_sessionclass Word(object):passwordColumns [english, k…

linux外接顯示屏,關掉本身的筆記本電腦

https://blog.csdn.net/a2020883119/article/details/79561035 先用xrandr命令查看&#xff1a; eDP-1 connected eDP-1是連接著的 關掉&#xff1a;sudo xrandr --output eDP-1 --off 打開&#xff1a;sudo xrandr --output eDP-1 --auto

發揮項目“臨時性”威力,讓項目順利實施

所謂臨時性,就是要有明確的“開始”和“結束”。雖然大家都知道項目一定會有開始和結束的,但要更多地關注“明確“。 問題1:問商務(售前)或業主,這個項目什么時候結束? 答:商務或業主他們有時候也不知道,因為國內的項目大多數是提前開始交付,是一邊交付,一邊把里程…

上拉加載更多后臺數據_6-7【微信小程序全棧開發課程】記錄頁面(七)--分頁加載記錄數據...

現在是一次性加載所有的記錄數據&#xff0c;數據多的時候&#xff0c;會加載比較慢&#xff0c;所以我們改成分頁加載&#xff0c;一次最多加載15條數據每次拉倒底部都會自動加載下一頁的數據&#xff0c;知道所有的數據加載完成1、添加data變量編輯record.vue文件&#xff0c…

spring cloud eureka服務注冊和調用

SPRING INITIALIZR構建工程 spring boot 可通過SPRING INITIALIZR構建項目訪問SPRING INITIALIZR官網&#xff0c;填寫項目相關信息后&#xff0c;生成項目。將下載的項目解壓&#xff0c;打開idea&#xff0c;file-->new-->project from existing sources。import proje…

去從事有門檻有積累的工作

現在社會的IT工作&#xff0c;一時風光無限&#xff0c;但是積累性不足。跟老外比較起來&#xff0c;國內的IT算是民工級別的。再加上&#xff0c;前些年的培訓機構&#xff0c;不斷的輸出水平很次但很能加班的「人才」進入這個行業&#xff0c;「劣幣驅逐良幣」的效果下&#…

打印工資條怎么做到每個人都有表頭明細_朋友說:能不能用python,幫我寫一個“制作工資條”的自動化程序?...

本文說明今天和一個朋友吃飯&#xff0c;她說我經常使用Excel制作工資條&#xff0c;但是每個月都要做一遍&#xff0c;你能不能用python寫一個代碼&#xff0c;能夠自動化完成這個工作。這當然可以啦&#xff0c;就是這么牛逼&#xff01;我們先來看看原始數據是什么樣子的。那…

自定義按鈕 圖片標題位置隨意放置

自定義按鈕UIControl 寫在前面 #圖標和文字在一起是開發難免的問題&#xff0c;系統的按鈕默認是圖片居左的文字居右的&#xff0c; 且圖片和文字的距離不好調整&#xff0c;圖片的位置更是讓人頭疼&#xff0c; 故在閑暇之余封裝了一個控件。 復制代碼所用到知識的 # 1、蘋果系…