当前位置: 首页 > 网络应用技术

K8S自定义Webhook实施认证管理

时间:2023-03-05 22:49:08 网络应用技术

  大家好,这是小丑。

  在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