作者: Colin Jao 饒康立 – VMware資深技術顧問,主要負責VMware NSX產品線,目前致力於網路虛擬化、分散式安全防護技術與新應用遞送方案的介紹與推廣。

如果對前篇介紹的Antrea IPAM機制有興趣,想要實際開始運用,要怎麼做呢?本篇內會逐步進行介紹。首先是與前篇相同,展示環境的示意圖:

首先Antrea IPAM功能到寫作時目前的社群版本 (1.8) 都還位於Alpha階段,也就是說這個功能目前預設是關閉的,如果要使用,必須到Antrea ConfigMap內,將下面標注為藍字的部分,手動進行修改:

其次請大家回憶一下,當我們在vSphere上有很多個網路Port Group,每個Port Group有自己的vlan tag,此時實體網路交換器與vSphere間要用什麼連接方式呢?絕大部分狀況,我們都會啟用Trunking (802.1q) 的方式連接,這樣當vSphere將來自不同Port Group的網路封包送出,而且上邊有打vlan tag時,實體交換器才能正確識別。

相同地在Antrea IPAM內,網路封包由Kubernetes Node送出往外時,不會封裝而會以vlan tag為區別。此時

  • 如果是採用實體機 (Bare-Metal) 的Kubernetes Node,實體交換器與K8S Node連接的網路Port必須預先配置為802.1q的Trunk。
  • 如果K8S Node是採用虛機部署,此時除了實體交換器與vSphere間,包含這個K8S虛機連接的VDS/VSS Port Group上,也必須把802.1q Trunk啟用,就是要配成VLAN Trunk (0-4094)這樣。

接著,在前篇我們就已經有討論,既然Pod定址直接使用底層實體網路,路由也透過底層實體網路互通,那當然這些網路配置就必須預先由企業網路團隊配置好。上圖內,除了原本Kubernetes配置需求的網路外,兩個IPAM使用的網路172.16.19.0/24 (VLAN 19)及172.16.20.0/24 (VLAN 20),以及各自的Gateway,還有網段間路由需求,都需要在外部網路設備內設定好。

當這些前置作業都完成,接下來Antrea IPAM的實際配置還滿直接的。首先是我們對應不同的Namespace,可以建立各自的IP Pool。在下面的配置我們建立了一個IP Pool叫做pool-ap。這個Pool內定義了

  • IP範圍由172.16.19.11至172.16.19.50。
  • 網路遮罩 (prefix) 是 /24,閘道是172.16.19.254。
  • vlan tag是19。
apiVersion: “crd.antrea.io/v1alpha2”               
kind: IPPool                                       
metadata:                                          
  name: pool-ap                                    
spec:                                              
  ipVersion: 4                                     
  ipRanges:                                        
  – start: “172.16.19.11”                          
    end: “172.16.19.50”                            
    gateway: “172.16.19.254”                       
    prefixLength: 24                               
    vlan: 19             

IP Pool定義好後,接著當管理者要在Kubernetes建立一個Namespace時,就可以透過annotation機制,指定在這個Namespace內的定址方式。在下面配置的藍字部分,表示所有於Namespace ns-ap內建立的Pod,要採用於前面定義的pool-ap這個IP Pool的定址:

apiVersion: v1                                     
kind: Namespace                                    
metadata:                                          
  name: ns-ap                                      
  annotations:                                     
    ipam.antrea.io/ippools: ‘pool-ap’

管理者可以用整個Namespace來指定,或在建立Pod時指定要採用哪個IP Pool甚至要求固定IP亦可,如下圖Pod配置內的藍字所示:

apiVersion: v1                                     
kind: Pod                                          
metadata:                                          
  name: db-02                                      
  namespace: ns-db                                 
  annotations:                                     
    ipam.antrea.io/ippools: ‘pool-db’              
    ipam.antrea.io/pod-ips: ‘172.16.20.50’

兩個非常簡單的實機展示。在ns-ap這個namespace內我們用deployment放了三個Pod。首先,雖然這三個pod分別在node-01與node-02上,但他們的IP地址都是在172.16.19.0/24網段內。接著,我從裡面IP地址為172.16.19.11這個pod,去ping其他在同樣namespace與不同namespace的pod,都可順利ping通。

然後下圖內,同樣的pod去ping外部資料庫172.29.161.22,然後用wireshark來看。如同我們預期的,來源IP是這個Pod本身的172.16.19.11,不是任何一台Kubernetes Node的介面IP地址或是Egress IP:

第二個演示:下面這兩張圖內,可以看到在ns-db這個namespace內,我建了兩個Pod分別是db-01與db-02。同樣地雖然兩個Pod是放在不同的Node上,但是都拿到172.16.20.0/24網段的IP地址。而且我們可直接指定這兩個Pod的IP,分別是.48以及.50。

然後我們從一台在外部網路的虛機直接去ping這兩個pod的IP,大家可以看到直接可ping到,代表這兩個pod的IP是『可路由的』。

相關的Antrea IPAM介紹、配置與展示就寫到這邊。但最後很重要的一點要提醒大家,Antrea IPAM是個新的,而且還在發展中的功能。寫作此時兩個Tanzu企業方案都尚未支援(Tanzu Kubernetes Grid 1.6有部分支持,但沒有具備完整功能。vSphere with Tanzu尚未支持)。但如果上述討論的功能對大家有用,也歡迎後續與VMware技術團隊或經銷夥伴進一步進行了解與討論。

下篇網誌是本系列的最後一篇,我們會以問答的方式回應幾個常被詢問的Antrea相關問題。