kube-apiserver认证机制下

前面演示了如何通过静态token和x509的方式完成认证,接着看看如何集成外部认证服务完成kube-apiserver的认证。如果k8s需要链接外部认证服务,那么认证服务需要满足Kubenetes的规范,即认证接口的URL=https://authservice/authenticate,Method=POST,Input格式如下所示

{"apiVersion":"authentication.k8s.io/v1beta1",
"kind":"TokenReview",
"spec":{
    "token": "tokenvalue"
}}

当认证服务满足上面的规范后,kube-apiserver是如何对接外部认证服务完成认证的呢?下面将以github代替真正的认证为例子给大家演示认证过程.(备注:github上生成token,当把token发送到github后,github可以返回token认证是否成功的信息),具体的认证过程如下所示

为了演示如何通过webhook完成认证,首先需要创建webhook服务,并在本地启动它,具体webhook服务的代码请看这里。 这里的makefile配置的操作系统是Linux,如果是mac电脑,需要修改makefile中“GOOS=darwin”。该webhook的服务大致的作用是将APIServer发送过来的请求进行decode,如果decode成功则把信息转发给认证服务(这里用的github,因为github上可以生成token,然后完成认证的功能,实际项目中应该是转发到企业的认证服务上)。github认证完成后,返回认证结果信息,webhook将认证结果信息返回给apiserver。

webhook服务在本地启动后,可以访问3000端口checkwebhook服务是否启动成功。

在github上生成一个token,然后通过api访问webhook服务,可以看到返回了认证成功的消息,说明webhook服务正确启动了。

webhook服务启动后,如何让APIServer把请求转发到webhook呢?这里就需要先创建webhook-config.json文件,具体内容如下,可以看到下面的api对象是一个Config对象,这里最主要的是server信息配置,这里的IP地址是本机的IP地址,因为上面的webhook服务启动后是监听3000端口,所以这里server地址是http://xxx:3000/authenticate.

{
  "kind": "Config",
  "apiVersion": "v1",
  "preferences": {},
  "clusters": [
    {
      "name": "github-authn",
      "cluster": {
        "server": "http://xx.xx.xx.xx:3000/authenticate"
      }
    }
  ],
  "users": [
    {
      "name": "authn-apiserver",
      "user": {
        "token": "secret"
      }
    }
  ],
  "contexts": [
    {
      "name": "webhook",
      "context": {
        "cluster": "github-authn",
        "user": "authn-apiserver"
      }
    }
  ],
  "current-context": "webhook"
}

接着,将该文件存放到集群中的/etc/config目录下,然后修改/etc/kubernetes/manifests/kube-apiserver.yaml,增加webhook-config的配置。

修改kube-apiserver.yaml文件后,kube-apiserver会自动重启,执行“kubectl get pod”能正常返回信息则重启成功,如果提示localhost:xxx:6443 connect refuse,说明kube-apiserver重启失败,需要检查kube-apiserver.yaml文件配置是否正确。

kube-apiserver.yaml文件修改成功后,接着在github上生成一个token.

修改~/.kube/config文件,新增一个user,且user的token是刚刚在github生成的token

此时,用githubuser获取pod信息,会返回403的信息,说明认证已经通过,只是该用户无权限访问pod资源而已。指定用户获取pod信息的命令:kubectl get po --user githubuser。

以上就是通过集成外部认证服务完成kube-apiserver认证的过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

taoli-qiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值