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

接續前篇討論AKO (Avi Kubernetes Operator) 的安裝步驟。上篇內我們已經說明了步驟1~4,其實是基礎環境 / NSX Advanced Load Balancer平台 / Kubernetes叢集本身的建立。接下來我要說明下圖的步驟5~6部分:

5. 配置AKO設定檔

基本的AKO安裝流程在這個頁面:https://avinetworks.com/docs/ako/1.4/ako-installation/ 。簡單說明一下,安裝前的準備動作包括了

  • 找一台Linux跳板機 (Bastion Host),在上邊安裝helm的最新版本。helm的安裝:https://helm.sh/docs/intro/install/
  • AKO本身的安裝可以透過Internet,由VMware官方的repository拉下來 ( projects.registry.vmware.com/ ),我自己通常用這個方法。但如果在沒有Internet, air-gap的環境,管理者當然也可以自己用Harbor或其他方案建一個企業私有的容器庫,把AKO的映像檔放進來安裝
  • 用 # helm show values ako/ako –version 1.4.2 > values.yaml指令拉出AKO的參數範例檔,修改這個values.yaml檔內的相關參數

真正重要的是這邊的配置檔參數。基本上喔,通常AKO安裝有沒有成功,就是這些參數有沒有設錯的問題。相關AKO配置參數的說明可以參考下列地方:

  • https://avinetworks.com/docs/ako/1.4/configuring-ako/
  • https://github.com/avinetworks/avi-helm-charts/blob/master/docs/AKO/values.md
  • 預設範例檔內也有最基本的說明

如果大家玩到深了,一個個參數是什麼意思再來做完整的研究吧。下表我只列出通常在基本安裝時我們會使用到的參數有哪些,我自己很少動到未在下面列出的參數。

AKO配置參數參數說明
image.repositoryAKO映像檔地址,預設在projects.registry.vmware.com/ako/ako,如果用私有容器庫的話則需要修改
AKOSettings.deleteConfig預設是false,平常不會用到,如果設成true代表要移除AKO的所有配置
AKOSettings.disableStaticRouteSync這就是前面網誌內討論,網路架構是ClusterIP / Nodeport / Routable時的配置參數。預設是false,代表採用ClusterIP模式,要求AKO自動建立Pod網路的靜態路由
AKOSettings.clusterName這個K8S叢集的名稱。一套Avi Controller內可以提供給多組K8S使用,以這個名稱進行不同K8S叢集間的區分
AKOSettings.layer7Only預設是false,代表AKO同時提供LoadBalancer / Ingress服務。但在底層已經預設有LoadBalancer配置的K8S環境,可將此配置為true,僅提供Ingress功能
NetworkSettings.nodeNetworkList採用vCenter Cloud時,告知Kubernetes Nodes (Workload) 是在哪個Port Group內。這邊要輸入的是Port Group名稱以及對應的網段資訊,比如說172.20.14.0/24這樣
NetworkSettings.subnetIPVirtual IP所在網段資訊,與上面的Workload網段相同或不同均可。這裡是網段IP,比如說172.20.14.0
NetworkSettings.subnetPrefix同上,Virtual IP所在網段的subnetmask,比如說24
NetworkSettings.vipNetworkList同上,在vCenter Cloud內,Virtual IP所在網段的Port Group名稱
L7Settings.defaultIngControllerAKO是不是這個K8S叢集內預設的Ingress Controller呢?預設當然要設為true摟
L7Settings.serviceType前面網路架構內討論的,這邊的網路配置方式是ClusterIP / NodePort / NodePortLocal 那一種。預設是ClusterIP不用特別改
ControllerSettings.serviceEngineGroupName這個K8S Cluster內的LoadBalancer / Ingress服務,在Avi平台內要使用哪一個Service Engine Group?預設是Default-Group,但我通常會特別配置一個Service Engine Group,讓每個K8S Cluster使用不同的服務引擎資源
ControllerSettings.cloudName這個K8S叢集的服務是在Avi環境的哪個Cloud?預設值是Default-Cloud,或將指定的Cloud名稱填入
ControllerSettings.controllerHostAvi Controller的IP地址或是Hostname,通常是對應到Controller 的Cluster IP
avicredentials.usernameAvi Controller的管理者登入帳號
avicredentials.passwordAvi Controller的管理者登入密碼

6. 進行AKO安裝

在上面的設定檔 (values.yaml) 參數配置完後,後面的設定就很直接,請參考下面的命令列。包含了建立一個namespace叫做avi-system,然後以helm的指令安裝AKO到這個namespace內,並且宣告對應的設定檔:


# kubectl create ns avi-system                                                   
namespace/avi-system created                                                   
                                                   
# helm install ako/ako –generate-name -f values.yaml                                                   
–namespace=avi-system                                                   
                                                   
NAME: ako-1623221131                                                   
LAST DEPLOYED: Wed Jun  9 06:45:32 2021                                                   
NAMESPACE: avi-system                                                   
STATUS: deployed                                                   
REVISION: 1                                                   
                                                                                                       
# helm ls -n avi-system                                                   
NAME            NAMESPACE                                                   
ako-1623221131  avi-system                                                                                                       
                                                   
# kubectl get pod -n avi-system                                                   
NAME    READY   STATUS    RESTARTS   AGE                                                   
ako-0   1/1     Running   0          3m21s

上圖後面我們用# helm ls指令可以看到ako配置完成,且可以看到ako容器在avi-system的namespace正常運作 (STATUS為Running)。整個安裝流程到這邊為止就完成,接著應用管理者就可以做他們需要的Ingress / LB Service相關配置了。

在我們與不同經銷夥伴展示這邊的安裝過程時,常會得到的feedback是感覺安裝比較複雜。但通常更進一步討論時,主要感覺複雜的點在於

  • 沒有安裝過NSX Advanced Load Balancer,或雖然安裝過,對IPAM/DNS相關配置不熟悉
  • AKO的設定檔參數不熟悉。

也因此,前面幾篇網誌我用了比較大的篇幅,對安裝相關內容做了說明。一般來說上面這幾個點有做過一遍走通,後續環境要複製都不需要花太多的時間。希望對大家有幫助。

後續的網誌想和大家討論另一個技術課題:在AKO內,可以支持哪些進階的負載均衡與資源配置?我想和大家說明AKO支持的CRD (Customized Resource Definition),包含HTTPRule / HostRule / AKOInfraSetting等配置。