【 云原生 kubernetes 】- 单点登录Authelia + OpenLdap

news2024/11/18 17:20:07

⚡️: OpenLDAP是轻量级目录访问协议(LDAP)的开源实现,它提供了一种存储和访问关于用户、组、计算机和其他资源的信息的中心化目录服务。

简介

Authelia

​ Authelia是一个开源的单点登录身份验证系统,可以用于保护Web应用程序、API和其他服务。它提供了多种身份验证方法,包括双因素身份验证、LDAP和SAML集成、OAuth2等,并且支持自定义主题和模板以实现与自己的品牌一致的UI。

OpenLdap

属性介绍

  • cn(common name):通用名称,表示一个对象的名称。在用户条目中,通常与用户的姓名相对应;在组条目中,则与组名相对应。
  • ou(organizational unit):组织单位,表示一个组织或部门。在LDAP目录服务中,可以使用ou来创建多级组织结构,并将用户和其他对象分配到相应的组织单元中,以便更好地管理它们。
  • dc(domain component):域组件,表示域名的一部分。在LDAP中,域名通常是按照层次结构组织的,例如:example.com可以被拆分为dc=example,dc=com。这样做有利于有效地组织和管理大规模的目录服务。
  • sn(surname):姓氏,表示一个人的姓氏。与cn属性不同,sn只表示姓氏,而且通常不唯一。

Helm部署

openldap

  • helm repo add stable https://charts.helm.sh/stable
  • helm install openldap stable/openldap

部署十分简单,但是我们可能需要调整Helm chart配置,所以建议把包拉取到本地调整之后再进行部署,下面是详细流程

[root@ycloud ~]# helm repo add stable https://charts.helm.sh/stable
"stable" has been added to your repositories
[root@ycloud ~]# helm pull stable/openldap
[root@ycloud ~]# tar -zxvf openldap-1.2.7.tgz 
openldap/Chart.yaml
openldap/values.yaml
openldap/templates/NOTES.txt
openldap/templates/_helpers.tpl
openldap/templates/configmap-customldif.yaml
openldap/templates/configmap-env.yaml
openldap/templates/deployment.yaml
openldap/templates/pvc.yaml
openldap/templates/secret.yaml
openldap/templates/service.yaml
openldap/templates/tests/openldap-test-runner.yaml
openldap/templates/tests/openldap-tests.yaml
openldap/.helmignore
openldap/README.md
[root@ycloud ~]# cd openldap/ ;ls
charts  Chart.yaml  README.md  templates  values.yaml

配置调整

刚刚我们拉取的Chart包 部署openldap,需要调整的地方不是很多

env:
  LDAP_ORGANISATION: "GStrain Inc."
  LDAP_DOMAIN: "ldap-openldap.authelia"
  LDAP_BACKEND: "hdb"
  LDAP_TLS: "false"
  LDAP_TLS_ENFORCE: "false"
  LDAP_REMOVE_CONFIG_AFTER_SETUP: "false"

⚡️: LDAP_DOMAIN是指LDAP目录服务中的域名,它用于标识和区分不同的组织、部门或用户。

案例:cn=username,ou=department,dc=domain,dc=com

其中dc=domain,dc=com部分就是LDAP_DOMAIN,我们只需要注意这一部分,其他根据自己情况选择。

数据持久化

当我添加pvc来做数据持久化,一直提示没有权限,暂时没能解决。

chown: changing ownership of ‘/var/lib/ldap/data’: Operation not permitted

只好退而求其次,使用hostPath来针对pod做持久化

...
    - hostPath:
        path: /data/openldap
        type: DirectoryOrCreate
      name: data
...

部署

helm chart调整好之后,我们只需要一个命令就可以进行安装部署

  • helm install

使用

OpenLdap 有很多第三方的控制工具,也可以使用命令行来进行操作,我这里推荐使用的是 Apache Directory Studio, 下面是一些简单的使用案例:

命令行
ldapadd -x -D "cn=admin,dc=ldap-openldap,dc=authelia" -w "W58jkiat0wt0hkUXSBUwJBbVFhaEmDr8" <<EOF
dn: uid=ycloud,ou=ycloud,dc=ldap-openldap,dc=authelia
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
cn: ycloud
sn: User
givenName: ycloud
uid: ycloud
userPassword: {SHA}ICy5YqxZB1uWSwcVLSNLcA==
ou: ycloud
EOF

这是一个简单的添加功能

Web

使用WEB,查看我们刚刚添加的用户属性,针对我们部署的openldap进行连接。

在这里插入图片描述

Authelia

整体跟OpenLdap部署流程是一致的,配置中我们只需要调整,authelia绑定的ldap信息,所以我们这里只提供下最终的配置文件

  • helm repo add truecharts https://charts.truecharts.org/
  • helm install authelia truecharts/authelia --version 15.1.29
---
theme: light


default_redirection_url: ""
default_2fa_method: 'totp'
server:
  host: 0.0.0.0
  port: 9091
  path: auth
  asset_path: ''

  headers:
    csp_template: ''
  buffers:
    read: 4096
    write: 4096
  tls:
    key: "/app/ssl/tls.key"
    certificate: "/app/ssl/tls.crt"
  timeouts:
    read: 6s
    write: 6s
    idle: 30s
  enable_pprof: false
  enable_expvars: false
log:
  level: debug
  format: text
  file_path: ''
  keep_stdout: true
  

totp:
  disable: false
  issuer: shmao.net
  algorithm: sha1
  digits: 6
  period: 30
  skew: 1
  secret_size: 32
webauthn:
  disable: false
  display_name: Authelia
  attestation_conveyance_preference: indirect
  user_verification: preferred
  timeout: 60s
ntp:
  address: time.cloudflare.com:123
  version: 4
  max_desync: 3s
  disable_startup_check: false
  disable_failure: false
authentication_backend:
  password_reset:
    disable: false
    custom_url: ''
  ldap:
    implementation: activedirectory
    url: ldap://ldap-openldap:389
    timeout: 5s
    start_tls: false
    tls:
      server_name: ''
      skip_verify: false
      minimum_version: TLS1.2
      maximum_version: TLS1.3
    base_dn: dc=ldap-openldap,dc=authelia
    additional_users_dn: OU=ycloud
    permit_referrals: false
    permit_unauthenticated_bind: false
    permit_feature_detection_failure: false
    users_filter: "(&({username_attribute}={input})(objectClass=person))"
    username_attribute: uid
    user: CN=admin,DC=ldap-openldap,DC=authelia



password_policy:
  standard:
    enabled: false
    min_length: 8
    max_length: 0
    require_uppercase: true
    require_lowercase: true
    require_number: true
    require_special: true
  zxcvbn:
    enabled: false
    min_score: 0
session:
  name: 'authelia_gs_session'
  domain: 'shmao.net'
  same_site: 'lax'
  expiration: 1h
  inactivity: 5m
  remember_me_duration: 1M
  redis:
    host: redis-master
    port: 6379
    username: default
    password: qweasdzxc


  
regulation: 
  ban_time: 5m
  find_time: 2m
  max_retries: 3
storage:
  mysql:
    host: mysql
    port: 3306
    database: authelia
    username: root
    timeout: 5s
...

  • server:设置Authelia服务器的相关参数,包括主机名、端口号、路径、SSL证书等。
  • totp:启用或禁用基于时间的一次性密码(TOTP)身份验证,并设置相关参数,如加密算法、密码周期等。
  • webauthn:启用或禁用WebAuthn身份验证,并设置相关参数,如认证器名称、用户验证方式等。
  • ldap:设置LDAP身份验证后端的相关参数,包括LDAP服务器的URL、基本DN、用户名属性、过滤器等。
  • password_policy:设置密码策略,包括标准模式和zxcvbn模式两种,可以设置最小长度、大小写字母、数字和特殊字符等要求。
  • session:设置会话参数,如名称、域名、过期时间等。
  • regulation:设置访问限制参数,包括失败尝试次数、封禁时间、发现时间等。
  • storage:设置存储参数,包括MySQL数据库的连接信息。
  • notifier:设置通知功能的参数,包括SMTP服务器的连接信息、身份验证器等。

部署好之后我们先查看一下我们的应用是否正常,然后针对端口进行访问尝试

[root@sztcyl-177-9-244 authelia]# kubectl get svc -n authelia
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                       AGE
authelia         NodePort    10.253.246.20    <none>        80:5716/TCP                   37d
ldap-openldap    NodePort    10.253.165.233   <none>        389:36300/TCP,636:26749/TCP   25d
mysql            ClusterIP   10.253.43.75     <none>        3306/TCP                      38d
mysql-headless   ClusterIP   None             <none>        3306/TCP                      38d
redis-headless   ClusterIP   None             <none>        6379/TCP                      38d
redis-master     ClusterIP   10.253.129.138   <none>        6379/TCP                      38d
redis-replicas   ClusterIP   10.253.85.35     <none>        6379/TCP                      38d
[root@sztcyl-177-9-244 authelia]# kubectl get po  -n authelia
NAME                            READY   STATUS    RESTARTS        AGE
authelia-p6qhp                  1/1     Running   0               25d
authelia-stgzs                  1/1     Running   0               25d
authelia-vxwgl                  1/1     Running   0               25d
ldap-openldap-b5f757dc9-tqnv9   1/1     Running   0               25d
mysql-0                         1/1     Running   1 (5d23h ago)   25d
redis-master-0                  1/1     Running   0               25d
redis-replicas-0                1/1     Running   0               25d
redis-replicas-1                1/1     Running   1               26d
redis-replicas-2                1/1     Running   1 (25d ago)     26d

页面访问

访问地址 https://authelia.shmao.net/auth 这里域名已经绑定到对应的 authelia 服务,访问界面会是这样

在这里插入图片描述

⚡️: 这里的用户名密码就用我们上面,我们再openldap中创建的用户密码,填写之后点击登录,

在这里插入图片描述

反向代理进行集成

我们需要把Authelia,针对 url 来进行单点登录控制访问权限,这里我们得用到反向代理。

流程

访问 A 地址 --> 跳转到https://authelia.shmao.net/auth --> Authelia认证接口成功

在这里插入图片描述

    server {
      listen       8080 ssl;
      listen  [::]:8080 ssl;
      server_name  localhost;
      ssl_certificate      /etc/nginx/ssl/tls.crt;
      ssl_certificate_key  /etc/nginx/ssl/tls.key;
      location / {
          auth_request /auth;
          error_page 401 = /login;
          
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Authorization "Bearer $cookie_authelia_session";
          proxy_set_header Cookie $http_cookie;
          proxy_hide_header Strict-Transport-Security;
          proxy_pass http://127.0.0.1:80;
      }

      location /auth {
        internal;
        proxy_pass_request_body off;
        proxy_set_header Content-Length "";
        proxy_set_header X-Original-URI $request_uri;
        proxy_set_header Authorization "Bearer $cookie_authelia_session";
        proxy_set_header Cookie $http_cookie;
        proxy_pass https://authelia.shmao.net/auth/api/verify;
      }

      location /login {
        return 302  https://authelia.shmao.net/auth;
      }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/694731.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Python将图片转pdf

使用Python将图片转pdf 1. 效果图2. 源码参考 今天需要把图片转pdf&#xff0c;发现迅捷pdf转换开始默认带水印了&#xff0c;收费版那算了&#x1f602;&#x1f602;&#xff0c;那就用Python吧&#xff0c;可单转&#xff0c;可批量转。 参考: https://blog.csdn.net/qq_53…

我是如何在linux下 安装 mongoDB的

背景 接到上级任务&#xff0c;需要在测试环境搭建一套mongodb&#xff1b;对于从来没接触过mongodb的小白&#xff0c;但拥有多年编程经验的我来说&#xff0c;不虚好吧。因为我有自己做事的思考。 首先向领导确认两点&#xff1a; 搭建mongo db是单机版的&#xff0c;还是主…

自定义Veiw实战《渐变的文字》

自定义Veiw实战《渐变的文字》 前言SpannableString什么时候使用常用场景 自定义TextView控件什么时候使用实战歌词渐变的文字先看效果第一步&#xff1a;初始化第二步&#xff1a;测量文字&#xff0c;并确认文字绘制的起点第三步&#xff1a;绘制文字第四步&#xff1a;调用 …

Node.js安装及npm国内镜像配置

node.js中文网站下载&#xff0c;以16.17为例&#xff01;&#xff01;&#xff01;&#xff01; 安装 1.网站链接 CNPM Binaries Mirror (npmmirror.com) 根据自己的版本选择&#xff0c;我是64位选择了zip版 2.下载完成后解压 我选择的目录是&#xff08;E:\Environments…

mac中在html中引入react.development.js、react-dom.development.js报错

错误描述 Uncaught ReferenceError: process is not definedUncaught Invariant Violation: ReactDOM was loaded before React. Make sure you load the React package before loading ReactDOM.Inline Babel script:3 Uncaught ReferenceError: React is not defined解决 1…

react中数组列表的简单新增,删除以及修改实践

react中数组列表的简单新增&#xff0c;删除以及修改实践 效果示例图示例代码 index.jsx示例样式 index.scss 效果示例图 新增图片 编辑图片 示例代码 index.jsx import { useEffect, useState } from "react"; import "./index.scss";// 创建数据 fu…

WebGIS 信息系统-数据库设计

WebGIS 信息系统-数据库设计 E-R 图设计创建数据库及数据表开发环境及环境配置1 .服务器端2. 客户端1 &#xff09;配置Struts22 &#xff09;配置Hibernate3 &#xff09;配置Spring4 &#xff09;配置Web . xml 基于GIS 的交通信息系统采用PostgreSQL 为属性数据库&#xff0…

虚拟机中Ubuntu 22上传框被黑框包裹的解决方法

虚拟机中Ubuntu 22上传框被黑框包裹的解决方法 现象解决方法 现象 在vm17下的ubuntu22使用上传表单时出现了这种不和谐的现象&#xff0c;被领导批评一通。最后费劲心思&#xff0c;找到了这个问题的解决方法。 解决方法 解决方法特别容易&#xff0c;在虚拟机的设置中&…

TypeScript 【type】关键字的进阶使用方式

导语&#xff1a; 在前面章节中&#xff0c;我们了解到 TS 中 type 这个关键字&#xff0c;常常被用作于&#xff0c;定义 类型别名&#xff0c;用来简化或复用复杂联合类型的时候使用。同时也了解到 为对象定义约束接口类型 的时候所使用的是 Interfaces。 其实对于前面&#…

ansible - 安装 -【kodcloud教程】

目录 目录结构、主机清单 【1】安装基础环境 【2】webserver - 安装nginx 【3】安装php环境 【4】lb-server 【5】redis安装 【6】 kodcloud 【7】wordpress-proxy ansible10.0.0.10lb-server10.0.0.11web0110.0.0.15web0210.0.0.16redis10.0.0.20 目录结构、主机清单…

[python][yolov7][深度学习]将yolov7实例分割成一个类几句代码完成实例分割任务

大家都知道,yolov7目前支持图像分类、目标检测和实例分割&#xff0c;而实例分割一般都是用predict.py去预测图片这个如果要引入pyqt5或着嵌入其他python模块有点麻烦&#xff0c;因此需要封装一个类去预测图像&#xff0c;这样我们可以轻松完成各种实例分割任务&#xff0c;封…

virtualbox安装已有的虚拟硬盘文件

按照网上安装virtualbox虚拟机操作&#xff0c;我是安装已有的虚拟硬盘文件。 名称是虚拟机的名称&#xff0c;文件夹是虚拟机安装的文件夹建议大一点。 分配内存&#xff1a; 对于第一次安装已有的vdi虚拟硬盘文件&#xff0c;这里并没有任何显示&#xff08;我下面已经添…

EA代码逆向工程

下载安装 链接&#xff1a;https://pan.baidu.com/s/1xQ2q-_cSt_DTI3zIDvxkFw 提取码&#xff1a;wq83 使用教程&#xff1a; 构建类图 打开EA&#xff0c;点击左上角的图标新建项目。 起一个项目名称&#xff0c;"逆向工程测试"。 新建好后的页面&#xff1a; …

Bootstrap 网格系统

文章目录 Bootstrap 网格系统什么是网格&#xff08;Grid&#xff09;&#xff1f;什么是 Bootstrap 网格系统&#xff08;Grid System&#xff09;&#xff1f;移动设备优先策略内容布局渐进增强 Bootstrap 网格系统&#xff08;Grid System&#xff09;的工作原理媒体查询网格…

自学黑客(网络安全),一般人我劝你还是算了吧(自学网络安全学习路线--第十一章 网络安全技术下)【建议收藏】

文章目录 一、自学网络安全学习的误区和陷阱二、学习网络安全的一些前期准备三、自学网络安全学习路线一、入侵检测系统1、入侵检测系统模型2、入侵检测系统分类3、入侵检测系统部署 二、VPN1、VPN工作原理2、VPN的优点3、VPN的分类4、VPN的工作原理5、VPN的主要技术 一、自学网…

使用OpenXML库替换docx文档(Word文档)中的特定字段

在批量生成Word文档的应用中&#xff0c;最常见的需求莫过于替换掉文档中的特定字段以生成新的文档。利用OpenXML库可轻松实现这一需求。 不完善版本 首先放出最简单然而有bug的版本&#xff1a; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wor…

第6讲:使用ajax技术实现模拟百度搜索功能(xml数据)

使用ajax技术实现模拟百度搜索功能&#xff0c;本案例使用原生态xmlhttprequest对象&#xff0c;GET方法通讯&#xff0c;后台使用map保存搜索数据&#xff0c;查询到对应数据后&#xff0c;返回xml格式数据&#xff0c;前端使用responseXML属性返回xml格式数据&#xff0c;结合…

6.安卓移动端开发

开发概览 Android官网 提供了开发环境&#xff0c;也就是android平台&#xff0c;即android SDK&#xff0c;即android版本 SDK版本和API版本的关系&#xff08;安卓的版本是个位数和小数形式增长&#xff0c;API版本是以个位数正则&#xff0c;所以API版本号和android版本号不…

图像梯度——Sobel、Scharr、Laplacian

图像梯度-Sobel算子 dst cv2.Sobel(src, ddepth, dx, dy, ksize) src: 图像数组变量ddepth: 图像的深度&#xff0c;一般填-1&#xff0c;表示与原始图像深度一致&#xff1b; cv2.CV_64F表示每一个像素点值为64位浮点数&#xff0c;是OpenCV定义的数据类型dx和dy分别表示水平…

车端服务器架构「升级」

过去几年&#xff0c;随着整车电子架构从分布式向集中式升级&#xff0c;域控制器&#xff08;通常分为五大域&#xff1a;动力域、底盘域、座舱域、智驾域、车身域&#xff09;带动供应链进入增值周期&#xff0c;背后隐藏的则是供应商的洗牌。 以座舱为例&#xff0c;从传统的…