k8s实现身份认证策略及过程解析

 更新时间:2023年02月13日 10:55:07   作者:wffeige  
这篇文章主要为大家介绍了k8s实现身份认证策略及过程解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

身份认证策略

  • 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 身份认证的资料请关注脚本之家其它相关文章!

相关文章

  • K8S 中 kubectl 命令详解

    K8S 中 kubectl 命令详解

    这篇文章主要介绍了K8S 中 kubectl 命令,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • 删除Helm使用时关于kubernetes文件的警告问题

    删除Helm使用时关于kubernetes文件的警告问题

    这篇文章主要介绍了删除Helm使用时关于kubernetes文件的警告问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Kubernetes Ingress实现细粒度IP访问控制

    Kubernetes Ingress实现细粒度IP访问控制

    这篇文章主要为大家介绍了Kubernetes Ingress实现细粒度IP访问控制,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • Kubernetes访问控制之鉴权方法详解

    Kubernetes访问控制之鉴权方法详解

    这篇文章主要为大家介绍了Kubernetes访问控制之鉴权方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • RFO SIG之openEuler AWS AMI 制作详解

    RFO SIG之openEuler AWS AMI 制作详解

    这篇文章主要为大家介绍了RFO SIG之openEuler AWS AMI 制作详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • k8s解析kubeconfig的两种常用方式最新推荐

    k8s解析kubeconfig的两种常用方式最新推荐

    这篇文章主要介绍了k8s解析kubeconfig的两种常用方式最新推荐,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-11-11
  • Kubekey安装Kubernetes-1.24.8的详细过程

    Kubekey安装Kubernetes-1.24.8的详细过程

    这篇文章主要介绍了Kubekey安装Kubernetes-1.24.8的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • k8s查看pod日志的几种实用方法汇总

    k8s查看pod日志的几种实用方法汇总

    Pod是Kubernetes中能够创建和部署的最小单元,是Kubernetes集群中的一个应用实例,总是部署在同一个节点Node上,下面这篇文章主要给大家介绍了k8s查看pod日志的几种实用方法,需要的朋友可以参考下
    2022-07-07
  • KVM虚拟化技术之virt-manager使用及KVM虚拟化平台网络模型介绍

    KVM虚拟化技术之virt-manager使用及KVM虚拟化平台网络模型介绍

    这篇文章主要介绍了KVM虚拟化技术之virt-manager使用及KVM虚拟化平台网络模型介绍,需要的朋友可以参考下
    2016-10-10
  • 不同k8s集群间服务如何相互访问实现详解

    不同k8s集群间服务如何相互访问实现详解

    这篇文章主要为大家介绍了不同k8s集群间服务如何相互访问实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04

最新评论