K3s集群配置AWX的Traefik Ingress遇404问题求助
解决K3s集群中AWX的Ingress配置问题
先确认AWX服务基础信息
首先执行命令确认AWX服务的名称和端口:
kubectl get svc -n awx
正常会输出类似内容:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE awx-service ClusterIP 10.43.XXX.XXX <none> 80/TCP 5d
记住服务名awx-service和端口80,后续Ingress配置要指向这个服务。
针对第一次尝试的问题修正
Host解析问题:
- 若使用
rocky作为host,需要在客户端的hosts文件中添加映射:集群节点IP rocky(Linux/macOS编辑/etc/hosts,Windows编辑C:\Windows\System32\drivers\etc\hosts)。 - 也可直接使用可正常解析的域名(比如第二次尝试的
rocky-k3-1.XXXXXX.com),确保该域名指向集群任一节点的内网/公网IP。
- 若使用
路径/awx的重写配置:
AWX默认以根路径提供服务,Ingress指定/awx路径时必须配置路径重写,将/awx/*转换为AWX能识别的根路径请求。适配K3s默认Traefik的Ingress示例:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: awx-ingress namespace: awx annotations: traefik.ingress.kubernetes.io/rewrite-target: /$2 traefik.ingress.kubernetes.io/router.entrypoints: web spec: ingressClassName: traefik rules: - host: rocky http: paths: - path: /awx(/|$)(.*) pathType: Prefix backend: service: name: awx-service port: number: 80
配置后访问http://rocky/awx,Traefik会自动将请求重写为AWX服务可处理的格式。
针对第二次尝试的问题修正
- 调整路径范围:
仅配置/login路径会导致AWX的静态资源、API请求无法通过Ingress转发,必须覆盖所有路径。正确的Ingress配置示例:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: awx-ingress namespace: awx annotations: traefik.ingress.kubernetes.io/router.entrypoints: web spec: ingressClassName: traefik rules: - host: rocky-k3-1.XXXXXX.com http: paths: - path: / pathType: Prefix backend: service: name: awx-service port: number: 80
该配置会将所有发往rocky-k3-1.XXXXXX.com的请求转发到AWX服务,包括登录页、静态资源、API等。
- 验证Ingress状态:
执行命令检查Ingress是否正常绑定:
kubectl get ingress -n awx
输出的ADDRESS列应显示集群节点IP,READY列显示True。若READY为False,查看Traefik日志排查错误:
kubectl logs -n kube-system deployment/traefik
- 测试访问:
先验证域名解析是否正确:
nslookup rocky-k3-1.XXXXXX.com
确认返回集群节点IP后,执行curl测试:
curl http://rocky-k3-1.XXXXXX.com/login
应返回AWX登录页的HTML内容,而非404错误。
额外注意事项
- 确保K3s的Traefik Ingress Controller正常运行:
kubectl get pods -n kube-system | grep traefik,所有pod需处于Running状态。 - 若启用HTTPS,需在Ingress中配置TLS证书,同时将后端端口改为AWX的HTTPS端口(通常为443)。
内容的提问来源于stack exchange,提问作者Red Cricket
相关产品推荐
相关产品推荐

