认证 authentication
认证方式
http token
每一个 token对应一个用户名 存储在 api server 能访问的文件中
当客户端发起 api 调用请求时, 需要在 http header 里放入 token
http base
用户名 + 密码
使用 base64 进行编码后放在 http 请求的 Header Authorization 域里发送给服务端,服务端收到后进行编码,获取用户名及密码
https 证书

需要认证的节点
controller manager 、 scheduler -> apiserver 使用 127.0.0.1
kubectl -> apiserver
kubelet -> apiserver 使用 kubeconfig
kube-proxy -> apiserver
pod -> apiserver 使用 ServiceAccount
apiserver -> etcd
证书签发方式
手动
通过 k8s 集群跟 ca 进行签发
自动
kubelet 首次访问 apiserver ,使用 token 做认证,通过后 controller manager 为 kubelet 生成一个证书,以后访问都是证书认证
kubeconfig 文件
集群参数 ca 证书、apiserver 地址
客户端参数 证书、私钥
集群 context 信息 集群名称、用户名
ServiceAccount
解决 pod 访问 apiserver 的认证问题
pod 动态,手动生成证书不可取
Secret 与 ServiceAccount
每个 namespace 都有一个名为 default-token-xxxxx 的 secrets
类型是 kubernetes.io/service-account-token
每个 namespace 还有一个名为 default 的 sa
引用了 secrets default-token-xxxxx
pod默认挂载 /run/secrets/kubernetes.io/serviceaccount/
token
使用 apiserver 私钥签名的 JWT(Json Web Token)
用于访问 apiserver时,server端认证
ca.crt
用于 client 验证 apiserver 发送的证书
namespace
标识 service-account-token 的作用空间
鉴权 authorization
授权模式
apiserver 使用 —authorization-mode=xxx 参数
AlwaysDeny
拒绝所有
AlwaysAllow
接受所有
ABAC (Attribute-Based Access Control)
基于属性访问控制
使用用户配置的授权规则对用户请求进行匹配和控制
Webhook
调用外部 REST 服务对用户进行授权
RBAC (Role-Base Access Control)
基于角色访问控制

