在k3s中使用traefik作为自签名https服务的反向代理



我正试图使用我的k3s集群和证书管理器为家庭网络上的服务提供一些带有有效证书的https包装器。

我使用一个无头服务和一个自定义端点来实现这一点,这对于未加密、仅在端口80上公开的服务来说很好。然而,对于端口443上具有自签名证书的服务,我只得到";内部服务错误";。

  • Traefik的日志中没有显示任何可能有帮助的内容
  • 除了content-lengthcontent-typedate之外,没有响应标头

这是我试图包装的两个服务上的相同行为,我的路由器和我的nas。

我相信我正在寻找的是上游TLS,但从我可以告诉Traefik这是自动完成的。这是我的配置:

---
kind: Endpoints
apiVersion: v1
metadata:
name: nas
namespace: routing
subsets:
- addresses:
- ip: 10.0.147.154
ports:
- name: https
port: 443
protocol: TCP
---
kind: Service
apiVersion: v1
metadata:
name: nas
namespace: routing
spec:
clusterIP: None
ports:
- name: https
port: 443
targetPort: https
protocol: TCP
---
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
name: nas
namespace: routing
annotations:
cert-manager.io/cluster-issuer: cloudflare-issuer-example-com
spec:
rules:
- host: nas.example.com
http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: nas
port:
name: https
tls:
- hosts:
- nas.example.com
secretName: nas-example-certificate

注意:我实际上并没有使用这个域名,我为示例更改了它;(

如果我描述入口,则看起来正确。

Name:             nas
Labels:           <none>
Namespace:        routing
Address:          10.4.0.100,10.4.0.101,10.4.0.102
Ingress Class:    <none>
Default backend:  <default>
TLS:
nas-example-certificate terminates nas.example.com
Rules:
Host        Path  Backends
----        ----  --------
nas.example.com  
/   nas:https (10.0.147.154:443)
Annotations:  cert-manager.io/cluster-issuer: cloudflare-issuer-example-com
Events:
Type    Reason             Age   From                       Message
----    ------             ----  ----                       -------
Normal  CreateCertificate  42m   cert-manager-ingress-shim  Successfully created Certificate "nas-example-com-certificate"

我还尝试添加ServiceTransport忽略自签名证书:

---
apiVersion: traefik.containo.us/v1alpha1
kind: ServersTransport
metadata:
name: nas
namespace: routing
spec:
insecureSkipVerify: true

用入口上的traefik.ingress.kubernetes.io/service.serverstransport注释引用它,但这没有效果。

我不知道还能尝试什么。

由于traefik.ingress.kubernetes.io/service.serverstransport注释在服务上运行,而不是在入口上运行,因此我也被此问题所困扰。此外,您需要设置一个serversscheme,并且ServersTransport对象本身必须由Traefik的自定义资源格式<namespace>-<name>@customcrd:引用

kind: Service
apiVersion: v1
metadata:
name: nas
namespace: routing
metadata:
annotations:
traefik.ingress.kubernetes.io/service.serversscheme: https
traefik.ingress.kubernetes.io/service.serverstransport: routing-nas@kubernetescrd
spec:
clusterIP: None
ports:
- name: https
port: 443
targetPort: https
protocol: TCP

最新更新