前言
在Authentik的折腾中由于我们没有https导致passkey无法使用
并且想使用passkey必须要可用的证书 Chrome提示什么不安全的连接即使有https也是无法使用的
所以我们需要给.lan域名签一个证书并信任他
开始折腾
妈的傻逼ChatGPT 让我给*.lan域名去签名
根本用不了
这里要注意的点就是域名只能签诸如*.k8s.lan这样的通配符
以下命令在Master节点上执行就好
openssl genpkey -algorithm RSA -out private.key
openssl req -new -key private.key -out csr.csr
新建一个san.cnf文件 写上如下内容
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[v3_req]
subjectAltName = @alt_names
[alt_names]
DNS.1 = *.k8s.lan
DNS.2 = www.example.com
然后保存继续输入
openssl x509 -req -in csr.csr -signkey private.key -out certificate.crt -extfile san.cnf -extensions v3_req -days 3650
将生成一张有效期10年 给*.k8s.lan使用的证书
然后scp把certificate.crt这个证书拷贝下来 并且添加到受信任的根证书签发机构
然后把证书添加到Secret
这里要注意的是,Secret必须与Ingress配置处于同一个命名空间 否则Controller认不到
kubectl create secret tls authentik-tls-secret --key private.key --cert certificate.crt -n authentik
然后Ingress配置如下
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: authentik-tls-ingress
namespace: authentik
annotations:
nginx.ingress.kubernetes.io/ssl-passthrough: 'true'
nginx.ingress.kubernetes.io/ssl-redirect: 'true'
spec:
tls:
- hosts:
- authentik.k8s.lan
secretName: wildcard-lan-secret
rules:
- host: authentik.k8s.lan
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: authentik-server
port:
number: 9000
apply这个yml
不出意外就能以Https访问authhentik.k8s.lan了

后续更新:自建ACME之后只需要信任根证书 这个方法已经弃用了((