Kubernetes+Traefik配置GitLab SSL透传问题咨询
问题:Traefik配置GitLab SSL透传实现类似OpenShift Passthrough Route效果
环境信息
- Kubernetes: 1.25
- Traefik: 2.8.7
- 域名:gitlab.mydomain-prod.dk(已持有该域名证书)
GitLab Service配置:
apiVersion: v1 kind: Service metadata: labels: app: gitlab-ce name: gitlab-ce namespace: gitlab spec: clusterIP: 10.98.93.9 clusterIPs: - 10.98.93.9 internalTrafficPolicy: Cluster ipFamilies: - IPv4 ipFamilyPolicy: SingleStack ports: - name: port-1 port: 80 protocol: TCP targetPort: 80 - name: port-2 port: 443 protocol: TCP targetPort: 443 selector: app: gitlab-ce sessionAffinity: None type: ClusterIP
问题背景
初始配置中GitLab的gitlab.rb设置为external_url 'http://gitlab.mydomain-prod.dk',对应Traefik IngressRoute配置如下,此时可正常访问https://gitlab.mydomain-prod.dk:
apiVersion: v1 items: - apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata: name: gitlab-ingress namespace: gitlab spec: entryPoints: - websecure routes: - kind: Rule match: Host(`gitlab.mydomain-prod.dk`) && PathPrefix(`/`) priority: 1 services: - name: gitlab-ce port: 80 tls: secretName: gitlab-test-cert
修改gitlab.rb为external_url 'https://gitlab.mydomain-prod.dk'后,GitLab自身开始监听443端口并处理SSL,此时原有IngressRoute访问出现502 Bad Gateway错误,需要配置Traefik实现SSL透传(类似OpenShift的oc create route passthrough效果)。
解决方案
要实现SSL透传,需要使用Traefik的IngressRouteTCP资源(四层TCP路由),让Traefik直接将TLS流量转发到GitLab的443端口,而不是在Traefik层终止SSL。
1. 确认Traefik已启用TCP入口点
确保Traefik的配置中已经启用了websecure对应的TCP入口点(默认websecure绑定443端口,协议为TCP),若通过Helm安装,可在values.yaml中确认:
ports: websecure: port: 443 expose: true exposedPort: 443 protocol: TCP
2. 创建IngressRouteTCP配置
替换原有HTTP类型的IngressRoute,创建如下TCP路由:
apiVersion: traefik.containo.us/v1alpha1 kind: IngressRouteTCP metadata: name: gitlab-tcp-ingress namespace: gitlab spec: entryPoints: - websecure routes: - match: HostSNI(`gitlab.mydomain-prod.dk`) services: - name: gitlab-ce port: 443
3. 验证配置
- 删除原有HTTP类型的IngressRoute:
kubectl delete ingressroute gitlab-ingress -n gitlab - 应用新的IngressRouteTCP:
kubectl apply -f gitlab-tcp-ingress.yaml - 访问
https://gitlab.mydomain-prod.dk,确认可以正常访问,此时SSL证书由GitLab自身提供,Traefik仅做流量转发。
关键说明
- HostSNI:TCP路由通过SNI匹配域名,这是四层TLS透传的核心匹配规则,对应OpenShift Passthrough Route的逻辑。
- 无需在Traefik配置中指定TLS Secret:因为SSL终止在GitLab端,Traefik只负责转发原始TLS流量。
- 确保GitLab的证书配置正确:
gitlab.rb中已正确配置证书路径,GitPod容器内443端口正常监听。
内容的提问来源于stack exchange,提问作者johnny bravo
相关产品推荐
相关产品推荐

