Kubernetes API Server 是 Kubernetes 集群的控制中心,提供了 Kubernetes API 的访问入口。为了保证 Kubernetes 集群的安全性,Kubernetes 提供了许多 API Server 访问控制机制,如下所示:
-
认证(Authentication):API Server 可以支持多种身份认证方式,如证书、静态令牌、动态令牌(Token)和基本认证等。使用 TLS 证书认证是最安全的身份认证方式。
-
授权(Authorization):Kubernetes 集群中所有的资源都有自己的 API 对象,如 Pod、Service、ReplicationController 等,而这些对象都有读写操作权限。因此,API Server 还需要检查请求的用户是否有足够的授权,才会处理请求。
-
准入控制(Admission Control):准入控制机制是 Kubernetes API Server 中一个非常强大的功能,它允许对进入 Kubernetes 集群的请求做出控制。API Server 会在对象(如 Pod、Node、Service 等)被保存到 etcd 数据库之前,对该对象进行检查和修改。准入控制可用于实施强制性的数据验证、安全功能、自动化操作等功能。
-
访问控制列表(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 包含了这几种身份验证的配置:
- 证书认证:
--client-ca-file
参数和--tls-cert-file
,--tls-private-key-file
参数用于设置证书的位置和 kube-apiserver 的加密方式; - 静态令牌认证:kubeconfig 文件中使用
token
字段指定令牌,并使用tokenFile
字段指定存储令牌文件的位置; - 动态令牌认证:使用
--authentication-token-webhook-config-file
参数指定使用 webhook 进行动态令牌身份验证,并在 webhook 配置文件中配置认证流程; - 基本认证:使用
--basic-auth-file
参数指定用户列表文件的位置。
标签:file,Kubernetes,--,认证,apiserver,准入,etcd,k8s From: https://www.cnblogs.com/bad-joker/p/17388605.html