k8s的kube-proxy

kube-proxy 運行在每一個節點上,監聽 API Server 中服務對象的變化,再經過管理 IPtables 來實現網絡的轉發。
Kube-Proxy 不一樣的版本可支持三種工做模式:
 
UserSpace
k8s v1.2 後就已經淘汰
IPtables
目前默認方式
IPVS
須要安裝ipvsadm、ipset 工具包和加載 ip_vs 內核模塊
啓動腳本:
[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
 
[Service]
# kube-proxy 根據 --cluster-cidr 判斷集羣內部和外部流量,指定 --cluster-cidr 或 --masquerade-all 選項後
# kube-proxy 會對訪問 Service IP 的請求作 SNAT,這個特性與calico 實現 network policy衝突,所以禁用
WorkingDirectory=/var/lib/kube-proxy
ExecStart=/usr/bin/kube-proxy \
  --bind-address=172.16.99.124 \
  --hostname-override=172.16.99.124 \
  --kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \
  --logtostderr=true \
  --proxy-mode=iptables
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
 
[Install]
WantedBy=multi-user.target

 

iptables:
Kube-Proxy 監聽 Kubernetes Master 增長和刪除 Service 以及 Endpoint 的消息。對於每個  Service,Kube
Proxy 建立相應的 IPtables 規則,並將發送到 Service Cluster IP 的流量轉發到 Service 後端提供服務的 Pod 的相
應端口上。 注: 雖然能夠經過 Service 的 Cluster IP 和服務端口訪問到後端 Pod 提供的服務,但該 Cluster IP 是
Ping 不通的。 其緣由是 Cluster IP 只是 IPtables 中的規則,並不對應到一個任何網絡設備。  IPVS 模式的 Cluster
IP 是能夠 Ping 通的。
IPVS:
kubernetes從1.9開始測試支持ipvs(Graduate kube-proxy IPVS mode to beta),https://github.com/kubernetes/
kubernetes/blob/master/CHANGELOG-1.9.md#ipvs,從1.11版本正式支持ipvs(IPVS-based  in-cluster load
balancing is now GA),https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.11.md#ipvs。
 
IPVS 相對 IPtables 效率會更高一些,使用 IPVS 模式須要在運行 Kube-Proxy 的節點上安裝  ipvsadm、ipset 工具
包和加載 ip_vs 內核模塊,當 Kube-Proxy 以 IPVS 代理模式啓動時,Kube-Proxy 將驗證節點上是否安裝了 IPVS 模
塊,若是未安裝,則 Kube-Proxy 將回退到 IPtables 代理模式。
使用IPVS模式,Kube-Proxy會監視Kubernetes Service對象和Endpoints,調用宿主機內核Netlink接口以
相應地建立IPVS規則並按期與Kubernetes Service對象 Endpoints對象同步IPVS規則,以確保IPVS狀態與
指望一致,訪問服務時,流量將被重定向到其中一個後端 Pod,IPVS使用哈希表做爲底層數據結構並在內核空間
中工做,這意味着IPVS能夠更快地重定向流量,而且在同步代理規則時具備更好的性能,此外,IPVS 爲負載均
衡算法提供了更多選項,例如:rr (輪詢調度)、lc (最小鏈接數)、dh (目標哈希)、sh (源哈希)、sed (最
短時間望延遲)、nq(不排隊調度)等。
 
 
 
實戰修改kube-proxy
修改iptables爲ipvs(要修改全部master和node節點)
root@k8s-n2:~# cat /etc/systemd/system/kube-proxy.service
[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
 
 
[Service]
# kube-proxy 根據 --cluster-cidr 判斷集羣內部和外部流量,指定 --cluster-cidr 或 --masquerade-all 選項後
# kube-proxy 會對訪問 Service IP 的請求作 SNAT,這個特性與calico 實現 network policy衝突,所以禁用
WorkingDirectory=/var/lib/kube-proxy
ExecStart=/usr/bin/kube-proxy \
  --bind-address=172.16.99.124 \
  --hostname-override=172.16.99.124 \
  --kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \
  --logtostderr=true \
  --proxy-mode=ipvs
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
 
[Install]
WantedBy=multi-user.target

 

root@k8s-n2:~# systemctl daemon-reload
root@k8s-n2:~# systemctl restart kube-proxy
root@k8s-n2:~# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  127.0.0.1:30001 rr
  -> 172.31.215.80:8443           Masq    1      0          0         
TCP  172.16.99.124:30001 rr
  -> 172.31.215.80:8443           Masq    1      0          0         
TCP  172.16.100.24:30001 rr
  -> 172.31.215.80:8443           Masq    1      0          0         
TCP  172.17.0.1:30001 rr
  -> 172.31.215.80:8443           Masq    1      0          0         
TCP  172.31.111.192:30001 rr
  -> 172.31.215.80:8443           Masq    1      0          0         
TCP  10.20.0.1:443 rr
  -> 172.16.99.121:6443           Masq    1      0          0         
TCP  10.20.95.6:8086 rr
  -> 172.31.111.217:8086          Masq    1      0          0         
TCP  10.20.138.198:80 rr
  -> 172.31.215.91:8082           Masq    1      0          0         
TCP  10.20.161.23:443 rr
  -> 172.31.215.80:8443           Masq    1      0          0         
TCP  10.20.222.142:80 rr
  -> 172.31.215.90:3000           Masq    1      0          0         
TCP  10.20.254.254:53 rr
  -> 172.31.111.209:53            Masq    1      0          0         
UDP  10.20.254.254:53 rr
  -> 172.31.111.209:53            Masq    1      0          0  
相關文章
相關標籤/搜索