文章目录
前言
一:k8s安全机制
安全框架、
传输安全、认证,授权,准入控制
使用rbac授权
1.1:kubernetes安全框架
- 安全框架的流程
流程:kubectl先请求api资源,然后是过三关,第一关是认证(Authentication),第二关是授权(Authorization),第三关是准入控制(Admission Control),只有通过这三关才可能会被k8s创建资源。
K8S安全控制框架主要由下面3个阶段进行控制,每一个阶段都支持插件方式,通过API Server配置来启用插件。
普通用户若要安全访问集群API Server,往往需要证书、Token或者用户名+密码;Pod访问,需要ServiceAccount
-
apiserver使用的是token认证
[root@master ~]# ps aux |grep apiserver root 12636 3.0 23.6 420460 235620 ? Ssl 5月17 156:09 /opt/kubernetes/bin/kube-apiserver --logtostderr=true --v=4 --etcd-servers=https://192.168.233.131:2379,https://192.168.233.132:2379,https://192.168.233.133:2379 --bind-address=192.168.233.131 --secure-port=6443 --advertise-address=192.168.233.131 --allow-privileged=true --service-cluster-ip-range=10.0.0.0/24 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestriction --authorization-mode=RBAC,Node --kubelet-https=true --enable-bootstrap-token-auth --token-auth-file=/opt/kubernetes/cfg/token.csv --service-node-port-range=30000-50000 --tls-cert-file=/opt/kubernetes/ssl/server.pem --tls-private-key-file=/opt/kubernetes/ssl/server-key.pem --client-ca-file=/opt/kubernetes/ssl/ca.pem --service-account-key-file=/opt/kubernetes/ssl/ca-key.pem --etcd-cafile=/opt/etcd/ssl/ca.pem --etcd-certfile=/opt/etcd/ssl/server.pem --etcd-keyfile=/opt/etcd/ssl/server-key.pem root 22849 0.0 0.0 112728 976 pts/0 S+ 10:20 0:00 grep --color=auto apiserver '//其中能够查询到token认证等信息'
-
查看ServiceAccount,可以通过ServiceAccount在pod中去访问apiserver
[root@master ~]# kubectl get sa NAME SECRETS AGE default 1 21d '//Service Account它并不是给kubernetes集群的用户使用的,而是给pod里面的进程使用的,它为pod提供必要的身份认证。'
-
传输安全方面:8080用于内部通讯,6443是提供给外部访问的端口
[root@master ~]# netstat -ntap |grep 8080 |grep LISTEN '//默认8080监听本地(是通过master及其他组件连接使用)' tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 12636/kube-apiserve [root@master ~]# netstat -ntap |grep 6443 |grep LISTEN '//对外提供服务端口是6443' tcp 0 0 192.168.233.131:6443 0.0.0.0:* LISTEN 12636/kube-apiserve
1.2:第一关:Authentication认证
三种客户端身份认证:
1、HTTPS 证书认证:基于CA证书签名的数字证书认证
2、HTTP Token认证:通过一个Token来识别用户(生产环境中使用广泛)
3、HTTP Base认证:用户名+密码的方式认证
-
1、HTTPS证书认证
[root@master ~]# cat k8s/k8s-cert/k8s-cert.sh cat > ca-config.json <<EOF { "signing": { "default": { "expiry": "87600h" }, "profiles": { "kubernetes": { "expiry": "87600h", "usages": [ "signing", "key encipherment", "server auth", "client auth" ] } } } } EOF cat > ca-csr.json <<EOF { "CN": "kubernetes", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "L": "Beijing", "ST": "Beijing",