Kubernetes集群访问Jenkins服务报错:endpoints 'default-http-backend' not found
问题排查:无法通过http://jenkins.company.com访问Kubernetes集群内的Jenkins服务
环境背景
裸金属Ubuntu 18.04服务器,Kubernetes v1.19.16集群,已配置HAproxy前端与后端,尝试通过域名访问集群内Jenkins服务失败。
关键问题与修正方案
1. Service端口映射错误
Jenkins容器默认监听8080端口,但当前Service的targetPort配置为80,导致流量无法正确转发到Jenkins容器。
修正后的service.yaml:
apiVersion: v1 kind: Service metadata: name: jenkins-svc namespace: jenkins annotations: prometheus.io/scrape: 'true' prometheus.io/path: / prometheus.io/port: '8080' spec: selector: app: jenkins-server type: ClusterIP ports: - protocol: TCP port: 8080 targetPort: 8080 # 修正为Jenkins容器实际监听的端口
执行更新:
kubectl apply -f service.yaml -n jenkins
2. Ingress配置不一致且API版本需适配
- 当前Ingress实际运行配置中,Host为
jenkins.dpi.com,与yaml定义的jenkins.company.com不符,导致域名匹配失败。 - 虽然v1.19支持
networking.k8s.io/v1beta1,但该版本已废弃,建议升级为networking.k8s.io/v1格式。
修正后的ingress-resource.yaml:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: jenkins-ingress namespace: jenkins annotations: kubernetes.io/ingress.class: "nginx" spec: rules: - host: "jenkins.company.com" http: paths: - pathType: Prefix path: "/" backend: service: name: jenkins-svc port: number: 8080
执行更新:
kubectl apply -f ingress-resource.yaml -n jenkins
3. Nginx Ingress Controller未提供外部访问入口
kubectl get ing结果中Address字段为空,说明Ingress Controller未绑定到集群外部可访问的IP:
- 裸金属环境未部署MetalLB时,需将Ingress Controller服务类型设为
NodePort,并确保HAproxy后端指向集群节点的对应NodePort端口(默认80对应NodePort范围30000-32767)。 - 若使用MetalLB,需配置地址池,让Ingress Controller的
LoadBalancer类型服务获取可用外部IP,此时Address字段会显示该IP。
检查Ingress Controller状态:
kubectl get svc -n ingress-nginx # 假设安装在ingress-nginx命名空间
4. 辅助检查项
- 确认Jenkins Pod正常运行:
kubectl get pods -n jenkins,确保Pod处于Running状态且容器端口为8080。 - 确认DNS解析:
jenkins.company.com需正确解析到HAproxy服务器IP。 - 检查HAproxy配置:确保前端监听80端口,后端指向Ingress Controller的服务端口(NodePort或MetalLB分配的IP:80)。
内容的提问来源于stack exchange,提问作者user4948798
相关产品推荐
相关产品推荐

