k8s中kubelet接口的认证和授权
访问kubelet接口的认证和授权
出于监控的目的,需要获取k8s中pod的CPU以及内存使用率等指标,经过了解发现需要调用kubelet的指标接口去获取相应信息。然而调接口时发现得认证和授权,下面说明一下kubelet接口认证授权的过程。
默认情况下,没有携带身份凭证的匿名请求会被认证为用户system:anonymous以及组system:unauthenticated。如果要拒绝将匿名请求认证为以上的用户与组,配置kubelet的如下启动参数,那么匿名请求就会认证失败
authentication:
anonymous:
enabled: false
kubelet的认证方法与apiserver相似,有client证书认证及token认证。
开启client认证和token认证需要做如下配置
authentication:
webhook:
enabled: true
x509:
clientCAFile: /xxxx.crt
以上配置表示开启了token认证以及X509证书认证。如果两个都开启,只需要一个验证通过即可。
当采用证书认证的方式时,需要一个ca.crt来验证apiserver的证书,还需要携带一个client.crt来表明自已的身份。在实际中,客户端还需要携带client.key。举例如下,
curl https://localhost:10250/metrics --cacert /etc/kubernetes/pki/ca.crt --cert /etc/kubernetes/pki/apiserver-kubelet-client.crt --key /etc/kubernetes/pki/apiserver-kubelet-client.key
除了认证之外,还需要进行授权。
kubelet的默认授权模式为AlwaysAllow,所有通过认证的请求(包括通过认证的匿名请求)有权限访问kubelet所有的API。这显然是不合理的,所以我们需要像apiserver那样对不同的请求赋予不同的权限。
kubelet通过如下的方法把授权委托给apiserver:
在apiserver中开启authorization.k8s.io/v1beta1这个API组
配置kubelet的启动参数
authorization:
mode: Webhook
然后kubelet就会通过apiserver的SubjectAccessReviewAPI来决定是否给每一个请求授权。kubelet与apiserver的API不一样,当访问kubelet的API时,kubelet需要把这个API映射到apiserver的API,apiserver才知道该授予怎样的权限。kubelet与apiserver的资源映射如下。比如A用户访问kubelet的Get /healthz,那么会映射为apiserver的Get /api/v1//nodes//proxy,然后kubelet会通过apiserver的SubjectAccessReview判断A用户是否有权限访问apiserver对应的API
kubelet API | resource | sub-resource |
---|---|---|
/stats/* | nodes | stats |
/metrics/* | nodes | metrics |
/logs/* | nodes | logs |
/spec/* | nodes | spec |
all others | nodes | proxy |
下面以token认证授权为例。
首选需要创建一个sa
kubectl create sa kubelet-test
创建clusterrole
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: kubelet-test
rules:
- apiGroups:
- ""
resources:
- nodes/metrics
verbs:
- get
接着绑定权限
Kubectl create clusterrolebinding kubelet-test --clusterrole=kubelet-test --serviceaccount=default:kubelet-test
现在就可以获取认证授权的token了。
kubectl describe secret kubelet-test-xxxx
当客户端使用该认证方式来发起请求的时候,需在Header参数中添加以下字段
Authorization: Bearer <token>
测试如下:
curl https://localhost:10250/metrics "Authorization: Bearer XXXXXX" -k
更多推荐
所有评论(0)