出於安全的原因,很多客户現在將AKS羣集改為了私有部署模式,這樣可以有效的避免羣集API的暴露,提高安全性。但在使用私有羣集時,除非將個人電腦接入到和AKS羣集相同的網絡,否則無法使用kubectl進行羣集資源的部署和管理。這也就意味着需要使用專線、S2S VPN或P2S VPN鏈路來確保個人PC可以與AKS羣集通信。

當然,如果不想使用專線或VPN的鏈接,也可以通過在虛擬網絡內部署一台跳板機。用户可以使用Bastion、RDP、SSH等方式連接到跳板機 ,然後在跳板機中安裝kubectl進行羣集資源的管理。

無論是使用VPN還是跳板機,都需要額外的管理工作和額外的費用支出,同時對於開發者或羣集管理者來講其使用體驗會收到極大的影響。

使用Azure Bastion連接到AKS羣集_Azure


使用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羣集:

使用Azure Bastion連接到AKS羣集_安全_02

Bastion實例:

使用Azure Bastion連接到AKS羣集_Kubernetes_03

準備好上述內容以後,在本地PC打開終端,使用az login登錄到Azure,並使用如下命令連接到 AKS 集羣所在的訂閲:

az account set --subscription <subscription ID>

接下來,運行以下獲取 AKS 集羣的Token:

az aks get-credentials --admin --name <AKSClusterName> --resource-group <ResourceGroupName>

使用Azure Bastion連接到AKS羣集_安全_04

然後使用如下命令通過堡壘機連接到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>

使用Azure Bastion連接到AKS羣集_安全_05

命令執行成功以後,需要打開一個新的CMD窗口,,通過堡壘機隧道連接到 AKS 集羣:

kubectl get pods --server=https://localhost:<LocalMachinePort>

使用Azure Bastion連接到AKS羣集_Kubernetes_06