前言:
Kubernetes作为分布式的集群管理工具,API Server是集群内部各个组件通信的中介,也是外部控制的入口。需要进行安全机制的设置。Kubernetes使用了认证(Authenrtication)、鉴权(Authorization)、准入控制(Admission Control)三步来保证API Server的安全
一、认证:
两种类型:
1、 Kubernetes组件对API Server的访问:kubectl、Controller Manager、Scheduler、Kubelet、Kube-proxy
2、Kubernetes管理的Pod对容器的访问:Pod(dashboard也是以pod形式运行)
安全性说明:
· Controller Manager、scheduler与API Server在同一机器,所以直接使用API Server的非安全端口访问,--insecure-bind-address=127.0.0.1
· kubectl、kubelet、kube-proxy访问API Server都需要证书进行HTTPS双向认证
证书颁发
- 手动签发:通过k8s集群的跟ca进行签发HTTPS证书
- 自动签发:kubelet首次访问API Server时,使用token做认证,通过后,Controller Manager会为kubelet生成一个证书,以后的访问都是使用证书做认证
3、kubeconfig
kubeconfig文件包含集群参数(CA证书,API Server地址),客户端参数(上面生成的证书和私钥),集群conetxt信息(集群名称、用户名)。kubernetes组件通过启动时指定不同的kubeconfig文件可以切换到不同的集群
kubeconfig文件详解:
1、client-key-data:客户端私钥
2、client-certificate-data:证书
3、kubernetes-admin:当前用户名
4、current-context: 设置kubelet执行当前上下文,当前集群
5、server:server服务器的地址信息
6、contexts: 设置kubelet执行上下文
认证流程图:
二:Kubectl config命令
Kubeconfig文件可以手动进行编辑,也可以通过kubectl config命令进行查询和设置。
1、kubectl config view:查看Kubeconfig文件
2、kubectl config set-cluster: 设置kubeconfig的clusters
kubectl config set-cluster kubernetes \ --certificate-authority=/etc/kubernetes/ssl/ca.pem \ --embed-certs=true \ --server=${KUBE_APISERVER}
3、kubectl config set-credentials : 设置kubeconfig的users
kubectl config set-credentials admin \ --client-certificate=/etc/kubernetes/ssl/admin.pem \ --embed-certs=true \ --client-key=/etc/kubernetes/ssl/admin-key.pem
4、kubectl config set-context: 设置Kubeconfig的contexts
kubectl config set-context kubernetes \ --cluster=kubernetes \ --user=admin
5、kubectl config use-context: 设置Kubeconfig的current-context
kubectl config use-context kubernetes