K8S的安全机制简单的说是由认证,授权,准入控制三个组成。
- 认证:Kubernetes使用身份认证插件对API请求进行身份认证时支持的认证方式包括客户端认证、承载令牌认证(bearer tokens)、身份验证代理(authingenticating proxy)及http base认证等。API Server同时支持多种认证机制,但至少分别为Service Accoun和User Account各自启用一个认证插件。
- 授权:身份认证后具体的操作请求还需要转交给授权插件进行许可权限检查。API server主要支持使用四类内建的授权插件来定义用户的操作权限。
- 准入控制:准入控制器用于在客户端请求经过身份验证和授权检查之后但在对象持久化存储etcd之前拦截请求,用于实现在资源的创建、更新和删除操作期间强制执行对象的语义验证等功能。
serviceaccount:
serviceaccount是身份认证的一种,Service account是为了方便Pod里面的进程调用Kubernetes API或其他外部服务而设计的。
serviceaccount还可以存放私有镜像仓库的账号密码:
先创建secret存放账号和密码:
kubectl crate secret docker-registry docker-u-p --docker-server=仓库地址 --docker-username=wl --docker-password='123asd'
创建serviceaccount:
apiVersion: v1
kind: Serviceaccount
metadata:
name: tmpsa
namespace: default
imagePullsecret: docker-u-p
创建Pod并使用我们创建的serviceaccount:
apiVersion: v1
kind: Pod
metadata:
name: www
namespace: default
spec:
containers:
- name: nginx
image: nginx
ports:
- name: http
containerPort: 80
serviceccountName: tmpsa
useraccount:
创建key,csr,crt:
openssl genrsa -out wl.key 2048
chmod 600 wl.key
openssl req -new -key wl.key -out key.csr -subj "/CN=wl"
openssl x509 -req -in wl.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out wl.crt -days 366
添加用户和集群
kubectl config set-credentials wl --client-certificate= wl.crt --client-key= wl.key --embed-certs=true
#创建wl用户,指定证书和秘钥,--embed-certs=true隐藏crt信息
kubectl config set-context k8s@wl --cluster=k8s --user=wl
#创建上下文(集群参数和用户参数可以同时设置多对,在上下文参数中将集群参数和用户参数关联起来。上面的上下文名称为kubenetes,集群为k8s,用户为wl)
kubectl config use-context k8s@wl
#指定现在的上下文
kubectl config set-cluster tmpk8s --kubeconfig=/tmp/tmp.conf --server="https://192.168.1.1:6443" --certificate-authority=ca.crt --embed-certs=true
#创建集群。--kubeconfig:指定配置文件;--certificate-authority:指定ca.crt。