Azure DevOps Server 2020 Update 1 Kubernetes服务连接验证失败求助
解决Azure DevOps Server 2020 Update1 K8s服务连接验证失败问题
问题背景
在Azure DevOps Server 2020 Update1中通过KubeConfig创建Kubernetes服务连接时,点击Verify按钮出现验证失败:
Failed to query service connection API: 'https://ekm.mpu.cz/k8s/clusters/c-qmcrb/api/v1/nodes'. Error Message: 'An error occurred while sending the request.'
Kubernetes集群位于其他域,已尝试导入CA证书到以下位置但无效:
- MMC的受信任发布者
- JAVA_HOME下的
cacerts - JAVA_HOME下的
azureTrustsStore.jks
补充:直接保存服务连接后,流水线可正常连接并执行命令。
解决建议
1. 检查Azure DevOps Server服务账户的证书存储
验证操作由Azure DevOps Server的系统服务进程执行,使用的是服务账户的证书上下文,而非当前登录用户的:
- 找到Azure DevOps Server运行的服务账户(通常是
NT SERVICE\AzureDevOpsServer或自定义域账户) - 以该账户身份登录服务器,打开MMC证书管理单元,将CA证书导入到受信任的根证书颁发机构和中级证书颁发机构(而非仅受信任发布者)
- 导入后重启Azure DevOps相关服务(如IIS应用池、Azure DevOps Job Agent)
2. 确认KubeConfig的CA证书配置
虽然流水线能正常运行,但验证逻辑可能对KubeConfig的证书格式更严格:
- 检查KubeConfig中
certificate-authority-data字段是否为Base64编码的完整CA证书内容,无换行或格式错误 - 如果使用
certificate-authority指定本地路径,确保Azure DevOps服务账户有权限访问该路径下的证书文件
3. 排查服务器系统代理或防火墙设置
跨域访问可能受代理/防火墙影响:
- 确认Azure DevOps Server所在服务器的系统代理配置,是否将K8s集群域名加入了代理白名单
- 检查防火墙是否允许Azure DevOps服务器访问K8s集群的API端口(默认443)
- 若使用企业级防火墙,确认是否拦截了SSL握手过程中的证书验证
4. 查看Azure DevOps Server详细日志
获取更具体的错误信息以定位问题:
- 查看Azure DevOps Server应用层日志(默认路径:
C:\Program Files\Azure DevOps Server 2020\Application Tier\Web Services\Logs) - 查找验证请求对应的日志条目,重点关注SSL相关错误(如证书链不完整、不信任的根证书等)
5. 验证证书链完整性
确保导入的CA证书包含完整的信任链:
- 用
openssl s_client -connect ekm.mpu.cz:443 -showcerts命令获取K8s API的证书链 - 对比本地导入的证书,确认所有中间证书和根证书都已导入到正确的存储位置
关键说明
既然直接保存后流水线可正常使用,说明服务连接的核心配置是正确的,问题仅出在Azure DevOps Server的验证环节——验证逻辑使用的证书信任上下文与流水线执行时不同(流水线通常使用自托管代理的执行账户或代理服务的证书存储)。
内容的提问来源于stack exchange,提问作者Ondrej
相关产品推荐
相关产品推荐

