成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

kube-proxy的ipvs模式解讀

wangbinke / 2505人閱讀

摘要:模式在中添加,并成為自以來的默認(rèn)操作模式。支持比更復(fù)雜的負(fù)載平衡算法最小負(fù)載,最少連接,位置,加權(quán)等。安裝的集群默認(rèn)情況下,將在部署的集群中以模式運(yùn)行。

IPVS

這篇文章主要講述:

什么是IPVS?

IPVS 和 IPTABLES 區(qū)別

如何設(shè)置kube-proxy按照ipvs模式運(yùn)行和故障排查

什么是IPVS

IPVS(IP虛擬服務(wù)器)實(shí)現(xiàn)傳輸層負(fù)載平衡,通常稱為第4層LAN交換,是Linux內(nèi)核的一部分。

IPVS在主機(jī)上運(yùn)行,??在真實(shí)服務(wù)器集群前充當(dāng)負(fù)載均衡器。 IPVS可以將對(duì)基于TCP和UDP的服務(wù)的請(qǐng)求定向到真實(shí)服務(wù)器,并使真實(shí)服務(wù)器的服務(wù)在單個(gè)IP地址上顯示為虛擬服務(wù)。

IPVS vs. IPTABLES

IPVS模式在Kubernetes v1.8中引入,并在v1.9中進(jìn)入了beta。 IPTABLES模式在v1.1中添加,并成為自v1.2以來的默認(rèn)操作模式。 IPVS和IPTABLES都基于netfilter。 IPVS模式和IPTABLES模式之間的差異如下:

IPVS為大型集群提供了更好的可擴(kuò)展性和性能。

IPVS支持比iptables更復(fù)雜的負(fù)載平衡算法(最小負(fù)載,最少連接,位置,加權(quán)等)。

IPVS支持服務(wù)器健康檢查和連接重試等。

什么時(shí)候ipvs會(huì)降級(jí)到iptables

IPVS proxier將使用iptables,在數(shù)據(jù)包過濾,SNAT和支持NodePort類型的服務(wù)這幾個(gè)場(chǎng)景中。具體來說,ipvs proxier將在以下4個(gè)場(chǎng)景中回歸iptables。

kube-proxy 啟動(dòng)項(xiàng)設(shè)置了 –masquerade-all=true

如果kube-proxy以--masquerade-all = true開頭,則ipvs proxier將偽裝訪問服務(wù)群集IP的所有流量,其行為與iptables proxier相同。假設(shè)有一個(gè)群集IP 10.244.5.1和端口8080的服務(wù),那么ipvs proxier安裝的iptables應(yīng)該如下所示。

# iptables -t nat -nL

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
KUBE-SERVICES  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes service portals */

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
KUBE-SERVICES  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes service portals */

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
KUBE-POSTROUTING  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes postrouting rules */

Chain KUBE-POSTROUTING (1 references)
target     prot opt source               destination         
MASQUERADE  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes service traffic requiring SNAT */ mark match 0x4000/0x4000

Chain KUBE-MARK-DROP (0 references)
target     prot opt source               destination         
MARK       all  --  0.0.0.0/0            0.0.0.0/0            MARK or 0x8000

Chain KUBE-MARK-MASQ (6 references)
target     prot opt source               destination         
MARK       all  --  0.0.0.0/0            0.0.0.0/0            MARK or 0x4000

Chain KUBE-SERVICES (2 references)
target     prot opt source               destination         
KUBE-MARK-MASQ  tcp  -- 0.0.0.0/0        10.244.5.1            /* default/foo:http cluster IP */ tcp dpt:8080
在kube-proxy啟動(dòng)中指定集群CIDR

如果kube-proxy以--cluster-cidr = 開頭,則ipvs proxier將偽裝訪問服務(wù)群集IP的群集外流量,其行為與iptables proxier相同。假設(shè)kube-proxy隨集群cidr 10.244.16.0/24提供,服務(wù)集群IP為10.244.5.1,端口為8080,則ipvs proxier安裝的iptables應(yīng)如下所示。

# iptables -t nat -nL

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
KUBE-SERVICES  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes service portals */

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
KUBE-SERVICES  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes service portals */

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
KUBE-POSTROUTING  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes postrouting rules */

Chain KUBE-POSTROUTING (1 references)
target     prot opt source               destination         
MASQUERADE  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes service traffic requiring SNAT */ mark match 0x4000/0x4000

Chain KUBE-MARK-DROP (0 references)
target     prot opt source               destination         
MARK       all  --  0.0.0.0/0            0.0.0.0/0            MARK or 0x8000

Chain KUBE-MARK-MASQ (6 references)
target     prot opt source               destination         
MARK       all  --  0.0.0.0/0            0.0.0.0/0            MARK or 0x4000

Chain KUBE-SERVICES (2 references)
target     prot opt source               destination         
KUBE-MARK-MASQ  tcp  -- !10.244.16.0/24        10.244.5.1            /* default/foo:http cluster IP */ tcp dpt:8080
為LB類型服務(wù)指定Load Balancer Source Ranges

當(dāng)服務(wù)的LoadBalancerStatus.ingress.IP不為空并且指定了服務(wù)的LoadBalancerSourceRanges時(shí),ipvs proxier將安裝iptables,如下所示。
假設(shè)服務(wù)的LoadBalancerStatus.ingress.IP為10.96.1.2,服務(wù)的LoadBalancerSourceRanges為10.120.2.0/24。

# iptables -t nat -nL

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
KUBE-SERVICES  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes service portals */

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
KUBE-SERVICES  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes service portals */

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
KUBE-POSTROUTING  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes postrouting rules */

Chain KUBE-POSTROUTING (1 references)
target     prot opt source               destination         
MASQUERADE  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes service traffic requiring SNAT */ mark match 0x4000/0x4000

Chain KUBE-MARK-DROP (0 references)
target     prot opt source               destination         
MARK       all  --  0.0.0.0/0            0.0.0.0/0            MARK or 0x8000

Chain KUBE-MARK-MASQ (6 references)
target     prot opt source               destination         
MARK       all  --  0.0.0.0/0            0.0.0.0/0            MARK or 0x4000

Chain KUBE-SERVICES (2 references)
target     prot opt source       destination         
ACCEPT  tcp  -- 10.120.2.0/24    10.96.1.2       /* default/foo:http loadbalancer IP */ tcp dpt:8080
DROP    tcp  -- 0.0.0.0/0        10.96.1.2       /* default/foo:http loadbalancer IP */ tcp dpt:8080
支持 NodePort type service

為了支持NodePort類型的服務(wù),ipvs將在iptables proxier中繼續(xù)現(xiàn)有的實(shí)現(xiàn)。例如,

# kubectl describe svc nginx-service
Name:           nginx-service
...
Type:           NodePort
IP:             10.101.28.148
Port:           http    3080/TCP
NodePort:       http    31604/TCP
Endpoints:      172.17.0.2:80
Session Affinity:   None

# iptables -t nat -nL

[root@100-106-179-225 ~]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
KUBE-SERVICES  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes service portals */

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
KUBE-SERVICES  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes service portals */

Chain KUBE-SERVICES (2 references)
target     prot opt source               destination         
KUBE-MARK-MASQ  tcp  -- !172.16.0.0/16        10.101.28.148        /* default/nginx-service:http cluster IP */ tcp dpt:3080
KUBE-SVC-6IM33IEVEEV7U3GP  tcp  --  0.0.0.0/0            10.101.28.148        /* default/nginx-service:http cluster IP */ tcp dpt:3080
KUBE-NODEPORTS  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes service nodeports; NOTE: this must be the last rule in this chain */ ADDRTYPE match dst-type LOCAL

Chain KUBE-NODEPORTS (1 references)
target     prot opt source               destination         
KUBE-MARK-MASQ  tcp  --  0.0.0.0/0            0.0.0.0/0            /* default/nginx-service:http */ tcp dpt:31604
KUBE-SVC-6IM33IEVEEV7U3GP  tcp  --  0.0.0.0/0            0.0.0.0/0            /* default/nginx-service:http */ tcp dpt:31604

Chain KUBE-SVC-6IM33IEVEEV7U3GP (2 references)
target     prot opt source               destination
KUBE-SEP-Q3UCPZ54E6Q2R4UT  all  --  0.0.0.0/0            0.0.0.0/0            /* default/nginx-service:http */
Chain KUBE-SEP-Q3UCPZ54E6Q2R4UT (1 references)
target     prot opt source               destination         
KUBE-MARK-MASQ  all  --  172.17.0.2           0.0.0.0/0            /* default/nginx-service:http */
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            /* default/nginx-service:http */ tcp to:172.17.0.2:80
以 ipvs 模式 運(yùn)行kube-proxy 前提條件

確保IPVS需要內(nèi)核模塊

ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack_ipv4

檢查上訴已編譯到節(jié)點(diǎn)內(nèi)核中。使用

grep -e ipvs -e nf_conntrack_ipv4 /lib/modules/$(uname -r)/modules.builtin

如果編譯成內(nèi)核,則得到如下結(jié)果。

kernel/net/ipv4/netfilter/nf_conntrack_ipv4.ko
kernel/net/netfilter/ipvs/ip_vs.ko
kernel/net/netfilter/ipvs/ip_vs_rr.ko
kernel/net/netfilter/ipvs/ip_vs_wrr.ko
kernel/net/netfilter/ipvs/ip_vs_lc.ko
kernel/net/netfilter/ipvs/ip_vs_wlc.ko
kernel/net/netfilter/ipvs/ip_vs_fo.ko
kernel/net/netfilter/ipvs/ip_vs_ovf.ko
kernel/net/netfilter/ipvs/ip_vs_lblc.ko
kernel/net/netfilter/ipvs/ip_vs_lblcr.ko
kernel/net/netfilter/ipvs/ip_vs_dh.ko
kernel/net/netfilter/ipvs/ip_vs_sh.ko
kernel/net/netfilter/ipvs/ip_vs_sed.ko
kernel/net/netfilter/ipvs/ip_vs_nq.ko
kernel/net/netfilter/ipvs/ip_vs_ftp.ko

是否被加載

# load module 
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4

# to check loaded modules, use
lsmod | grep -e ipvs -e nf_conntrack_ipv4
# or
cut -f1 -d " "  /proc/modules | grep -e ip_vs -e nf_conntrack_ipv4

在使用IPVS模式之前,還應(yīng)在節(jié)點(diǎn)上安裝ipset等軟件包。

如果不滿足這些要求,Kube-proxy將回退到IPTABLES模式。

kubeadm 安裝的集群

默認(rèn)情況下,Kube-proxy將在kubeadm部署的集群中以iptables模式運(yùn)行。

如果您將kubeadm與配置文件一起使用,則可以在kubeProxy字段下指定ipvs模式,添加SupportIPVSProxyMode:true。

kind: MasterConfiguration
apiVersion: kubeadm.k8s.io/v1alpha1
...
kubeProxy:
  config:
    featureGates: SupportIPVSProxyMode=true
    mode: ipvs
...

如果您使用的是Kubernetes v1.8,您還可以在kubeadm init命令中添加標(biāo)志--feature-gates = SupportIPVSProxyMode = true(自v1.9起不推薦使用)

kubeadm init --feature-gates=SupportIPVSProxyMode=true
PS

如果成功啟用了ipvs模式,你應(yīng)該看到ipvs代理規(guī)則(使用ipvsadm)例如:

# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.1:443 rr persistent 10800
  -> 192.168.0.1:6443             Masq    1      1          0

當(dāng)本地群集運(yùn)行時(shí),kube-proxy日志中會(huì)出現(xiàn)類似的日志(例如,本地群集的/tmp/kube-proxy.log):

Using ipvs Proxier.

然而沒有ipvs代理規(guī)則或有以下日志則表明kube-proxy無法使用ipvs模式:

Can"t use ipvs proxier, trying iptables proxier
Using iptables Proxier.
調(diào)試和排查 檢查ipvs 代理規(guī)則

用戶可以使用ipvsadm工具檢查kube-proxy是否正確維護(hù)IPVS規(guī)則。例如,我們?cè)诩褐杏幸韵路?wù):

# kubectl get svc --all-namespaces
NAMESPACE     NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)         AGE
default       kubernetes   ClusterIP   10.0.0.1             443/TCP         1d
kube-system   kube-dns     ClusterIP   10.0.0.10            53/UDP,53/TCP   1d

我們應(yīng)該能看到如下的規(guī)則:

 # ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.1:443 rr persistent 10800
  -> 192.168.0.1:6443             Masq    1      1          0
TCP  10.0.0.10:53 rr
  -> 172.17.0.2:53                Masq    1      0          0
UDP  10.0.0.10:53 rr
  -> 172.17.0.2:53                Masq    1      0          0
為什么kube-proxy不能以ipvs模式啟動(dòng)

Enable IPVS feature gateway

對(duì)于Kubernetes v1.10及更高版本,功能門SupportIPVSProxyMode默認(rèn)設(shè)置為true。但是,您需要在v1.10之前為Kubernetes明確啟用--feature-gates = SupportIPVSProxyMode = true。

指定proxy-mode=ipvs

檢查kube-proxy模式是否已設(shè)置為ipvs

安裝所需的內(nèi)核模塊和包

檢查是否已將ipvs所需的內(nèi)核模塊編譯到內(nèi)核和軟件包中。 (見前提條件)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/33061.html

相關(guān)文章

  • kube-proxyipvs模式解讀

    摘要:模式在中添加,并成為自以來的默認(rèn)操作模式。支持比更復(fù)雜的負(fù)載平衡算法最小負(fù)載,最少連接,位置,加權(quán)等。安裝的集群默認(rèn)情況下,將在部署的集群中以模式運(yùn)行。 IPVS 這篇文章主要講述: 什么是IPVS? IPVS 和 IPTABLES 區(qū)別 如何設(shè)置kube-proxy按照ipvs模式運(yùn)行和故障排查 什么是IPVS IPVS(IP虛擬服務(wù)器)實(shí)現(xiàn)傳輸層負(fù)載平衡,通常稱為第4層LAN交...

    zhkai 評(píng)論0 收藏0
  • 【容器云 UK8S】產(chǎn)品簡介:漏洞修復(fù)記錄、集群節(jié)點(diǎn)配置推薦和kube-proxy模式選擇

    摘要:模式選擇是中的關(guān)鍵組件其主要功能是在和其后端之間進(jìn)行負(fù)載均衡。詳見后續(xù)測(cè)試數(shù)據(jù)對(duì)于集群規(guī)模中等,數(shù)量不多的,推薦選擇。模式下,使用負(fù)載均衡代替了。漏洞修復(fù)記錄HTTP/2漏洞升級(jí)說明Runc容器逃逸漏洞修復(fù)說明cloudprovider更新20.10.1集群節(jié)點(diǎn)配置推薦1、Master配置推薦Master規(guī)格跟集群規(guī)模有關(guān),集群規(guī)模越大,所需要的Master規(guī)格也越高,不同集群規(guī)模的,Mas...

    Tecode 評(píng)論0 收藏0
  • kube-proxy源碼解析

    摘要:廣告離線安裝包,僅需三步源碼解析相對(duì)于模式具備較高的性能與穩(wěn)定性本文講以此模式的源碼解析為主,如果想去了解模式的原理,可以去參考其實(shí)現(xiàn),架構(gòu)上無差別。主要功能是監(jiān)聽和的事件,然后下放代理策略到機(jī)器上。 廣告 | kubernetes離線安裝包,僅需三步 kube-proxy源碼解析 ipvs相對(duì)于iptables模式具備較高的性能與穩(wěn)定性, 本文講以此模式的源碼解析為主,如果想去了解...

    thursday 評(píng)論0 收藏0
  • kube-proxy源碼解析

    摘要:廣告離線安裝包,僅需三步源碼解析相對(duì)于模式具備較高的性能與穩(wěn)定性本文講以此模式的源碼解析為主,如果想去了解模式的原理,可以去參考其實(shí)現(xiàn),架構(gòu)上無差別。主要功能是監(jiān)聽和的事件,然后下放代理策略到機(jī)器上。 廣告 | kubernetes離線安裝包,僅需三步 kube-proxy源碼解析 ipvs相對(duì)于iptables模式具備較高的性能與穩(wěn)定性, 本文講以此模式的源碼解析為主,如果想去了解...

    X1nFLY 評(píng)論0 收藏0
  • 【容器云UK8S】產(chǎn)品簡介

    摘要:完全兼容原生的,以私有網(wǎng)絡(luò)為基礎(chǔ),并整合了等云產(chǎn)品。綜合資源有效利用率錯(cuò)誤容忍度兩個(gè)因素,在不考慮業(yè)務(wù)混合部署業(yè)務(wù)總體規(guī)模大小的情況下,我們建議生產(chǎn)環(huán)境的節(jié)點(diǎn)應(yīng)該介于核至核之間。模式是一個(gè)用于負(fù)載均衡的內(nèi)核功能。產(chǎn)品概念UCloud Container Service for Kubernetes (UK8S)是一項(xiàng)基于Kubernetes的容器管理服務(wù),你可以在UK8S上部署、管理、擴(kuò)展你...

    Tecode 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<