出於安全的原因,很多客户現在將AKS羣集改為了私有部署模式,這樣可以有效的避免羣集API的暴露,提高安全性。但在使用私有羣集時,除非將個人電腦接入到和AKS羣集相同的網絡,否則無法使用kubectl進行羣集資源的部署和管理。這也就意味着需要使用專線、S2S VPN或P2S VPN鏈路來確保個人PC可以與AKS羣集通信。
當然,如果不想使用專線或VPN的鏈接,也可以通過在虛擬網絡內部署一台跳板機。用户可以使用Bastion、RDP、SSH等方式連接到跳板機 ,然後在跳板機中安裝kubectl進行羣集資源的管理。
無論是使用VPN還是跳板機,都需要額外的管理工作和額外的費用支出,同時對於開發者或羣集管理者來講其使用體驗會收到極大的影響。
使用Azure Bastion連接到AKS
説到Azure Bastion大家可能都比較熟悉,很多朋友都在使用它連接到Azure VM,現在除了連接VM以外,還可以使用Bastion直接連接到私有的AKS羣集。這種連接方式無需配置網絡安全組、無需啓動臨時的堡壘機,只需要在本地CLI和私有AKS羣集API服務器之間建立一條安全隧道即可
先覺條件
若要使用Bastion連接到私有AKS羣集,需要滿足如下先覺條件:
- 本地安裝Azure CLI
- 本地安裝
kubectl - 在與 AKS 羣集相同的虛擬網絡(或對等虛擬網絡)中部署Azure Bastion實例
- Bastion 必須是標準版或高級版 SKU,並且必須在其配置設置中啓用原生客户端支持
- AKS集羣必須具有公共 FQDN
如果想要使用 Bastion 連接到已配置 API 服務器授權 IP 地址範圍的公共集羣,則需要將 Bastion 的公共 IP 地址添加到該允許列表中。否則,連接會在建立之前就被阻止。
還需要分配以下Azure 角色:
- AKS集羣上的讀取器角色
- Azure Bastion 資源上的讀取者角色
- 目標 AKS 集羣虛擬網絡上的讀取者角色(如果堡壘機部署在對等虛擬網絡中)
使用Azure Bastion連接到AKS羣集
本次測試我已經準備好了一個私有的AKS羣集和標準版Bastion實例,具體如下:
AKS羣集:
Bastion實例:
準備好上述內容以後,在本地PC打開終端,使用az login登錄到Azure,並使用如下命令連接到 AKS 集羣所在的訂閲:
az account set --subscription <subscription ID>
接下來,運行以下獲取 AKS 集羣的Token:
az aks get-credentials --admin --name <AKSClusterName> --resource-group <ResourceGroupName>
然後使用如下命令通過堡壘機連接到AKS羣集,在這個過程中,本地CLI和會調用Bastion在私有AKS羣集API服務器之間建立一條安全隧道
az aks bastion --name <aksClusterName> --resource-group <aksClusterResourceGroup> --bastion <bastionResourceId>
如果第一次運行此命令,它會詢問是否要安裝aks-preview擴展程序。只需按 Enter 鍵即可y。接下來,它會再次詢問是否要安裝bastion擴展程序,同樣,只需按 Enter 鍵y即可安裝
很多客户反饋使用az aks bastion安裝aks-preview擴展程序時會報錯,導致連接,對於這個問題,大家可以通過如下的調用Bastion連接私有AKS羣集:
az network bastion tunnel --name <BastionName> --resource-group <ResourceGroupName> --target-resource-id <AKSClusterID> --resource-port 443 --port <LocalMachinePort>
命令執行成功以後,需要打開一個新的CMD窗口,,通過堡壘機隧道連接到 AKS 集羣:
kubectl get pods --server=https://localhost:<LocalMachinePort>