K8s Auth   

Auth

在kubernetes中,认证与授权是两个不同的过程。可以这么理解,认证是API请求层的过滤器,授权是资源访问的拦路虎。这两个过程是非关联的,你可以放任所有的API请求通过,也可以禁止访问任何资源,二者并不冲突。通俗的讲,认证就是验证用户名密码,授权就是检查该用户是否拥有权限访问请求的资源,仅此而已。

我们知道,kubernetes集群的所有操作基本上都是通过kube-apiserver这个组件进行的,它提供HTTP RESTful形式的API供集群内外客户端调用。需要注意的是:认证授权过程只存在HTTPS形式的API中。也就是说,如果客户端使用HTTP连接到kube-apiserver,那么是不会进行认证授权的。所以说,可以这么设置,在集群内部组件间通信使用HTTP,集群外部就使用HTTPS,这样既增加了安全性,也不至于太复杂。

kubernetes提供了很多认证方法和授权策略,这里我们只能简单的介绍所有的方法策略的内容和使用场景,大家需要根据自己特定的业务需求自由选择合适的方法策略。

1. 认证

kubernetes1.6版本现在支持以下这些认证方法:

以上就是kubernetes提供的认证方法,可以配合使用,使API请求更加安全。

2.授权

授权主要是用于对集群资源的访问控制,通过检查请求包含的相关属性值,与相对应的访问策略相比较,API请求必须满足某些策略才能被处理。现在集群支持的授权策略有:

注:虽然可以同时提供多个授权策略,但结果是合并的。

3.总结

在生产环境中推荐使用客户端证书加Bootstrap Tokens方式进行认证处理,Service Account Token是特殊的一类,如果想在pod里访问apiserver,则必须使用。而对于授权,RBAC是最好的选择,当然可以选择使用AlwaysAllow禁用授权控制。

cd /etc/kubernetes/pki
sudo openssl genrsa -out client.key 2048
sudo openssl req -new -key client.key -subj "/CN=192.168.1.10" -out client.csr
sudo openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 3650
openssl x509 -noout -text -in client.crt 
curl https://192.168.1.10:6443/api --cacert ca.crt --key client.key --cert client.crt 

Ref

https://kubernetes.io/docs/admin/authentication/

http://www.jianshu.com/p/97a3e7060f4c