惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
T
The Blog of Author Tim Ferriss
H
Help Net Security
博客园 - 叶小钗
云风的 BLOG
云风的 BLOG
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
D
DataBreaches.Net
博客园 - 聂微东
A
About on SuperTechFans
大猫的无限游戏
大猫的无限游戏
P
Proofpoint News Feed
Martin Fowler
Martin Fowler
博客园 - 【当耐特】
S
SegmentFault 最新的问题
Blog — PlanetScale
Blog — PlanetScale
酷 壳 – CoolShell
酷 壳 – CoolShell
G
Google Developers Blog
I
InfoQ
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
GbyAI
GbyAI
B
Blog
Engineering at Meta
Engineering at Meta
V
V2EX
Hugging Face - Blog
Hugging Face - Blog

i4T

OpenClaw在Macmini下网络HTTPS_Proxy代理配置 | i4T 容器化部署OpenClaw授权View权限对Kubernetes集群进行巡检故障排查 | i4T 初试VictoriaLogs集群采集Kubernetes Pod日志 | i4T Kubernetes 部署Elasticsearch为WordPress提供文章搜索 | i4T Kubernetes使用Prometheus监控爱快路由器iKuai_Exporter | i4T RustDesk API集成Authentik ODIC单点登录 | i4T Kubernetes 部署RustDesk API实现专业版功能及管理Web UI | i4T 使用Kubernetes 快速部署RustDesk替换向日葵toDesk进行远程连接 | i4T Authentik 集成群晖Synology DSM 实现单点登录 | i4T Authentik 集成Kubernetes Grafana 实现SSO单点登录 | i4T Authentik 集成接入VMware vCenter 8.0.3实现ldP身份提供商登录 | i4T 二进制Kafka_2.13-3.9.0集群开启并配置ACL用户授权 | i4T R730 ESXI 8.0平台PCI直通2080Ti 实现Windows远程游戏以及AI模型 | i4T Dell R730虚拟化ESXI8.0.3平台使用丽台Tesla V100配置vGPU | i4T Kubernetes使用HostAliases手动为容器Pod添加hosts解析 | i4T Nginx 使用resolver变量实现动态DNS解析配置 | i4T Kubernetes LoadBalancer负载均衡外部访问方案MetalLB | i4T Kubernetes 1.29.0 部署配置Ingress-nginx-controller | i4T Ubuntu环境下Docker Compose配置Harbor开机自启 | i4T Dell PowerEdge R730更新iDRAC8版本 | i4T Kubernetes部署RedisShake实现Redis哨兵异地灾备 | i4T Kubernetes部署开源Excalidraw实现在线绘图 | i4T Kubernetes部署DNSmgr聚合公网DNS多平台域名解析系统及SSL自续签 | i4T Kubernetes Grafana数据从Sqlite3迁移到MySQL | i4T 宝塔内网Nginx获取公网宝塔Nginx用户真实IP | i4T 基于Kubernetes Categraf SNMP插件采集Dell R730服务器硬件并使用Grafana监控 | i4T Kubernetes v1.29.9安装Grafana 12并开启匿名访问 | i4T Containerd 配置免费镜像加速源 | i4T Docker集成Containerd实现容器管理 | i4T
Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor ...
https://i4t.com/users/auuAwtzuk · 2025-10-13 · via i4T

authentik可以将部署的各种应用进行接入,不再是在应用内进行登录,而是会被跳转到这个统一登录服务中,进行登录和鉴权。通过这个统一登陆服务,你就可以实现一个账号访问所有接入的应用。而且也可以很方便的去管理或者创建新的用户,去控制每一个用户具体的权限。我这里使用Kubernetes环境进行部署authentik来演示使用

前置条件

  • Kubernetes 1.28.0
  • Helm v3.9.4
  • Containerd 1.7.27
  • StorageClass 设置默认配置
  • Harbor集群

Authentik 是一个开源的身份验证和授权框架,用于保护和授权对应用程序的访问

Authentik 的主要特点包括:

  • 身份验证:Authentik 支持多种身份验证机制,包括用户名 / 密码、JWT(JSON Web Tokens)、OAuth 2.0 等,可以满足不同场景下的需求。
  • 授权:Authentik 提供基于策略的授权功能,可以定义各种访问规则和限制,以确保只有具有足够权限的用户才能访问应用程序。
  • 多租户支持:Authentik 可以支持多个租户(Tenants),这意味着多个客户可以在同一个部署中使用该框架,并且每个客户可以独立管理其用户和权限。
  • 可扩展性:Authentik 提供了丰富的插件和扩展机制,可以轻松地与其他身份验证和授权解决方案集成,例如 LDAP、Active Directory 等。
  • 安全性和隐私保护:Authentik 在处理敏感信息时确保了足够的安全性和隐私保护,例如加密密码、防止跨站点请求伪造(CSRF)攻击等。

界面

  • 管理界面:用于创建和管理用户和组、令牌和凭证、应用程序集成、事件以及定义标准和可自定义登录和身份验证流程的流程的可视化工具。易于阅读的可视化仪表板显示系统状态、最近的登录和身份验证事件以及应用程序使用情况。
  • 用户界面:authentik 中的此控制台视图显示您在其中实施了 authentik 的所有应用程序和集成。单击要访问的应用程序以将其打开,或向下钻取以在管理界面中编辑其配置。

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

技术架构

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

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也不受影响

使用helm创建

  • 这里namespace我使用tools,如果需要修改自行替换
helm upgrade --install authentik authentik/authentik -f values.yaml --namespace tools

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

查看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

检查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>                 19m

Authentik 初始化配置

默认情况下,我们可以看到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
...

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

接下来再次查看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端口

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

安装完成后,访问 authentik http://nodeportIP:port/if/flow/initial-setup/,在这里可以为默认akadmin用户设置密码。

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

设置完毕后,就登录到后台界面

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

认证基本只有我自己使用,我目前觉得不需要开启邮箱认证,这里就没有配置,如有需要可自行查看配置

Authentik 配置域名访问

默认情况下还是使用NodePort访问,用起来比较不方便,我这里使用宝塔配置Nginx进行演示

创建反向代理配置
Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

这里根据后端实际地址填写IP
Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

开启websocket
Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

在配置个证书即可,都宝塔安装了,这里不细说了。最后效果如下
Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

Authentik 集成Harbor

目前我们Authentik已经配置好了,接下来我们通过集成Harbor进行演示

  • 先天条件需要把Harbor部署完毕

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

本文参考官方文档配置说明https://integrations.goauthentik.io/infrastructure/harbor/#harbor-configuration

Authentik创建应用程序

点击Application 创建应用程序
Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

配置格式如下

  • 名称 #平台可视化的名称
  • Slug #英文名称,我建议直接写项目名称即可
  • 策略引擎模式 #这里都默认

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

这里建议打开新窗口

  • 图表描述选填,就是为了在平台方便展示

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

最后点击创建即可

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

Authentik创建提供程序

刚刚的创建的实际上是方便在Authentik上观看识别的,我们还需要创建提供程序用于认证

点击Application选择provider 然后创建提供程序
Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

选择提供商类型:选择OAuth2/OpenID Connect作为提供商类型。

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

  • 名称,我这里方便好记都是以项目名称为开头
  • 授权流程选择: 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中,可能被截获,需配合短期令牌等机制降低风险

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

  • Select ID #保留不变。不做修改 (本次保存一下后续Harbor需要使用)
  • Select token #保留不变。不做修改 (本次保存一下后续Harbor需要使用)

只需要创建重定向
Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

严格的:https://harbor.company/c/oidc/callback/

这里请根据实际的Harbor地址填写 (注意不要加/线)
2

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

高级协议设置
范围:添加authentik default OAuth Mapping: OpenID 'offline_access'到选定范围

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

Subject模式选择基于用户名,这样后续配置权限也是使用用户名登录的

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

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

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

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

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

Harbor配置

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

Kubernetes v1.29.9部署Authentik 统一认证平台并接入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认证信息在提供者程序中查看

配置截图如下

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

配置完成后我们保存退出,返回首页就可以看到多了一个窗口
Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

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

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

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

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

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

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor

测试用户登陆
Kubernetes v1.29.9部署Authentik 统一认证平台并接入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

Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor