Azure DevOps无法创建私有AKS集群的Kubernetes服务连接的解决方案咨询
Azure DevOps无法创建私有AKS集群的Kubernetes服务连接的解决方案咨询
看到你遇到的问题了——私有AKS集群在Azure DevOps里创建Kubernetes服务连接时,因为AKS的API是私有IP,公网的Azure DevOps服务访问不到,导致加载namespace无限卡住。好在你已经有了用自托管代理解决私有ACR的经验,这刚好能帮你解决AKS的问题,下面给你几个容易上手的方案:
方案一:通过导入kubeconfig创建Generic类型的Kubernetes服务连接
这个方法不需要Azure DevOps门户直接访问私有AKS,而是用你能访问AKS的VM上的kubeconfig来配置服务连接,后续配合自托管代理就能正常运行管道:
- 第一步:在你那个能访问AKS的VM上,打开终端,运行命令获取AKS的kubeconfig:
(如果不需要管理员权限,去掉az aks get-credentials --resource-group <你的AKS资源组名称> --name <你的AKS集群名称> --admin--admin参数即可) - 第二步:找到这个VM上的kubeconfig文件,路径一般是
~/.kube/config,把文件里的全部内容复制下来。 - 第三步:回到Azure DevOps门户,创建Kubernetes服务连接时,选择**"Generic"类型**,然后在「KubeConfig」输入框里粘贴你刚才复制的内容,填写服务连接名称后保存。
- 第四步:后续在CD管道里使用这个服务连接时,记得选择你之前创建的自托管代理来执行任务,因为自托管代理在同VNet里,能正常访问AKS的私有API。
方案二:用Azure资源管理器服务连接+自托管代理直接执行kubectl命令
如果你不想创建Kubernetes服务连接,也可以直接在管道里用Azure CLI获取AKS权限,然后执行部署操作,这个方法更灵活:
- 第一步:在Azure DevOps里创建一个Azure资源管理器服务连接,关联你的Azure订阅(这个服务连接是通过Azure AD验证,不需要直接访问AKS私有IP)。
- 第二步:在CD管道中添加一个Azure CLI任务,选择刚才创建的Azure资源管理器服务连接,然后在脚本里输入:
这个命令会把AKS的配置加载到代理的环境里。az aks get-credentials --resource-group <你的AKS资源组名称> --name <你的AKS集群名称> --overwrite-existing - 第三步:接下来添加kubectl任务(比如部署、更新资源),或者直接在Azure CLI任务里继续写kubectl命令,比如:
kubectl apply -f deployment.yaml - 第四步:同样,这个管道要选择你的自托管代理来运行,确保代理能访问AKS的私有网络。
方案三:通过Azure Private Link让Azure DevOps公网服务访问私有AKS(适合长期用公共代理的场景)
如果后续你想使用Azure DevOps的公共代理来运行管道,或者希望门户能直接加载AKS的namespace,可以用Private Link把Azure DevOps接入到AKS所在的VNet:
- 第一步:在Azure门户里,找到AKS所在的虚拟网络,创建一个私有终结点:
- 资源类型选择
Microsoft.ContainerService/managedClusters - 选择你的AKS集群,然后选择要关联的子网
- 资源类型选择
- 第二步:创建并配置私有DNS区域(对应AKS私有API的域名后缀
privatelink.azmk8s.io),将其关联到你的VNet,确保Azure DevOps能解析AKS的私有域名到私有IP。 - 第三步:配置完成后,回到Azure DevOps创建Kubernetes服务连接,就能正常加载namespace了,因为Azure DevOps现在可以通过Private Link访问到AKS的私有API。
对你来说,方案一和方案二应该最容易上手,因为你已经有了自托管代理的基础,直接复用现有资源就能搞定。如果还有不清楚的地方,可以随时问细节~
备注:内容来源于stack exchange,提问作者Hamza Sharif
相关产品推荐
相关产品推荐

