k3s集群中AWX无法访问自身REST API,求助hostAliases配置位置
问题背景
在k3s集群通过awx-operator运行AWX时,创建的update_host_group角色调用AWX REST API出现解析错误:
fatal: [localhost]: FAILED! => {"changed": false, "elapsed": 0, "msg": "Status code was -1 and not [201]: Request failed: <urlopen error [Errno -2] Name or service not known>", "redirected": false, "status": -1, "url": "https://awx.example.com"}
核心原因是执行作业的Pod无法解析AWX的域名,需要通过hostAliases手动指定域名映射。
正确配置位置:AWX Custom Resource(CR)
awx-operator通过AWX CR资源管理整个部署,需在CR的spec字段下添加task_pod_template配置段,用于定制作业执行Pod的模板参数。
配置示例
假设你的AWX CR配置文件名为awx-deploy.yaml,修改后内容如下:
apiVersion: awx.ansible.com/v1beta1 kind: AWX metadata: name: awx # 替换为你的AWX实例名称 spec: # 保留原有配置(如service_type、hostname等) task_pod_template: hostAliases: - ip: "10.43.xx.xx" # 替换为AWX服务的ClusterIP或外部可访问IP hostnames: - "awx.your-real-domain.com" # 替换为你的真实AWX域名
应用配置
执行命令更新AWX部署:
kubectl apply -f awx-deploy.yaml -n awx # 替换为你的AWX所在命名空间
awx-operator会自动重新生成作业Pod模板,后续启动的作业Pod都会在/etc/hosts中添加指定的域名解析记录。
替代方案:使用Kubernetes内部服务名
如果无需依赖外部域名,可直接在Playbook中使用AWX的Kubernetes内部服务名,跳过hostAliases配置:
将Playbook中的URL修改为:
url: https://<awx-service-name>.<awx-namespace>.svc.cluster.local/api/v2/groups/36/hosts
例如,AWX默认服务名为awx-service、命名空间为awx时,URL为:
url: https://awx-service.awx.svc.cluster.local/api/v2/groups/36/hosts
内容的提问来源于stack exchange,提问作者Red Cricket

