您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關k8s-service中iptable node port實現原理是什么,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
在這里我們主要介紹node port的實現原理,當然我們這里的k8s容器網絡還是基于iptable的,不是基于ipvs的。
部署的nginx-ingress-controller的service我們可以看到:
這個service為node prot類型
cluster ip為10.254.188.128
這個cluster ip關聯了1個endpoints:10.1.27.2
host的8080端口映射到了cluster ip的80端口和pod的80端口
host的8443端口映射到了cluster ip的443端口和pod的443端口
kubectl describe service service-nginx-ingress -n kube-system
對node port類型的service來說,訪問host的port就訪問到了這個服務。所以從host網絡角度來看,當host收到數據包的時候應該是進入host network namespace的PREROUTING chain中,我們查看host network namespace的PREROUTING chain。
iptables -nvL -t nat
根據規則,對于PREROUTING chain中,所有的流量都走到了KUBE-SERVICES這個target中。
查看KUBE-SERVICES target:
iptables -nvL -t nat | grep KUBE-SVC
在KUBE-SERVICES target中我們可以看到當訪問nginx-ingress-controller-service在host上的8080或者8443port的時候,根據規則匹配到了KUBE-NODEPORTS這個target。
查看KUBE-NODEPORTS target:
iptables -nvL -t nat
在KUBE-NODEPORTS target中我們可以看到當訪問8080和8443時:
KUBE-MARK-MASQ均會匹配
KUBE-SVC-QY5PTWKILTPBPDCE匹配8080端口訪問
KUBE-SVC-SQYXO6PN7K55YEZU匹配8443端口訪問
查看KUBE-MARK-MASQ target:
這里只是做了一下標記,并沒有nat target。
iptables -nvL -t nat
查看KUBE-SVC-QY5PTWKILTPBPDCE和KUBE-SVC-SQYXO6PN7K55YEZU兩個target:
iptables -nvL -t nat
我們可以看到
KUBE-SVC-QY5PTWKILTPBPDCE匹配進入KUBE-SEP-WM2TRROMQQXWNW4W
KUBE-SVC-SQYXO6PN7K55YEZU匹配進入KUBE-SEP-7XLQX5JZL77UC7RY
看到這里細心的同學是不是覺得很熟悉,沒錯,這和上一篇文章里cluster ip類型的service在ipable里如出一轍。唯一不同的是上一篇文章里的例子nginx-application-service有2個endpoints,這里nginx-ingress-controller-service只有一個endpoint。所以會匹配到一個KUBE-SEP-XXX,如果有多個endpoints,那么一定會leverage內核隨機模塊random按百分比來均勻的匹配,從而實現對pord的訪問負載均衡。
查看KUBE-SEP-WM2TRROMQQXWNW4W和KUBE-SEP-7XLQX5JZL77UC7RY兩個target:
iptables -nvL -t nat
我們可以看到
做了MASQ操作,當然這個應該是出站engress流量(限定了source ip),不是我們的入站ingress流量。
做了DNAT操作,把原來的cluster ip給DANT轉換成了pod的ip 10.1.27.2,把原來的port轉換成了80或者443 port。
根據iptable,經過PREROUTING chain發現DNAT之后的10.1.27.2不是本地的ip(肯定不是,因為這個ip是pod的ip,當然不會在host的network namespace里)。所以就走到了Forwarding chain中,根據host network namespace的路由表來決定下一跳地址。
所以綜合上面的例子,對于ipable方式的k8s集群內node port類型的service總結為:
在host netwok namespace的PREROUTING chain中會匹配KUBE-SERVICES target。
在KUBE-SERVICES target會匹配KUBE-NODEPORTS target
在KUBE-NODEPORTS target會根據prot來匹配KUBE-SVC-XXX target
以上就是k8s-service中iptable node port實現原理是什么,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。