You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure自托管VMSS代理执行Kubernetes@1任务失败求助

问题解决:Azure自托管代理运行Kubernetes@1任务时DNS解析失败

问题描述

使用基于VMSS的Azure自托管代理(Ubuntu 20.04 LTS)运行Kubernetes@1任务时,出现DNS解析错误:

couldn't get current server API group list: Get "https://<aks>.hcp.westeurope.azmk8s.io/api?timeout=32s": dial tcp: lookup <aks>.hcp.westeurope.azmk8s.io on 127.0.0.53:53: no such host

该AKS并非私有集群,使用Azure托管代理时配置正常;通过AzureCLI@2任务获取凭证并执行kubectl命令可正常工作,但希望使用Kubernetes@1任务。相关任务配置如下:

失败的Kubernetes@1任务

steps:
  - task: Kubernetes@1
    displayName: "Rollout <deployment-name>"
    inputs:
      connectionType: "Kubernetes Service Connection"
      kubernetesServiceEndpoint: <serviceEndpoint>
      namespace: <namespace>
      command: "rollout"
      arguments: "restart deployment <deployment-name>"

正常运行的AzureCLI@2任务

steps:
 - task: AzureCLI@2
    inputs:
      azureSubscription: $(azureSubscription)
      scriptType: bash
      scriptLocation: inlineScript
      inlineScript: |
        az aks get-credentials --resource-group <resource-group> --name <aks-name>
        kubectl rollout -n <namespace> restart deployment <deployment-name>

补充信息:使用ServiceAccount而非kube config文件,自定义镜像预装kubectl命令。

解决方案

1. 检查并修复自托管代理的DNS配置

Ubuntu 20.04默认使用systemd-resolved,其默认DNS服务器可能无法解析AKS的hcp.westeurope.azmk8s.io域名,而Azure托管代理默认使用Azure内部DNS(168.63.129.16)可正常解析。

  • 先在代理节点上测试域名解析:
    nslookup <aks>.hcp.westeurope.azmk8s.io
    
    如果返回no such host,则修改DNS配置:
    1. 编辑/etc/systemd/resolved.conf,添加或修改:
      DNS=168.63.129.16
      
    2. 重启systemd-resolved服务:
      sudo systemctl restart systemd-resolved
      
    3. 再次测试解析,确认能正常返回AKS API的IP地址。

2. 验证Kubernetes服务连接配置

  • 确认服务连接中填写的AKS集群API地址完全正确,无拼写错误;
  • 检查服务连接使用的身份(如服务主体)是否拥有AKS集群的Cluster Admin或足够权限(AzureCLI能正常运行则权限大概率没问题,但可交叉验证)。

3. 测试ServiceAccount的手动认证

将Kubernetes服务连接中的ServiceAccount信息提取出来,在代理节点手动配置kubeconfig并测试,排查是否为任务配置问题:

  1. 创建临时kubeconfig文件(替换占位符):
    apiVersion: v1
    clusters:
    - cluster:
        certificate-authority-data: <CA_CERT_DATA_FROM_SERVICE_CONNECTION>
        server: https://<aks>.hcp.westeurope.azmk8s.io
      name: aks-cluster
    contexts:
    - context:
        cluster: aks-cluster
        user: <SERVICE_ACCOUNT_NAME>
      name: aks-context
    current-context: aks-context
    kind: Config
    preferences: {}
    users:
    - name: <SERVICE_ACCOUNT_NAME>
      user:
        token: <SERVICE_ACCOUNT_TOKEN_FROM_SERVICE_CONNECTION>
    
  2. 导出环境变量并执行kubectl命令:
    export KUBECONFIG=./temp-kubeconfig
    kubectl get nodes
    
    • 如果同样出现DNS错误:确认是代理节点的DNS问题,回到步骤1解决;
    • 如果能正常执行:说明Kubernetes@1任务的配置可能存在问题,可尝试重新创建服务连接,或升级任务到Kubernetes@2版本测试。

4. 检查kubectl版本兼容性

确认自定义镜像中预装的kubectl版本与AKS集群的API版本兼容(kubectl版本建议与集群版本差不超过1个大版本)。在代理节点执行:

kubectl version --client

对比AKS集群的版本(可通过az aks show --name <aks-name> --resource-group <resource-group> --query kubernetesVersion查看),若版本差异过大,可更新镜像中的kubectl版本。


内容的提问来源于stack exchange,提问作者Tomáš Starý

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:22:12