Citrix ADC 支援與 Kubernetes 整合實現對外發佈業務,通過在 Kubernetes 集群部署 Citrix Ingress Controller(簡稱CIC),實現根據 Ingress 規則設定 Citrix ADC,管理Kubernetes 環境應用程式的流量。
接下來將通過以下demo環境,驗證 Citrix ADC 與 Kubernetes 整合的佈署方案。
環境準備
創建 ADC 管理帳戶
在外層 ADC 創建綁定在 CIC 的管理員帳戶,用於 CIC 通過 Nitro API 登錄 ADC 執行設定任務。
在 k8s master 創建 secret,將 cic-user 帳戶以 secret 方式提供給 CIC 控制器使用
K8s 集群部署 CIC 控制器
下載 CIC yaml 文件:https://github.com/citrix/citrix-k8s-ingress-controller/blob/master/deployment/baremetal/citrix-k8s-ingress-controller.yaml
修改 CIC 的 yaml 文件,將 NS_IP 改為外層 ADC 的管理 IP。
增加 IPAM 控制器參數名稱,用於關聯 IPAM 控制器,實現自動分配 ADC 的 VIP。
執行 kubectl apply 命令部署 CIC 控制器
查看 pod 可以看到 CIC pod 已經 running 起來了
部署完 CIC 後,在 ADC 上查看 LBVS,可以看到 CIC 自動創建的一個測試 VS,表示 CIC 已經連接上外層 ADC 並工作正常。
部署 IPAM 控制器
IPAM 控制器可以實現自動分配外層 ADC 的 VIP,編輯 IPAM 的 yaml 修改分配的 IP 範圍後進行部署
部署兩個應用程式用於測試
部署 Deployment:Nginx 和 Apache
將 my-nginx 和 my-apache 通過 Service NodePort 類型暴露出去
查看 pod,可以看到 my-nginx 和 my-apache 已經 running
查看 service,可以看到 my-nginx 和 my-apache 的 service 已經通過 NodePort 類型暴露出去
部署 Ingress 物件
部署 Ingress 物件,將 my-nginx 和 my-apache 應用程式通過 ADC 對外發佈提供服務。
kubernetes.io/ingress.class: citrix:與 CIC 的 yaml 裡面寫的對應,表示此 Ingress 物件與 CIC 關聯起來;
rules 定義的規則:
rules 定義的設定會被 CIC 翻譯成 ADC 的設定通過 Nitro API 推送到外層的 ADC 編輯好 ingress 物件的 yaml 後進行部署:
ingress 物件部署完成後,在 ADC 查看設定可以看到 CIC 推送過來的 LB 設定
測試通過 ADC 發佈的業務:
檢查 ADC 設定符合預期後,對 ADC 發佈到的業務VIP進行存取
測試通過 curl 存取 cs vip,指定 host 為 apache.local,流量按預期轉發到了my-apache-service
通過curl 存取cs vip,指定 host 為 nginx.local,流量按預期轉發到了my-nginx-service
通過 curl 存取 cs vip,不指定 host,流量轉發到了預設的 my-nginx-serice
測試 pod 的擴容,自動設定 ADC 效果:
查看 my-apache 和 my-nginx 應用程式都 running 在 k8s-worknode02(172.16.8.103) 上執行 kubectl scale 命令,對 my-apache 和 my-nginx 應用程式進行 replicas 2 份操作
查看 my-apache 和 my-nginx 應用程式已經 running 在 k8s-worknode01、k8s-worknode02
在外層 ADC 查看設定:
CIC 會接收到 k8s 的擴容事件,CIC 會將擴容新增的 Node 翻譯成 ADC 的設定,推送給外層 ADC