大家好,这是小丑。
在Kubernetes中,Apiserver是整个群集的中心紧张。它不仅连接每个模块,还为整个群集提供访问控件。
Kubernetes API的每个请求必须通过访问控制的多个阶段(包括认证,授权和访问)接受,如下所示。客户(普通帐户,ServiceAccount等)希望访问Kubernetes中的资源,您需要通过通过Apiserver的三个步骤正常访问它。这三个步骤如下:
本文主要与所有人讨论认证链接。
Kubernetes支持各种认证机制,还支持各种认证插件。在身份验证过程中,只要一遍,就意味着认证。
常见的身份验证插件是:
我不会在此处介绍每个身份验证插件,而是主要谈论Webhook的用法。
在企业中,其中大多数将拥有自己的帐户中心来管理员工的帐户和权限。在K8S群集中,还需要执行帐户管理。直接使用现有帐户系统更方便吗?
K8S的Webhook可以达到这一需求。Webhook是HTTP回调。它通过条件发送到Webhook服务器,以触发HTTP POST请求。根据请求数据处理服务器。
这是0到1的认证服务。
Webhook的功能主要是接收Apiserver认证请求,然后致电不同的认证服务以进行认证,如下所示。
这只是一个webhook示例。目前,它主要是实施和认证。当然,认证部分的功能相对单身,并且没有复杂的场景。
开发环境将获得1.17.3 Kubernetes v1.22.3 System Centos7.6在开发Webhook时构建标准化的Webhook以满足Kubernetes的规范。细节如下:
如果您成功,请返回:
如果不成功,它将返回:
远程服务应填写所需的状态字段,以指示登录操作是否成功。
开发认证服务(1)创建项目并初始化GO Mod
(2)在项目root目录中创建webhook.go并编写以下内容
主要是分析请求令牌,然后需要使用什么认证才能将令牌分开判决分开。令牌的样本如下:
这样,您可以获得用户想要使用的身份验证,然后删除特定的认证服务进行处理。
(3)创建github.go提供GitHub身份验证方法
可以看出,这里只有一个简单的令牌认证,并且认证的结果相对粗鲁。如果证明是成功的。
(4)创建ldap.go并提供LDAP认证
这里的用户名是固定的,因此不适合其他场景。
(5)创建Main.go输入功能
此时,已经开发了整个认证服务。这很简单吗?
Apiserver添加了使用Webhook进行认证的认证服务,并且需要在Kube-aperver中打开。参数如下:
配置文件使用kubeconfig文件的格式。在文件中,簇是指远程服务,用户指的是远程API服务webhook。配置如下:
(1)将配置文件放在相应的目录上
(2)在kube-aperver中添加配置参数
PS:为了节省空间,上面省略了一些配置。
修改完成后,kube-aperver将自动重新启动。
测试GitHub身份验证(1)在GitHub上获取令牌,该操作如图所示。
(2)配置kubeconfig,添加用户
(3)使用Joker用户进行访问和返回结果如下。至于错误,用户的权限不足。
您可以在Webhook上查看日志信息,如下所示:
从日志和结果可以看出,使用GITHUB认证是可以的。
测试LDAP认证LDAP简介LDAP是一项协议,而不是软件。
这是一项轻型目录访问协议。完整的英语名称通常称为ldap。根据我们对文件目录的理解,可以将LDAP视为文件系统,类似于目录和文件树。
OpenLDAP是常用的服务之一,它也是我们为此测试的认证服务。
有许多用于安装OpenLDAP的安装方法。您可以使用容器部署或直接安装在裸机上。后者在这里使用。
默认配置文件位于此处,文件格式是LDAP目录的特定格式。请勿在此处引入太多配置文件。如果您有兴趣,可以自己从中学习[1]。
在LDAP(1)导入模板上配置用户
(2)创建基础组织
使用添加基础。
(3)添加成员
使用ldapadd执行。
(4)将用户添加到组
使用ldapadd执行。
配置kubeconfig以执行LDAP认证测试(1)修改配置文件
(2)使用kubectl进行测试
Webhook服务日志如下:
可以通过测试结果看到成功使用LDAP认证测试。
使用Webhook可以灵活地连接到企业的K8S租户和内部帐户系统,这可以促进用户帐户的管理。
但是,上面开发的Webhook只是一个简单的示例。验证方法和技术相对粗鲁。开源[2]是可以直接使用的相对好的产品。
【1】http://www.ldap.org.cn/286.html
【2】https://github.com/dexidp/dex
【3】项目地址:https://gitee.com/coolops/kubernetes-webhook.git
原始:https://juejin.cn/post/7106302131442810916