一.kubernetes的安全框架
- 管理kubernetes的有kubectl、api、UI界面
- 如下是k8s的安全框架图
安全认证流程:kubectl请求api资源,然后通过三层安全机制。
第一层是认证(Authentication),验证身份、用户名和密码或者token;
第二层是授权(Authorization)角色绑定(RBAC),以获得权限;
第三层是准入控制(Admission Control,资源使用限定)。
请求只有通过这三层安全机制,才会被k8s响应请求,创建资源。
-
k8s的安全控制框架主要由以上3个阶段进行控制,每一个阶段都支持插件方式,通过APIServer配置来启用插件方式,通过APiserver配置来启用插件。
-
普通用户想要安全的访问集群APIServer,往往需要证书、token或者是用户名+密码
-
pod访问需要ServiceAccount
[root@master ~]# kubectl get serviceaccount
NAME SECRETS AGE
default 1 26d
[root@master ~]#
-
apiserver内部使用8080端口,默认8080端口监听本地,通过master以及其他组件连接使用
[root@master ~]# netstat -natp | grep LISTEN | grep 8080
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 37947/kube-apiserve
-
apiserver外部使用6443端口
[root@master ~]# netstat -natp | grep LISTEN | grep 6443
tcp 0 0 192.168.43.101:6443 0.0.0.0:* LISTEN 37947/kube-apiserve
[root@master ~]#
二.Authentication,认证
- 认证有三种客户端身份认证
HTTPS证书认证,基于CA证书签名的数字证书认证
- CA认证如下
cat > server-csr.json <<EOF
{
"CN": "kubernetes",
"hosts": [
"10.0.0.1",
"127.0.0.1",
"192.168.43.101",
"192.168.43.104",
"192.168.43.100",
"192.168.43.105",
"192.168.43.106",
"kubernetes",
"kubernetes.default",
"kubernetes.default.svc",
"kubernetes.default.svc.cluster",
"kubernetes.default.svc.cluster.local"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing",
"O": "k8s",
"OU": "System"
}
]
}
EOF
HTTP Token认证,通过一个Token来识别用户(生产环境中使用广泛)
- httpd的令牌认证如下
[root@master ~]# cat /opt/kubernetes/cfg/token.csv
978741334e39eb21d1c13050d6e8bb79,kubelet-bootstrap,10001,"system:kubelet-bootstrap"
[root@master ~]#