Toggle
- 前置条件
- Authentik 简介
- Authentik 安装
- 使用Sealos 命令行工具快速构建Kubernetes
- Kubernetes 1.29使用群辉dsm7 NFS存储创建StorageClass持久化
- Authentik 初始化配置
- Authentik 配置域名访问
- Authentik 集成Harbor
前置条件
- Kubernetes 1.28.0
- Helm v3.9.4
- Containerd 1.7.27
- StorageClass 设置默认配置
- Harbor集群
Authentik 简介
Authentik 是一个开源的身份验证和授权框架,用于保护和授权对应用程序的访问
**Authentik 的主要特点包括:**
- 身份验证:Authentik 支持多种身份验证机制,包括用户名 / 密码、JWT(JSON Web Tokens)、OAuth 2.0 等,可以满足不同场景下的需求。
- 授权:Authentik 提供基于策略的授权功能,可以定义各种访问规则和限制,以确保只有具有足够权限的用户才能访问应用程序。
- 多租户支持:Authentik 可以支持多个租户(Tenants),这意味着多个客户可以在同一个部署中使用该框架,并且每个客户可以独立管理其用户和权限。
- 可扩展性:Authentik 提供了丰富的插件和扩展机制,可以轻松地与其他身份验证和授权解决方案集成,例如 LDAP、Active Directory 等。
- 安全性和隐私保护:Authentik 在处理敏感信息时确保了足够的安全性和隐私保护,例如加密密码、防止跨站点请求伪造(CSRF)攻击等。
**界面**
- 管理界面:用于创建和管理用户和组、令牌和凭证、应用程序集成、事件以及定义标准和可自定义登录和身份验证流程的流程的可视化工具。易于阅读的可视化仪表板显示系统状态、最近的登录和身份验证事件以及应用程序使用情况。
- 用户界面:authentik 中的此控制台视图显示您在其中实施了 authentik 的所有应用程序和集成。单击要访问的应用程序以将其打开,或向下钻取以在管理界面中编辑其配置。



**技术架构**

authentik 由少量组件组成
- Server 容器由两个子组件组成,即实际服务器本身和嵌入式前哨。轻量级路由器将传入服务器容器的请求路由到核心服务器或嵌入式前哨。此路由器还处理对任何静态文件(例如 JavaScript 和 CSS 文件)的请求。
- Core 子组件处理 authentik 的大部分逻辑,例如 API 请求、流执行、任何类型的 SSO 请求等。
- Embedded outpost 与其他 Outpost 类似,此 Outpost 允许使用代理提供商,而无需部署单独的 Outpost。
- /media 用于存储 icon 等,但不是必需的,如果未挂载,authentik 将允许设置图标的 URL 来代替文件上传
- Background Worker 此容器执行后台任务,例如发送电子邮件、事件通知系统以及可以在前端的 System Tasks 页面上看到的所有内容。
- /certs 用于 authentik 导入外部证书,在大多数情况下,这些证书不应用于 SAML,但如果使用 authentik 而不使用反向代理,则可以将其用于 Let's Encrypt 集成
- /templates 用于自定义电子邮件模板,并且与其他模板一样,完全可选
中间件
- PostgreSQL 数据库 /var/lib/postgresql/data 用于存储 PostgreSQL 数据库
- Redis,authentik 使用 Redis 作为消息队列和缓存。Redis 中的数据不需要持久化,重新启动 Redis 将导致所有会话丢失。/data 用于存储 Redis 数据
> 这里我将redis、pg数据库进行持久化,其它默认即可
Authentik 安装
官方默认支持使用helm部署
> 截止2025年10月10日,helm下载Authentik镜像不需要特殊渠道,直接下载即可
helm repo add authentik https://charts.goauthentik.io
helm repo update使用openssl创建secret私钥
root@k8s-master-01:~/authentik# openssl rand 60 | base64 -w 0
Geu5gUw/TO5RrIk6vKrFNgqpZxfg7J2aWr8DtpldD1AuNVkSKrZlNAgEfyNJ7rNo92eLKi0e0hN8oratt创建value.yaml
authentik:
secret_key: "Geu5gUw/TO5RrIk6vKrFNgqpZxfg7J2aWr8DtpldD1AuNVkSKrZlNAgEfyNJ7rNo92eLKi0e0hN8oratt"
# This sends anonymous usage-data, stack traces on errors and
# performance data to sentry.io, and is fully opt-in
error_reporting:
enabled: true
postgresql:
password: "[此处填写PG数据库密码]]"
server:
ingress:
# Specify kubernetes ingress controller class name
ingressClassName: nginx | traefik | kong
enabled: false [这里我没有Ingress,所以直接修改为false]
hosts:
- authentik.domain.tld
postgresql:
enabled: true [开启pg]
auth:
password: "[此处填写PG数据库密码,和上面相同]]"
redis:
enabled: true> 我这里没有配置Ingress,所以使用NodePort进行演示,如果有Ingress可以直接对接Ingress,和普通的服务暴露没有区别,包括后续在创建Ingress也不受影响


https://i4t.com/25651.htmljavascript:void(0))
使用Sealos 命令行工具快速构建Kubernetes
新闻联播老司机- 25年7月2日
- 喜欢:0
- 浏览:511
使用helm创建
- 这里namespace我使用tools,如果需要修改自行替换
helm upgrade --install authentik authentik/authentik -f values.yaml --namespace tools
查看helm部署状态
root@k8s-master-01:~/authentik# helm list -n tools|grep auth
authentik tools 2 2025-10-10 07:55:12.743654318 +0000 UTC deployed authentik-2025.8.4 2025.8.4查看Pod状态
root@k8s-master-01:~/authentik# kubectl get all -n tools|grep auth
pod/authentik-postgresql-0 1/1 Running 0 40m
pod/authentik-redis-master-0 1/1 Running 0 18m
pod/authentik-server-565d4b9b9c-7dhgv 1/1 Running 0 40m
pod/authentik-worker-d8896b65c-phv5m 1/1 Running 9 (19m ago) 40m
service/authentik-postgresql ClusterIP 10.96.0.231 <none> 5432/TCP 40m
service/authentik-postgresql-hl ClusterIP None <none> 5432/TCP 40m
service/authentik-redis-headless ClusterIP None <none> 6379/TCP 55m
service/authentik-redis-master ClusterIP 10.96.1.63 <none> 6379/TCP 40m
service/authentik-server ClusterIP 10.96.3.58 <none> 80/TCP,443/TCP 40m
deployment.apps/authentik-server 1/1 1 1 40m
deployment.apps/authentik-worker 1/1 1 1 40m
replicaset.apps/authentik-server-565d4b9b9c 1 1 1 40m
replicaset.apps/authentik-worker-d8896b65c 1 1 1 40m
statefulset.apps/authentik-postgresql 1/1 40m
statefulset.apps/authentik-redis-master 1/1 18m

https://i4t.com/25654.htmljavascript:void(0))
Kubernetes 1.29使用群辉dsm7 NFS存储创建StorageClass持久化
新闻联播老司机- 25年7月2日
- 喜欢:0
- 浏览:321
检查PVC持久化数据状态
- 默认情况下会给我们redis、postgresql创建PVC持久卷并挂载
root@k8s-master-01:~/authentik# kubectl get pvc -n tools|grep auth
data-authentik-postgresql-0 Bound pvc-991cd9c1-ca36-41be-93e2-6508f61fab12 8Gi RWO dsm7-nfs-client <unset> 40m
redis-data-authentik-redis-master-0 Bound pvc-07aa8c4f-7efc-4e9f-93fc-5999c3a6b1b7 8Gi RWO dsm7-nfs-client <unset> 19mAuthentik 初始化配置
默认情况下,我们可以看到Authentik为Cluster IP无法在容器外部访问,接下来我们修改为Nodeport方式
root@k8s-master-01:~/authentik# kubectl get svc -n tools|grep authentik-server
authentik-server ClusterIP 10.96.3.58 <none> 80/TCP,443/TCP 43m
#编辑SVC
root@k8s-master-01:~/authentik# kubectl edit svc -n tools authentik-server
...
type: ClusterIP #这里将ClusterIP修改为NodePort
...
接下来再次查看svc
root@k8s-master-01:~/authentik# kubectl get svc -n tools|grep authentik-server
authentik-server NodePort 10.96.3.58 <none> 80:31112/TCP,443:30747/TCP 45m目前就可以使用浏览器访问
31112端口
安装完成后,访问 authentik
http://nodeportIP:port/if/flow/initial-setup/,在这里可以为默认akadmin用户设置密码。
设置完毕后,就登录到后台界面

> 认证基本只有我自己使用,我目前觉得不需要开启邮箱认证,这里就没有配置,如有需要可自行查看配置
Authentik 配置域名访问
默认情况下还是使用NodePort访问,用起来比较不方便,我这里使用宝塔配置Nginx进行演示
创建反向代理配置

这里根据后端实际地址填写IP

开启websocket

在配置个证书即可,都宝塔安装了,这里不细说了。最后效果如下

Authentik 集成Harbor
目前我们Authentik已经配置好了,接下来我们通过集成Harbor进行演示
- 先天条件需要把Harbor部署完毕

本文参考官方文档配置说明https://integrations.goauthentik.io/infrastructure/harbor/#harbor-configuration
**Authentik创建应用程序**
点击
Application 创建应用程序
配置格式如下
- 名称 #平台可视化的名称
- Slug #英文名称,我建议直接写项目名称即可
- 策略引擎模式 #这里都默认

这里建议打开新窗口
- 图表描述选填,就是为了在平台方便展示

最后点击创建即可

**Authentik创建提供程序**
刚刚的创建的实际上是方便在Authentik上观看识别的,我们还需要创建提供程序用于认证
点击
Application选择provider 然后创建提供程序
选择提供商类型:选择
OAuth2/OpenID Connect作为提供商类型。
- 名称,我这里方便好记都是以项目名称为开头
- 授权流程选择: default-provider-authorization-explicit-consent (Authorize Application)
> default-provider-authorization-explicit-consent (Authorize Application)
> 显式授权(Explicit Consent)
> 用户交互要求:必须明确展示授权页面,用户需手动点击同意按钮才能完成授权
> 安全性:更安全,适用于需要高安全级别的场景,如访问敏感数据
> 流程:通常用于授权码模式(Authorization Code Flow),授权服务器会返回授权码,客户端需用授权码换取令牌
> default-provider-authorization-implicit-consent (Authorize Application)
> 隐式授权(Implicit Consent)
> 用户交互要:无需用户显式点击同意,授权服务器直接返回令牌(如ID Token或Access
> 适用场景:适用于单页应用(SPA)等公共客户端,简化流程但安全性较低
> 风险: 令牌直接暴露在URL中,可能被截获,需配合短期令牌等机制降低风险

- Select ID #保留不变。不做修改 (本次保存一下后续Harbor需要使用)
- Select token #保留不变。不做修改 (本次保存一下后续Harbor需要使用)
只需要创建重定向

严格的:https://harbor.company/c/oidc/callback/这里请根据实际的Harbor地址填写 (注意不要加/线)
2

高级协议设置
范围:添加
authentik default OAuth Mapping: OpenID 'offline_access'到选定范围
Subject模式选择基于用户名,这样后续配置权限也是使用用户名登录的

接下来保存即可,保存完毕后还需要关联应用程序,否则就是下面提示

返回应用程序,配置应用程序提供着


**Harbor配置**
上面配置完毕后就登录到Harbor后台,配置Harbor信息

认证选择
OIDC- OIDC 提供商名称:authentik (这里可随意修改)
- OIDC 端点:https://sso.frps.cn/application/o/harbor/ (要注意是/线)
- OIDC 客户端 ID:来自 authentik 的客户端 ID
- OIDC 客户端密钥:来自 authentik 的客户端密钥
- OIDC范围:openid,profile,email,offline_access
- 用户名声明:preferred_username
- 验证证书:取消勾选 (如果开启可能验证失败)
> OIDC认证信息在提供者程序中查看
配置截图如下

配置完成后我们保存退出,返回首页就可以看到多了一个窗口

点击新配置的登录测试,默认会跳转到认证页面,我们点击允许

点击允许后会自动跳转到Harbor地址

点击用户中心,测试用户是否正常

测试用户登陆

[root@ops ~]# docker login harbor.frps.cn
Username: akadmin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded