Kubernetes集群中Traefik配置GitLab SSH访问失败求助
排查Kubernetes中GitLab SSH访问故障(Traefik 2.8.x)
环境信息
- Kubernetes版本:1.23.13
- Traefik版本:2.8.7
- GitLab Service已暴露80/443/22端口
- 已配置Traefik
gitlab-ssh入口点(容器端口2222)及对应IngressRouteTCP
排查步骤
1. 确认Traefik入口点加载状态
检查Traefik Pod日志,确认gitlab-ssh入口点是否成功初始化:
kubectl logs -n traefik <traefik-pod-name> | grep "entrypoint gitlab-ssh"
若日志未出现入口点初始化成功的信息,说明Traefik Deployment补丁未生效,执行以下命令重启Pod:
kubectl rollout restart deployment traefik -n traefik
2. 验证Traefik Service端口可达性
先查看Traefik Service的端口映射关系:
kubectl get svc traefik -n traefik
- 若为NodePort类型:测试节点IP对应的NodePort(如输出
2222:30022/TCP,则执行ssh <节点IP> -p 30022) - 若为LoadBalancer类型:用nc命令验证公网IP的2222端口连通性:
nc -zv <负载均衡IP> 2222
若无法连通,检查云安全组/节点本地防火墙是否放行对应端口的入站流量。
3. 检查IngressRouteTCP配置有效性
查看IngressRouteTCP的状态及事件,确认Traefik已识别该配置:
kubectl describe ingressroutetcp gitlab-ssh -n gitlab
重点关注Events字段,若存在配置无效类错误需修正(当前match: HostSNI(*)适配SSH无SNI的特性,配置逻辑合理)。
4. 验证Traefik到GitLab Service的连通性
进入Traefik Pod内部,直接测试连接GitLab Service的22端口:
kubectl exec -n traefik <traefik-pod-name> -- ssh git@gitlab-ce.gitlab.svc.cluster.local -p 22
- 若连接失败,先检查GitLab Pod内sshd服务是否运行:
kubectl exec -n gitlab <gitlab-pod-name> -- ps aux | grep sshd
再查看GitLab Shell或sshd日志排查服务启动故障:
kubectl logs -n gitlab <gitlab-pod-name> gitlab-shell
5. 排查网络策略限制
检查GitLab所在namespace是否有网络策略阻断Traefik访问:
kubectl get networkpolicy -n gitlab
若存在网络策略,需添加Ingress规则允许Traefik namespace访问GitLab的22端口:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-traefik-to-gitlab-ssh namespace: gitlab spec: podSelector: matchLabels: app: gitlab-ce ingress: - from: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: traefik ports: - protocol: TCP port: 22
内容的提问来源于stack exchange,提问作者johnny bravo
相关产品推荐
相关产品推荐

