kubernetes实战(十一):k8s使用openLDAP统一认证

1、基本概念

  为了方便管理和集成jenkins,k8s、harbor、jenkins均使用openLDAP统一认证。

2、部署openLDAP

  根据之前的文档,openLDAP使用GFS进行数据持久化。

  下载对应的openLDAP文件

git clone https://github.com/dotbalo/k8s.git
cd k8s/openldap

  创建openLDAP

[[email protected] openldap]# kubectl apply -f .
deployment.extensions/ldap created
persistentvolumeclaim/openldap-data created
secret/ldap-secret created
service/ldap-service created
deployment.extensions/phpldapadmin created
service/phpldapadmin created

  此处参考的是:https://github.com/osixia/docker-openldap,更新DN可以更改environment下的yaml文件,默认的example.org

  创建ldap-ui-ingress

[[email protected] traefik]# kubectl create -f traefik-ldap.yaml
ingress.extensions/ldap-ui created
[[email protected]-master01 traefik]# cat traefik-ldap.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ldap-ui
  namespace: public-service
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
  - host: ldap.xxx.net
    http:
      paths:
      - backend:
          serviceName: phpldapadmin
          servicePort: 8080

3、查看验证

[[email protected] openldap]# kubectl get po,svc,pvc -n public-service | grep ldap
pod/ldap-944645448-pqj8b            1/1       Running   0          4m
pod/phpldapadmin-6c99c76cb6-knmpf   1/1       Running   0          4m

service/glusterfs-dynamic-openldap-data   ClusterIP   10.111.198.83    <none>        1/TCP             3m
service/ldap-service                      ClusterIP   10.98.153.44     <none>        389/TCP,636/TCP   4m
service/phpldapadmin                      ClusterIP   10.109.141.207   <none>        8080/TCP          4m

persistentvolumeclaim/openldap-data                              Bound     pvc-f251128b-ec17-11e8-8a89-000c293ad492   1Gi        RWX            gluster-heketi                4m

  访问phpldapadmin:ldap.xxx.net

  默认DN:cn=admin,dc=example,dc=org,默认Password:admin(线上系统需自定义修改)

  登录成功如下:

5、添加用户和组

  创建Groups和People OU

  相同方式创建Groups

  创建组和用户

  相同方式创建测试组,devops组

  创建用户

  填写基本信息,选择组和Login Shell

  注意修改Common Name

  为每个用户添加Email,没有Email无法登陆gitlab

6、配置k8s使用ldap登录

  修改openldap/k8s-ldap的nginx配置,server为k8s dashboard的地址

  制作镜像

[[email protected] k8s-ldap]# docker build -t dotbalo/k8s-nginx-ldap .
Sending build context to Docker daemon 22.02 kB
Step 1/10 : FROM python:2-alpine
 ---> f901fc789b69
Step 2/10 : COPY nginx-ldap-auth-daemon.py /usr/src/app/
 ---> Using cache
 ---> 2c09e174dc92
Step 3/10 : WORKDIR /usr/src/app/
 ---> Using cache
 ---> 80b2344aff04
Step 4/10 : RUN apk --no-cache add openldap-dev &&     apk --no-cache add --virtual build-dependencies build-base &&     pip install python-ldap &&     apk del build-dependencies
 ---> Using cache
 ---> 562bd91f40e4
Step 5/10 : ENV NGINX_VERSION 1.14.1
 ---> Using cache
 ---> ebeed109cb40
Step 6/10 : RUN set -x  && mkdir -p       /tmp/src/nginx       /usr/lib/nginx/modules       /var/cache/nginx  && apk add --no-cache --virtual .build-deps       curl       gcc       gd-dev       geoip-dev       gnupg       libc-dev       libxslt-dev       linux-headers       make       openldap-dev       pcre-dev       tar       unzip       zlib-dev  && curl -fsSL http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz | tar vxz --strip=1 -C /tmp/src/nginx  && curl -fsSL https://github.com/kvspb/nginx-auth-ldap/archive/master.zip -o /tmp/nginx-auth-ldap-master.zip  && unzip -d /tmp/src /tmp/nginx-auth-ldap-master.zip  && cd /tmp/src/nginx  && addgroup -S nginx  && adduser -D -S -h /var/cache/nginx -s /sbin/nologin -G nginx nginx  && ./configure     --prefix=/usr/share/nginx     --sbin-path=/usr/sbin/nginx     --modules-path=/usr/lib/nginx/modules     --conf-path=/etc/nginx/nginx.conf     --error-log-path=/var/log/nginx/error.log     --http-log-path=/var/log/nginx/access.log     --pid-path=/var/run/nginx.pid     --lock-path=/var/run/nginx.lock     --http-client-body-temp-path=/var/cache/nginx/client_temp     --http-proxy-temp-path=/var/cache/nginx/proxy_temp     --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp     --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp     --http-scgi-temp-path=/var/cache/nginx/scgi_temp     --user=nginx     --group=nginx     --with-http_ssl_module     --with-http_realip_module     --with-http_addition_module     --with-http_sub_module     --with-http_dav_module     --with-http_flv_module     --with-http_mp4_module     --with-http_gunzip_module     --with-http_gzip_static_module     --with-http_random_index_module     --with-http_secure_link_module     --with-http_stub_status_module     --with-http_auth_request_module     --with-http_xslt_module=dynamic     --with-http_image_filter_module=dynamic     --with-http_geoip_module=dynamic     --with-threads     --with-stream     --with-stream_ssl_module     --with-stream_ssl_preread_module     --with-stream_realip_module     --with-stream_geoip_module=dynamic     --with-http_slice_module     --with-mail     --with-mail_ssl_module     --with-compat     --with-file-aio     --with-http_v2_module     --add-module=/tmp/src/nginx-auth-ldap-master  && make -j$(getconf _NPROCESSORS_ONLN)  && make install  && mkdir -vp       /etc/nginx/conf.d/       /usr/share/nginx/html/  && install -m644 html/index.html /usr/share/nginx/html/  && install -m644 html/50x.html /usr/share/nginx/html/  && ln -sf /dev/stdout /var/log/nginx/access.log  && ln -sf /dev/stderr /var/log/nginx/error.log  && apk add --no-cache --virtual .gettext gettext  && mv /usr/bin/envsubst /tmp/  && runDeps="$(     scanelf --needed --nobanner /usr/sbin/nginx /usr/lib/nginx/modules/*.so /tmp/envsubst       | awk ‘{ gsub(/,/, "\nso:", $2); print "so:" $2 }‘       | sort -u       | xargs -r apk info --installed       | sort -u     )"  && apk add --no-cache --virtual .nginx-rundeps $runDeps  && apk del .build-deps  && apk del .gettext  && rm -fr     /etc/nginx/*.default     /tmp/*     /var/tmp/*     /var/cache/apk/*
 ---> Using cache
 ---> 3283f6c81d18
Step 7/10 : COPY start.sh /bin/
 ---> Using cache
 ---> c2204e898bb8
Step 8/10 : COPY nginx.conf /etc/nginx/
 ---> d99a904b384d
Removing intermediate container 5f086340c1e5
Step 9/10 : EXPOSE 8888
 ---> Running in 1b52b272eeda
 ---> 72825fcd8ea5
Removing intermediate container 1b52b272eeda
Step 10/10 : EXPOSE 8081
 ---> Running in fdce8ba84145
 ---> f4f3866e01b1
Removing intermediate container fdce8ba84145
Successfully built f4f3866e01b1

  修改k8s-ldap的ldap-deployment.yaml镜像名称

[[email protected] k8s-ldap]# kubectl create -f ldap-deployment.yaml
[[email protected]-master01 k8s-ldap]# kubectl get po,svc -n public-service | grep k8s-nginx

pod/k8s-nginx-ldap-5c5bf9595d-8pqw2   1/1       Running   0          4m
service/k8s-nginx-ldap                    NodePort    10.100.70.192   <none>        8081:31486/TCP    14m
[[email protected]-master01 k8s-ldap]#

  访问:IP:NODEPORT

  输入刚才创建的账号密码,注意此时是没有权限的

  官网的解释如下

  貌似所有的请求头都被清空,都变成了system:serviceaccount:kube-system:kubernetes-dashboard这个用户

7、授权访问

  在k8s安装后,会自动创建一个有全局读权限的clusterrole:view,将此权限授权给system:serviceaccount:kube-system:kubernetes-dashboard用户

[[email protected] k8s-ldap]# kubectl create -f k8s-ldap-user-crb.yaml
clusterrolebinding.rbac.authorization.k8s.io/k8s-ldap-user created

  创建完成后刷新dashboard,可以看到有了只读权限(secret和role没有权限)

8、总结

  1) 与容器云相比,容器云的权限控制更为完善,可是实现基于用户的验证,可以区分openLDAP中不同的用户不同的权限,而k8s被统一成了kubernetes-dashboard这个用户,也有可能是自己没有配置成功,后期需要再次确认。

  2) 可以限制openLDAP中的用户只访问某些namespace,需要自行定义权限。

  3) 公司没有需要无需让非ops员工访问k8s。

参考:

    https://github.com/osixia/

    https://icicimov.github.io/blog/virtualization/Kubernetes-LDAP-Authentication/

    https://github.com/nginxinc/nginx-ldap-auth.git

原文地址:https://www.cnblogs.com/dukuan/p/9983899.html

时间: 2024-11-08 23:08:55

kubernetes实战(十一):k8s使用openLDAP统一认证的相关文章

CentOS7下OpenLDAP统一认证的主从环境部署记录

之前总结了OpenLDAP基础知识,以往在centos6.x系统上是通过slapd.conf配置部署OpenLDAP主从环境的,centos7上默认是动态部署的,通过yum安装发现无slapd.conf文件.下面记录下Centos7.4系统下OpenLDAP主从环境配置记录: 1)服务器基本信息 192.168.10.213 openldap-master 192.168.10.214 openldap-slave 关闭两个节点机器的防火墙和selinux(两个节点机器上都要操作) [[emai

Samba通过Openldap统一认证

1.环境准备1.1.实验环境[[email protected] ~]# cat /etc/redhat-releaseCentOS release 6.8 (Final)[[email protected] ~]# uname -r2.6.32-642.el6.x86_64 1.2.校准服务器时间[[email protected] ~]# ntpdate pool.ntp.org12 Nov 01:11:59 ntpdate[2354]: adjust time server 202.118

【.NET Core项目实战-统一认证平台】第十一章 授权篇-密码授权模式

[.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章介绍了基于Ids4客户端授权的原理及如何实现自定义的客户端授权,并配合网关实现了统一的授权异常返回值和权限配置等相关功能,本篇将介绍密码授权模式,从使用场景.源码剖析到具体实现详细讲解密码授权模式的相关应用. .netcore项目实战交流群(637326624),有兴趣的朋友可以在群里交流讨论. 一.使用场景? 由于密码授权模式需要用户在业务系统输入账号密码,为了安全起见,对于使用密码模式的业务系统,我们认为是绝对可靠的,不存在

Linux环境下通过OpenLDAP实现用户的统一认证和管理

测试环境: OpenLDAP Server <-------------------------------------------->OpenLDAP Client ip:192.168.4.178                                                                 ip:192.168.4.177 Centos 6.4                                                         

【.NET Core项目实战-统一认证平台】第七章 网关篇-自定义客户端限流

[.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章我介绍了如何在网关上增加自定义客户端授权功能,从设计到编码实现,一步一步详细讲解,相信大家也掌握了自定义中间件的开发技巧了,本篇我们将介绍如何实现自定义客户端的限流功能,来进一步完善网关的基础功能. .netcore项目实战交流群(637326624),有兴趣的朋友可以在群里交流讨论. 一.功能描述 限流就是为了保证网关在高并发或瞬时并发时,在服务能承受范围内,牺牲部分请求为代价,保证系统的整体可用性而做的安全策略,避免单个服务

【.NET Core项目实战-统一认证平台】第八章 授权篇-IdentityServer4源码分析

[.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章我介绍了如何在网关上实现客户端自定义限流功能,基本完成了关于网关的一些自定义扩展需求,后面几篇将介绍基于IdentityServer4(后面简称Ids4)的认证相关知识,在具体介绍ids4实现我们统一认证的相关功能前,我们首先需要分析下Ids4源码,便于我们彻底掌握认证的原理以及后续的扩展需求. .netcore项目实战交流群(637326624),有兴趣的朋友可以在群里交流讨论. 一.Ids4文档及源码 文档地址 http:/

【.NET Core项目实战-统一认证平台】第十章 授权篇-客户端授权

原文 [.NET Core项目实战-统一认证平台]第十章 授权篇-客户端授权 [.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章介绍了如何使用Dapper持久化IdentityServer4(以下简称ids4)的信息,并实现了sqlserver和mysql两种方式存储,本篇将介绍如何使用ids4进行客户端授权. .netcore项目实战交流群(637326624),有兴趣的朋友可以在群里交流讨论. 一.如何添加客户端授权? 在了解如何进行客户端授权时,我们需要了解详细的授权流程

【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程

原文:[.NET Core项目实战-统一认证平台]第十二章 授权篇-深入理解JWT生成及验证流程 [.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章介绍了基于Ids4密码授权模式,从使用场景.原理分析.自定义帐户体系集成完整的介绍了密码授权模式的内容,并最后给出了三个思考问题,本篇就针对第一个思考问题详细的讲解下Ids4是如何生成access_token的,如何验证access_token的有效性,最后我们使用.net webapi来实现一个外部接口(本来想用JAVA来实现的,

【.NET Core项目实战-统一认证平台】第十四章 授权篇-自定义授权方式

[.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章我介绍了如何强制令牌过期的实现,相信大家对IdentityServer4的验证流程有了更深的了解,本篇我将介绍如何使用自定义的授权方式集成老的业务系统验证,然后根据不同的客户端使用不同的认证方式来集成到统一认证平台. .netcore项目实战交流群(637326624),有兴趣的朋友可以在群里交流讨论. 一.自定授权源码剖析 当我们需要使用开源项目的某些功能时,最好了解实现的原理,才能正确和熟练使用功能,避免出现各种未知bug问