服务器用的pve做虚拟机平台,然后pve的web面板是强制https的,我想用traefik-ingress去代理作为外部tls的pve,查了总计快20个小时,尝试了三次,终于得出解决方案,这里简单记录一下。
首先是用traefik的CRD定义一个ServersTransport:
apiVersion: traefik.containo.us/v1alpha1
kind: ServersTransport
metadata:
name: isv-st
namespace: lan-service
spec:
serverName: pve
insecureSkipVerify: true
主要就是insecureSkipVerify这个配置,用于禁用 SSL 证书验证,不配的话就会报500异常。
然后就是其他的资源:
apiVersion: v1
kind: Endpoints
metadata:
name: pve
namespace: lan-service
subsets:
- addresses:
- ip: 192.168.66.10
ports:
- name: web
port: 8006
---
apiVersion: v1
kind: Service
metadata:
name: pve
namespace: lan-service
spec:
ports:
- name: web
port: 8006
targetPort: 8006
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: pve
namespace: lan-service
spec:
entryPoints:
- inwebsecure
routes:
- kind: Rule
match: >-
Host(`test.internal.hafuhafu.cn`)
services:
- name: pve
port: 8006
scheme: https
serversTransport: isv-st
需要注意的是要在services里引用前面的ServersTransport,同时配置scheme,不配的话会502异常。
按以上配置后应该就可以正常访问pve的web面板了。
吐槽一下:大部分时间都走了弯路,还尝试了导出pve的pem和key做secret然后加到IngressRoute的Tls配置里,屌用没有,这部分资料真的太少了。
参考:
https://doc.traefik.io/traefik/routing/overview/#insecureskipverify
https://doc.traefik.io/traefik/master/routing/providers/kubernetes-crd/#kind-ingressroute
https://doc.traefik.io/traefik/master/routing/providers/kubernetes-crd/#kind-serverstransport
traefik的文档写的真的挺烂的,看的我头昏
确实,这问题要是换nginx的ingress分分钟就解决了,traefik的文档查了半天都不知所以然