前面演示了如何通过静态token和x509的方式完成认证,接着看看如何集成外部认证服务完成kube-apiserver的认证。
为了演示如何通过webhook完成认证,首先需要创建webhook服务,并在本地启动它,具体webhook服务的代码请看这里。 这里的makefile配置的操作系统是Linux,如果是mac电脑,需要修改makefile中“GOOS=darwin”。该webhook的服务大致的作用是讲APIServer的发送过来的请求进行decode,如果decode成功则把信息转发给认证服务(这里用的github,因为github上可以生存token,然后完成认证的功能,实际项目中应该是转发到企业的认证服务上)。github认证完成后,返回认证结果信息,webhook将认证结果信息返回给apiserver。
webhook服务在本地启动后,可以访问3000端口checkwebhook服务是否启动成功。
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资源而已。
kubectl get po --user githubuser
以上就是通过集成外部认证服务完成kube-apiserver认证的过程。



