身份认证策略
API Server启用的身份认证机制
kubelet启用的身份认证机制
X.509数字证书认证
静态令牌文件
Service Account令牌
OpenID Connect(OIDC)令牌
Webhook令牌认证
身份认证代理
静态令牌认证配置案例
静态令牌认证的基础配置
配置示例
X509 数字证书认证
所有的证书
X509数字证书认证测试
身份认证策略X.509客户端证书认证
持有者令牌(bearer token)静态令牌文件(Static Token File)
Bootstrap令牌
Service Account令牌
OIDC(OpenID Connect)令牌
Webhook令牌
身份认证代理(Authenticating Proxy)
匿名请求
API Server启用的身份认证机制基于认证插件支持多种认证方式,而相应认证插件的启用需要经 由kube-apiserver上的专用选项完成 kubeadm v1.26 部署的集群默认启用的认证机制如右图红框中的选 项,它们依次是
X509客户端证书认证
Bootstrap令牌认证
身份认证代理
Service Account认证
注意:API Server并不保证各认证插件的生效次序与定义的次序相同
kubelet启用的身份认证机制 kubelet的REST API端点默认通过TCP协议的10250端口提供,支持管理操作 需要对客户端身份进行认证启用的身份认证webhook
x509客户端证书认证
注意:建议显式禁用匿名用户
API Server是该API端点的客户端,因此,kubelet需要在验证客户端身份时信任给API Server 颁发数字证书的CA
X.509数字证书认证在双向TLS通信中,客户端持有数字证书,而API Server信任客户端证书的颁发者
信任的CA,需要在kube-apiserver程序启动时,通过--client-ca-file选项传递
认证通过后,客户端数字证书中的CN(Common Name)即被识别为用户名,而O(Organization)被识别为组名
kubeadm部署的Kubernetes集群,默认使用 /etc/kubernetes/pki/ca.crt 进行客户端认证
/etc/kubernetes/pki/ca.crt是kubeadm为Kubernetes各组件间颁发数字证书的CA
静态令牌文件令牌信息保存于文本文件中 由kube-apiserver在启动时通过--token-auth-file选项加载 加载完成后的文件变动,仅能通过重启程序进行重载,因此,相关的令牌会长期有效 客户端在HTTP请求中,通过“Authorization Bearer TOKEN”标头附带令牌令牌以完成认证
Service Account令牌该认证方式将由kube-apiserver程序内置直接启用
它借助于经过签名的Bearer Token来验证请求签名时使用的密钥可以由--service-account-key-file选项指定,也可以默认使用API Server的tls私钥
用于将Pod认证到API Server之上,以支持集群内的进程与API Server通信Kubernetes可使用ServiceAccount准入控制器自动为Pod关联ServiceAccount
OpenID Connect(OIDC)令牌OAuth3认证机制,通常由底层的IaaS服务所提供
Webhook令牌认证是一种用于验证Bearer Token的回调机制
能够扩展支持外部的认证服务,例如LDAP等
身份认证代理由kube-apiserver从请求报文的特定HTTP标头中识别用户身份,相应的标头名称可由特定的选项配置指定
kube-apiserver应该基于专用的CA来验证代理服务器身份
静态令牌认证配置案例 静态令牌认证的基础配置令牌信息保存于文本文件中文件格式为CSV,每行定义一个用户,由“令牌、用户名、用户ID和所属的用户组”四个字段组成,用户组为可选字段
格式:token,user,uid,"group1,group2,group3"
由kube-apiserver在启动时通过--token-auth-file选项加载
加载完成后的文件变动,仅能通过重启程序进行重载,因此,相关的令牌会长期有效
客户端在HTTP请求中,通过“Authorization Bearer TOKEN”标头附带令牌令牌以完成认证
配置示例① 生成token,命令:echo "(opensslrand−hex3).(openssl rand -hex 3).(opensslrand−hex3).(openssl rand -hex 8)"
② 生成static token文件
③ 配置kube-apiserver加载该静态令牌文件以启用相应的认证功能
④ 测试,命令:curl -k -H "Authorization: Bearer TOKEN" -k https://API_SERVER:6443/api/v1/namespaces/default/pods/
X509 数字证书认证X509客户端认证依赖于PKI证书体系,kubeadm部署Kubernetes集群时会自动生成所需要的证书,它们位于/etc/kubernetes/pki目录下
依赖到的PKI体系
另外,对Service Account的token进行签名还需要用到一个可选的密钥对儿
所有的证书各kubelet的证书可在Bootstrap过程中自动生成证书签署请求,而后由Kubernetes CA予以签署
各kube-proxy、kube-scheduler和kube-controller-manager也都有相应的数字证书以完成向API Server的身份认证
X509数字证书认证测试创建客户端私钥和证书签署请求,为了便于说明问题,以下操作在master节点上以/etc/kubernetes/为工作目录
1 生成私钥: (umask 077; openssl genrsa -out ./pki/mason.key 4096)
2 创建证书签署请求: openssl req -new -key ./pki/mason.key -out ./pki/mason.csr -subj "/CN=mason/O=developers"
3 由Kubernetes CA签署证书: openssl x509 -req -days 365 -CA ./pki/ca.crt -CAkey ./pki/ca.key -CAcreateserial -in ./pki/mason.csr -out ./pki/mason.crt
4 将pki目录下的mason.crt、mason.key和ca.crt复制到某部署了kubectl的主机上,即可进行测试
这里以k8s-node01为示例;只需要复制mason.crt和mason.key即可,因为集群工作节点上已经有cr.crt文件
命令:scp -rp ./pki/{mason.crt,mason.key} k8s-node01:/etc/kubernetes/pki
以上就是k8s实现身份认证策略及过程解析的详细内容,更多关于k8s 身份认证的资料请关注软件开发网其它相关文章!