首页 > 其他分享 >k8s认证、授权与准入控制

k8s认证、授权与准入控制

时间:2023-05-10 17:37:09浏览次数:40  
标签:file Kubernetes -- 认证 apiserver 准入 etcd k8s

Kubernetes API Server 是 Kubernetes 集群的控制中心,提供了 Kubernetes API 的访问入口。为了保证 Kubernetes 集群的安全性,Kubernetes 提供了许多 API Server 访问控制机制,如下所示:

  1. 认证(Authentication):API Server 可以支持多种身份认证方式,如证书、静态令牌、动态令牌(Token)和基本认证等。使用 TLS 证书认证是最安全的身份认证方式。

  2. 授权(Authorization):Kubernetes 集群中所有的资源都有自己的 API 对象,如 Pod、Service、ReplicationController 等,而这些对象都有读写操作权限。因此,API Server 还需要检查请求的用户是否有足够的授权,才会处理请求。

  3. 准入控制(Admission Control):准入控制机制是 Kubernetes API Server 中一个非常强大的功能,它允许对进入 Kubernetes 集群的请求做出控制。API Server 会在对象(如 Pod、Node、Service 等)被保存到 etcd 数据库之前,对该对象进行检查和修改。准入控制可用于实施强制性的数据验证、安全功能、自动化操作等功能。

  4. 访问控制列表(Access Control List, ACL):ACL 可以通过配置文件中的用户和角色绑定来限制用户的访问权限。通过定义 Role 和 ClusterRole,以及 RoleBinding 和 ClusterRoleBinding 对象,可以实现对 Kubernetes 集群中不同用户的访问控制。

kube-apiserver启动配置样例如下:

    - kube-apiserver
    - --advertise-address=192.168.1.10
    - --bind-address=0.0.0.0
    - --insecure-bind-address=127.0.0.1
    - --secure-port=6443
    - --insecure-port=0
    - --authorization-mode=Node,RBAC
    - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
    - --enable-admission-plugins=NodeRestriction,ServiceAccount
    - --service-cluster-ip-range=10.96.0.0/12
    - --service-node-port-range=30000-32767
    - --tls-cert-file=/etc/kubernetes/pki/apiserver.crt
    - --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
    - --client-ca-file=/etc/kubernetes/pki/ca.crt
    - --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
    - --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt
    - --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key
    - --etcd-servers=https://192.168.1.10:2379,https://192.168.1.11:2379,https://192.168.1.12:2379
    - --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
    - --v=2
    - --runtime-config=api/all=true

其中访问控制配置:

  • --authorization-mode 参数用于设置 kube-apiserver 使用的授权模式,这里设置了 Node 和 RBAC;
  • --kubelet-preferred-address-types 参数用于设置 kubelet 愿意接收的节点地址类型,默认为 InternalIP,这里还设置了 ExternalIP 和 Hostname;
  • --enable-admission-plugins 参数用于启用或禁用准入控制插件,这里启用了 NodeRestriction 和 ServiceAccount;
  • --tls-cert-file 和 --tls-private-key-file 参数用于设置 kube-apiserver 的证书和私钥文件的路径;
  • --client-ca-file 参数用于设置 kube-apiserver 授权客户端证书的 CA 文件的路径;
  • --etcd-cafile--etcd-certfile 和 --etcd-keyfile 参数用于设置连接 etcd 的证书、私钥和 CA 文件;
  • --tls-cipher-suites 参数用于设置 TLS 协议支持的加密算法;

在Kubernetes中,可以配置多种认证、授权、接入插件,认证和授权只要一个启动的插件鉴权成功及可成功,而接入控制必须通过所有插件检查。

认证方式

在该 kube-apiserver 的主配置文件中,我们可以看到 Kubernetes 包含了这几种身份验证的配置:

  1. 证书认证:--client-ca-file 参数和 --tls-cert-file--tls-private-key-file 参数用于设置证书的位置和 kube-apiserver 的加密方式;
  2. 静态令牌认证:kubeconfig 文件中使用 token 字段指定令牌,并使用 tokenFile 字段指定存储令牌文件的位置;
  3. 动态令牌认证:使用 --authentication-token-webhook-config-file 参数指定使用 webhook 进行动态令牌身份验证,并在 webhook 配置文件中配置认证流程;
  4. 基本认证:使用 --basic-auth-file 参数指定用户列表文件的位置。

 

标签:file,Kubernetes,--,认证,apiserver,准入,etcd,k8s
From: https://www.cnblogs.com/bad-joker/p/17388605.html

相关文章

  • k8s 部署 elasticsearch 单节点
    es.yaml#pv和pvcapiVersion:v1kind:PersistentVolumemetadata:name:es-pvspec:capacity:storage:5GiaccessModes:-ReadWriteManypersistentVolumeReclaimPolicy:RetainstorageClassName:es-hosthostPath:path:/data/es-data---......
  • 开发手记-小程序请求被Spring Security权限认证拦截
    场景描述这是一个微信小程序向后端发送的请求,并且请求路径被后端SpringSecurity权限认证监控这里SpringSecurity只负责权限不负责登录认证问题因为微信小程序本身不支持cookie机制,但是即使手动为请求带上了登录凭证字段ticket,请求依旧返回'用户未登录',接口功能不能调用排......
  • SpringSecurity实战(二)-基于数据库认证
    pom依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId&......
  • 喜讯丨计讯物联再获ISO三体系认证,卓越品质赢官方认可
    品质是企业立足的根本,也是企业高质量发展的核心竞争力。2023年以来,计讯物联的合同订单量持续攀升,公司发展前景一片大好,在业内形成了良好的口碑和较强的竞争优势。在此背景下,计讯物联依旧坚持品质导向,充分利用自身技术优势与行业资源,不断提升产品品质,力求为广大客户提供更为可靠安......
  • k8s service资源
    在Kubernetes中,Service资源是一种抽象的逻辑概念,它定义了一组Pod的访问方式,为Pod提供稳定的DNS名称和IP地址,通过代理(Proxy)的方式向应用程序终端用户提供可靠的访问。Service资源对象提供了以下功能:为一组具有相同功能但可能在不同Pod或节点中的Pod提供一个稳定的虚拟IP地址和DN......
  • Kubernetes概述 (一篇教你认识k8s)
    一、Kubernetes概述 1.k8s是什么K8S的全称为Kubernetes(K12345678S),PS:“嘛,写全称也太累了吧,不如整个缩写”。作用:用于自动部署、扩展和管理“容器化(containerized)应用程序"的开源系统。可以理解成K8S是负责自动化运维管理多个容器化程序(比如Docker)的集群,是一......
  • 下篇:使用jenkins发布go项目到k8s,接上篇的手工体验改造为自动化发布
    写在开篇关于上篇本篇在 《上篇:带你手工体验从写代码、编译、打包镜像、部署到K8S的全过程》 的基础上,将手动的过程通过jenkins工具将其改造成自动化。环境准备我的环境说明:组件安装方式访问IP访问端口jenkinsdocker192.168.11.2548086gitlabdocker192......
  • k8s教程
    1minikube安装minikube官网:https://minikube.sigs.k8s.io/docs/start/我们在centos系统下安装首先我们需要安装docker,这里略下载rpm包curl-LOhttps://storage.googleapis.com/minikube/releases/latest/minikube-latest.x86_64.rpm安装rpm-Uvhminikube-latest.x86_......
  • 假期充电,用阿里云 Serverless K8s + AIGC 搭建私人代码助理
    作者:子白、冬岛AI技术正在引领科技创新浪潮,随着ChatGPT和Midjourney的走红,AIGC技术正在世界范围内掀起一股AI技术浪潮。开源领域也涌现了许多类似模型,如FastGPT、Moss、StableDiffusion等。这些模型展现出的惊人效果吸引企业和开发者们投身其中,但是复杂繁琐的部署方式......
  • 微信公众号认证
    官网文档https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.htmlphp示例代码 publicfunctionindex(){$signature=$_GET["signature"]; $timestamp=$_GET["timestamp"]; $nonce=$_GET[&qu......