最近遇到了一个使用VPN访问私有AKS群集报错的case,今天分享出来给大家进行参考。
场景:
这个case的场景为:
- 私有模式部署的Azure Kubernetes群集
- 本地网络和云端网络之间有VPN连接,网络连通性正常
问题:
在本地使用az aks get-credentials命令获取群集token后,执行群集管理动作时遇到如下问题:
E0318 11:01:11.558328 8064 memcache.go:265] "Unhandled Error" err="couldn't get current server API group list: Get \"https://sr-aks-pvt-rg-aks01-demo-jp-177add-ld6vk6wf.a653151f-0801-4c8b-b280-5e4c0670bd7b.privatelink.japaneast.azmk8s.io:443/api?timeout=32s\": dial tcp: lookup sr-aks-pvt-rg-aks01-demo-jp-177add-ld6vk6wf.a653151f-0801-4c8b-b280-5e4c0670bd7b.privatelink.japaneast.azmk8s.io: no such host"
Unable to connect to the server: dial tcp: lookup sr-aks-pvt-rg-aks01-demo-jp-177add-ld6vk6wf.a653151f-0801-4c8b-b280-5e4c0670bd7b.privatelink.japaneast.azmk8s.io: no such host
原因分析:
在专用 虚拟网络中部署 AKS 群集时,默认情况下,它没有与 Kubernetes API 服务器关联的公共 IP 地址。相反,API 服务器只能在 虚拟网络中访问。
若要想通过VPN访问部署在虚拟网络内的AKS群集,则需要使用API服务器的Public FQDN地址进行访问。默认情况下,在虚拟网络内部署AKS群集时,AKS 会在 Azure 公共 DNS 中为您的私有 API 服务器地址创建一个带有 A 记录的公共 FQDN。若要使用此FQDN地址,需要在az aks get-credentials获取Token时指定--public-fqdn参数。
解决方式:
若要访问专用 AKS 群集连接到 VPN,请执行以下步骤:
- 打开命令行界面或终端。
- 确保您已安装 Azure CLI 并将其更新到最新版本。
- 使用命令登录到 Azure 帐户。az login
然后,使用az aks get-credentials 命令同时指明 --public-fqdn参数:
使用新获取到的配置文件,就可以轻松的通过VPN连接到AKS群集啦: