[Kubernetes] How to Implement Kubernetes Service - ClusterIP
在前述中我們已經學過了什麼是 kubernetes service, 一般情況下都會採用 ClusterIP 的形態幫特定的容器應用程式提供 Service 的服務. 本文會針對 ClusterIP 的概念進行更深入的探討,並且嘗試從系統層面的設計與應用來研究到底 ClusterIP 底層是怎麼實作的,這部分的實作包含了1) ClusterIP 到底在那裡? 2) 如果有多個 Endpoints 的話, 是如何選擇當前連線的最終目標. 這些研究的內容包含了常見了網路概念,如 NAT(Network Address Translation) 以及 iptables 本身的設計及使用,如 table/chian 等概念有初步的認知,這樣對於本文的探討會更明白與瞭解.
[Kubernetes] How to Implement Kubernetes Service - NodePort
在前述中我們已經學過了什麼是 kubernetes service 以及如何實現 ClusterIP 這種類型的 service. 透過對 iptables 的探討與研究, 我們可以理解到 ClusterIP 本身會提供一個虛擬的 IP 地址,接下來只要跟這個地址有關的封包,都會透過 DNAT 的方式進行轉換找到最後的 Endpoint IP. 至於如何選擇的部分,則是透過機率的方式去尋找. 接下來我們要來探討另外一個也是很常使用的 kubernetes service 類型, 也就是 NodePort. NodePort 本身包含了 ClusterIP 的所有功能, 此外也額外開啟了一個新的存取方式. 透過直接存取節點的 IP 地址配上一個設定好的 Port, 也可以將該封包直接送到最後面的容器應用程式. 因此本文也要延續上一篇的思路,繼續研究 iptables 的規則來探討 NodePort 到底是如何實現的
[Kubernetes] How to Implement Kubernetes Service - SessionAffinity
在前述中我們已經學過了什麼是 kubernetes service 以及如何實現 ClusterIP/NodePort 等 service 類型. 透過對 iptables 的探討與研究. 接下來要研究的則是 Service 裡面的一個參數, 叫做 SessionAffinity, 所謂的連線親和力, 透過該參數的設定,希望能夠讓符合特定條件的連線最後都會選用到相同的後端應用程式,目前有支援的選項是 ClinetIP, 這意味者只要連線的來源 IP 地址是相同的,最後都會被導向到相同的容器應用程式. 然而這部分到底是如何實現的, 本文會先介紹什麼叫做 Connection. 並且介紹 SessionAffinity 的使用方式以及使用後的結果. 最後一樣透過相同的思路, 藉由研究 iptables 的規則來學習到 SessionAffinity 要如何完成, 同時也可以學習到 iptables 衆多靈活的使用方式.
[netfilter] Dig Into Docker Bridge Network By iptables/ebtables
本文透過對 iptables/ebtables 來設定相對應的規則,藉由這些規則來觀察在 Docker Bridge Network 的網路設定下,不同情境的網路傳遞實際上會受到哪些 iptables/ebtables 規則的影響。這些情境包含了常見的用法,譬如容器與容器之間同網段的傳輸,宿主機透過容器IP位址直接連線,甚至是外部網路透過 docker run -p xxx.xxx 的規則來接觸到內部容器。這些不同情境的網路連線牽扯到關於 Layer3 路由,Layer2 橋接 等不同方式的處理,因此在 iptables/ebtables 都會有不同的走向。只要能夠更佳的熟悉 iptables/ebtables 的用法與規則,未來有需要親自設定相關規則時,都能夠更精準且安全的去達到想要的目的,減少盲目猜測的時間與花費。
[netfilter] Introduction to iptables
透過瞭解 iptables 規則的四大組成 Table/Chian/Match/Target 來學習 iptables 的規則含義,同時透過圖表的方式來釐清封包在 Linux Kernel 傳輸過程中受到 iptables 規則的處理順序。最後會將 iptables 以及 ebtables 兩者的流程圖整合在一起,構建出一個更全面的封包轉送流程圖,於此流程圖中可以觀察到封包在 Routing/Bridging 不同過程中,是如何通過不同的 ebtables/iptables 規則的處理。 擁有這些資訊能夠讓你對系統上的 iptables/ebtables 有更全面性的理解其功用以及發生時機
Linux NAT Masquerade 研究(上)
本篇文章透過閱讀原始碼的方式來學習 MASQUERADE 的運作模式,而 MASQUERADE 則是被廣為使用的 SOURCE NAT 模組。作為一個 IPTABLES 的擴充模組,透過觀察原始碼的方式可以學習到是如何處理相關的參數甚至,選擇來源 IP 地址以及來源連接埠等相關行為
Linux NAT Masquerade 研究(下)
本篇文章透過修改 MASQUERADE Kernel Module 原始碼的方式來觀察系統的變化,專注於當 NAT 功能執行前後, conntrack 這個結構的改變。透過不同的實驗與環境來觀察 1)多重 IP 的情況下怎選擇 2)指定不同參數時,連接埠的變化。此外為了簡化整體操作過程,將整個實驗環境都透過 Vagrant 打包成為一個可重複執行的環境,並且也準備好可以編譯 Kernel Module 的環境與指令。
NFQUEUE drop UDP packets
探討 NFQUEUE + iptables 結合後丟棄 UDP 封包的問題
初探 IPTABLES 流動之路 - 以 Docker 為範例
本文透過 IPTABLES/EBTABLES 的規則與 Docker Container 的環境來觀察不同情況下的封包流向,主要是幫線上議程進行的重點整理,主要內容都在影片中。