Kubernetes相关安全控制方式
- 认证(身份识别:认证令牌Token-域共享密钥、SSO-HTTPs等)
- 授权(权限检查:RBAC-默认拒绝的许可授权机制、Webhook等插件)
- 准入控制(Admission Controller,关联资源的级联操作权限控制)
kubectl客户端访问API-Server需要提供的信息
- user-username、uid;
- group
- extra
API Request Path(HTTP-URL):http://Node_IP or Domain_Name:Node_Port+Resource_Metadata_selfLink
这里的selfLink或者object URL格式为:/apis///namespace/<NAMESPACE_NAME>//[OBJECT_ID]
Respond:JSON格式结果文件;(Kubernetes里面,会自动将yaml格式文件转为JSON格式文件;)
注:这里仅针对HTTP协议相关服务,RPC、ProtoBuf或其他协议需要另外考虑;
HTT Request Verb:get, post, put, delete……
API Request Verb:get, list, create, update, patch, watch, delete, proxy, redirect, delete, deletecollection……
Resource
Subresource
Namespace
API group
两类访问API Server的客户端:
- useraccount(Just for human)
- serviceaccount(Just for workload),每个Pod都需要访问api-server,只是权限大小的问题,可以提供Image pull secrets和Token等信息;
kubectl config view查看当前配置信息;
其中context显示信息有:
- cluster
- user
- name,一般为:user@cluster
注意:证书持有者的名称,就是用户账号名;
Kubernetes安全认证详细操作步骤
(1)创建一个私钥的命令:(umask 077; openssl genrsa -out davidwatt.key 2048)
(2)基于这个私钥,生成一个证书签署请求命令:openssl req -new -key davidwatt.key -out davidwatt.csr -subj “/CN=davidwatt”
(3)由ca.crt来签署命令:openssl x509 -req -in davidwatt.csr -CA ./ca.crt -CAkey ./ca.key -CAcreateserial -out davidwatt.crt -days 365
(4)查看证书内容命令:openssl x509 -in davidwatt.crt -text -noout
使用kubectl config view可以查看kubeconfig文件的内容;
(因为需要提前定义集群、用户和上下文,注意这里的集群已经有了;)
(5)新建一个用户user的命令:kubectl config set-credentials davidwatt –client-certificate=./davidwatt.crt –client-key=./davidwatt.key -embed-certs=true
(6)新建一个上下文的命令:kubectl config set-context davidwatt@kubernetes –cluster=kubernetes –user=davidwatt
(7)切换上下文的命令:kubectl config use-context davidwatt@kubernetes
补充:如果需要新建cluster,命令为:kubectl config set-cluster mycluster –kubeconfig=/tmp/test.conf –server=“http://127.0.0.11:6443” –certificate-authority=/etc/kubernetes/pki/ca.crt –embed-certs=true