kubernetes service 補充

kubernetes service 補充

service類型

用戶可以通過ServiceType來指定如何來發布服務,類型有以下幾種:

ClusterIP:提供一個集羣內部的虛擬IP以供Pod訪問(service默認類型)。
在這裏插入圖片描述

NodePort:在每個Node上打開一個端口以供外部訪問

LoadBalancer:通過外部的負載均衡器來訪問

服務發現

環境變量: 當創建一個Pod的時候,kubelet會在該Pod中注入集羣內所有Service的相關環境變量。需要注意的是,要想一個Pod中注入某個Service的環境變量,則必須Service要先比該Pod創建。這一點,幾乎使得這種方式進行服務發現不可用。

DNS:可以通過cluster add-on的方式輕鬆的創建KubeDNS來對集羣內的Service進行服務發現————這也是k8s官方強烈推薦的方式。爲了讓Pod中的容器可以使用kube-dns來解析域名,k8s會修改容器的/etc/resolv.conf配置。

kube-proxy iptables

kube-proxy監聽service和endpoint的變化,將需要新增的規則添加到iptables中。

kube-proxy只是作爲controller,而不是server,真正服務的是內核的netfilter,體現在用戶態則是iptables。

kube-proxy的iptables方式也支持RoundRobin(默認模式)和SessionAffinity負載分發策略。

kubernetes只操作了filter和nat表。

Filter:在該表中,一個基本原則是隻過濾數據包而不修改他們。filter table的優勢是小而快,可以hook到input,output和forward。這意味着針對任何給定的數據包,只有可能有一個地方可以過濾它。

NAT:此表的主要作用是在PREROUTING和POSTROUNTING的鉤子中,修改目標地址和原地址。與filter表稍有不同的是,該表中只有新連接的第一個包會被修改,修改的結果會自動apply到同一連接的後續包中。

kube-proxy對iptables的鏈進行了擴充,自定義了KUBE-SERVICES,KUBE-NODEPORTS,KUBE-POSTROUTING,KUBE-MARK-MASQ和KUBE-MARK-DROP五個鏈,並主要通過爲KUBE-SERVICES chain增加rule來配製traffic routing 規則。

KUBE-MARK-DROP - [0:0] /*對於未能匹配到跳轉規則的traffic set mark 0x8000,有此標記的數據包會在filter表drop掉*/
KUBE-MARK-MASQ - [0:0] /*對於符合條件的包 set mark 0x4000, 有此標記的數據包會在KUBE-POSTROUTING chain中統一做MASQUERADE*/
KUBE-NODEPORTS - [0:0] /*針對通過nodeport訪問的package做的操作*/
KUBE-POSTROUTING - [0:0] /*操作跳轉規則的主要chain*/
KUBE-SERVICES - [0:0] /*操作跳轉規則的主要chain*/

原文:https://www.jianshu.com/p/535e15109477

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章