我正在尝试在运行 K8s 的情况下获取 TLS。
我创建了一个简单的 Azure AKS 服务并通过 HELM 部署了 Traefik(helm install traefik traefik/traefik)
在那一步之后,我部署了一个简单的 WHOAMI 容器,以及它的服务和入口
---
kind: Deployment
apiVersion: apps/v1
metadata:
namespace: default
name: whoami
labels:
app: whoami
spec:
replicas: 1
selector:
matchLabels:
app: whoami
template:
metadata:
labels:
app: whoami
spec:
containers:
- name: whoami-container
image: containous/whoami
ports:
- name: web
containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
name: whoami-srv
spec:
type: ClusterIP
ports:
- port: 80
name: websecure
selector:
app: whoami
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: whoami-ingress
spec:
tls:
- hosts:
- test.mydomain.de
secretName: wildcardcert
rules:
- host: test.mydomain.de
http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: whoami-srv
port:
number: 80
我可以通过打开 Http://test.mydomain.de 来访问 WHOAMI。如果我打开 HTTPS://test.mydomain.de,我可以看到正确的证书,但我仍然收到“找不到 404 页面”
您的网站有什么提示吗?我来回试了几次:)
谢谢!
答案 0 :(得分:0)
检查 Traefik 文档 [1]、[2]
在 Ingress 中设置 spec.tls 不足以让 Traefik 在 https 中为您的应用程序提供服务。您需要添加注释:
annotations:
traefik.ingress.kubernetes.io/router.tls: true
或者,如果您打算将所有 http 重写为 https,假设 Traefik Helm Chart,您可以设置 ports['web'].redirectTo: websecure
。
Traefik 与其他 Ingress Controller 有很大不同,因为它带有自己的自定义资源定义(IngressRoute、TLSOptions、TLSStores、Middlewares 等)。您现在的问题可以相对轻松地解决,而无需去那里。尽管您应该考虑研究这一点,因为它们在处理其他基本配置(标头注入、url 重写等)方面可能会非常有帮助
[1] https://doc.traefik.io/traefik/routing/providers/kubernetes-ingress/#enabling-tls-via-annotations
[2] https://doc.traefik.io/traefik/routing/providers/kubernetes-ingress/#certificates-management