精選博客系列|在vSphere 8上使用Tanzu的Antrea Egress

在這個關於Antrea容器網絡的博客中,我們將着重介紹Egress功能,並展示如何在vSphere with Tanzu 中使用它

根據官方Antrea文檔,Egress是一種Kubernetes自定義資源定義(CRD),它允許您爲特定的Pod指定訪問外部網絡時使用的出口(SNAT)IP。當所選的Pod訪問外部網絡時,Egress流量將通過隧道傳輸到託管Egress IP的節點(如果它與Pod所在的節點不同),並在離開該節點時被SNAT到Egress IP。您可以在以下圖片中看到流量的流向。

當Egress IP從externalIPPool中分配時,Antrea還自動提供了高可用性;即如果託管Egress IP的節點故障,將有另一個節點從externalIPPool的nodeSelector選擇的其餘節點中被選舉出來。

注意:備用節點不僅會接管IP,還會通過二層廣播(例如IPv4的Gratuitous ARP)來通知網絡上的其他主機和路由器該IP關聯的MAC地址已更改。

如果以下任何一項符合您的需求,您可能會想要使用Egress功能:

  • 當一些特定Pod連接到集羣外的服務時,您希望它們使用一個一致的IP地址,便於審計日誌溯源或在外部防火牆中按源IP進行過濾等。
  • 您想要強制外部連接通過特定節點離開集羣,以進行安全控制或克服網絡拓撲限制。

您也可以使用可路由的Pod來實現相同的效果。但是,使用Egress功能,您可以精確控制哪些Pod具有此功能(而不是一刀切)。

TKG的特性開關和配置變量

開源Antrea 1.6版(及以上)默認啓用了Egress特性開關。由於 VMware Antrea 企業版具有不同的發佈計劃,因此我們需要檢查是否已啓用 vSphere with Tanzu 或 TKG 的Egress功能,如果未啓用,則需要了解如何啓用它。

TKG 1.6 引入了可在集羣定義中使用的 Antrea 配置變量,而不再需要給 TKG打補丁 或暫停會覆蓋手動更改的 Kubernetes 控制器。

正如您所看到的,使用 TKG 1.6,出口功能已默認啓用。所有其他可用的 Antrea 功能(例如 NODEPORTLOCAL、FLOWEXPORTER、MULITCAST 等)可以使用相應的變量進行配置。

vSphere 8 with Tanzu 的自定義資源定義(Custom Resource Definitions)

那麼 vSphere 8 with Tanzu 呢?它有一個 Kubernetes CRD AntreaConfig 爲您提供了配置 Antrea 所需的所有靈活性。在我們深入探討此主題之前,讓我們創建一個 supervisor 命名空間 tkg,覆蓋默認設置並禁用 NAT 模式。這意味着工作節點 IP 是可路由的(否則 Egress 將沒有太多意義),但 Pod IP 仍然是 NAT 的。在本次Egress演示中,我們使用的環境是 vSphere 8 with NSX 4.0.1.1 ,並選擇了一個小型可路由命名空間網絡段和一個 /28 子網前綴。

成功創建命名空間後,讓我們檢查一下NSX的配置:

如果您查看有關可路由 Pod 的 vSphere 8 文檔,您可以看到對 antrea-nsx-routed CNI 的引用。

對於我們的演示,我們將使用基於 Cluster-API 的 ClusterClass 方法創建 TKG 集羣。要啓用 Egress(以及未來演示的其他一些功能),我們需要使用 AntreaConfig CRD 創建自己的 Antrea 配置。然而,將此配置關聯到特定集羣的方法有些特殊,我們需要使用特殊的命名約定。

下面的命令顯示,在我們的 tkg 命名空間中已經有兩個預定義的 AntreaConfig 對象可用。它們都將 Egress 設置爲 false:

我們的集羣名爲 cluster-3,因此我們需要將 AntreaConfig 命名爲 cluster-3-antrea-package(即必須將-antrea-package 添加到集羣名稱後面)。然後該 AntreaConfig 將自動被該集羣使用。

注意:您應該使用單獨的 YAML 文件存放 Antrea 配置!刪除集羣將自動刪除相應的 AntreaConfig 資源。如果您將兩個定義放在同一文件中,集羣刪除將會掛起!

Clusters, ClusterClass 和 Egress

現在是時候使用 Cluster資源創建我們的集羣(而不再是 TanzuKubernetesCluster 資源類型),並配置 Egress。

該集羣使用 Ubuntu 作爲基本操作系統,並使用默認的 vSAN 存儲策略。由於 ClusterClass 中尚未提供 NetworkClass,因此我們必須使用 AntreaConfig 命名約定。

注意:雖然集羣節點是可路由的(而不是 NAT),但您不能直接 SSH 到它們,因爲系統創建了分佈式防火牆(DFW)規則來拒絕訪問。

如果您需要直接訪問集羣節點,您需要創建一條特定的防火牆規則。或者,您可以按照官方vSphere 8文檔使用某一臺 supervisor VM 或 jumbox 容器登錄到 worker 節點。

現在,其餘的 Egress 配置就非常標準了。在切換到 cluster-3 上下文之後,我們首先定義一個 ExternalIPPool。由於 nodeSelector 爲空,Antrea 將隨機選擇一個活動節點並指定一個備用節點。如果需要,您也可以配置專用的 Egress 節點。

如何選擇配置中使用的CIDR和IP範圍呢?由於我們的環境設置中自動爲集羣VM創建的NSX段使用的範圍爲10.221.193.49/28,我們將ExternalIPPool配置爲使用該範圍中的最後兩個(未使用的)IP地址。

重要提示:這個標準方法使用了與集羣VM在同一範圍的IP地址作爲Egress IP。由於這些Egress IP地址不受vSphere 8 with Tanzu管理,因此您必須小心,不要將集羣規模擴展到使用此範圍內的IP,以避免出現重複的IP地址。從技術上講,您可以在ExternalIPPool中使用其他IP地址範圍,並讓Antrea通過BGP宣佈這些設置和更改。但這是另一次討論的話題。

讓我們繼續我們的配置。我們爲prod命名空間中標記爲web的Pod創建一個Egress資源,爲staging命名空間中標記爲web的Pod創建另一個Egress資源。

讓我們按照 vSphere 8 的文檔創建一個 jumpbox,以便訪問上述的 cluster node cluster-3-node-pool-01-hgxk2-768974f9bc-l4fdq,該節點的 IP 地址爲 10.221.193.52,這樣我們就可以看到由 Antrea 創建的新接口 antrea-egress0,它有兩個 IP 地址(10.221.193.61/32 和 10.221.193.62/32)。

接下來,我們創建兩個命名空間 prod 和 staging,並在它們各自部署一個簡單的 web 應用程序。

爲了測試每個命名空間中的 Web Pod 是否使用不同的出口地址,讓我們在 NSX 外部的 VM showip.tanzu.lab 上創建一個簡單的 Web 應用程序,返回訪問它的客戶端的 IP 地址。

現在進行最後一項測試,展示不同命名空間中的 Pod 使用不同的出口地址訪問我們的 Web 應用程序。

到這裏,我們成功在 vSphere 8 with Tanzu上使用 AntreaConfig CRD 配置了 Antrea Egress。

內容來源|公衆號:VMware 中國研發中心

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