kubernetes-安全管理
权限管控,,,其实就是AAA,3A,认证,授权,审计
集群节点外机器如何管理k8s集群??
1,kubeconfig 认证,密钥,私钥
2,htpasswd 认证,用户和密码 新版本好像是token了。
集群外机起管理k8s 集群
实验下,5.140这台机器管理k8s集群
前置:其他机器需安装同版本的kubectl 命令行管理工具
1,5.140 机器安装kubectl
[root@mysql-master01 ~]# yum --showduplicates list kubectl |expand
[root@mysql-master01 ~]# yum install kubectl-1.23.8
2,master01 拷贝admin配置文件至5.140家目录的 .kube/config
[root@master01 kubernetes]# scp -r /etc/kubernetes/admin.conf root@192.168.5.140:~/.kube/config
root@192.168.5.140's password:
admin.conf 100% 5641 168.0KB/s 00:00
[root@master01 kubernetes]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master01 Ready control-plane,master 39d v1.23.8
node01 Ready woker 39d v1.23.8
node02 Ready woker 39d v1.23.8
3,5.140 验证结果:
[root@mysql-master01 .kube]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master01 Ready control-plane,master 39d v1.23.8
node01 Ready woker 39d v1.23.8
node02 Ready woker 39d v1.23.8
有这个admin.conf ,即为集群的最高权限 ,里面存放的集群api 地址,定义一个集群用户,用户证书,用户私钥
额,想一下呢? 这个文件怎么来的? 里面写了啥?
自定义用户获得k8s 集群管理员权限
创建一个自定义的用户emporer。并生成config 文件。默认只有登录权限。无管理权限
生成私钥和证书
pki 数字证书,k8s 集群内部也都是走得这一套认证体系,在/etc/kubernetes/pki下就有很多证书文件。
前置条件:
1),k8s集群CA证书 ,ca.crt
2),用户的私钥 emporer.key
3),用户的证书 emporer.crt
1,新建一个用户目录用于存放
[root@master01 ~]# mkdir emporer
2,拷贝ca证书,ca私钥,
[root@master01 emporer]# cp /etc/kubernetes/pki/ca.crt ./
[root@master01 emporer]# cp /etc/kubernetes/pki/ca.key ./
3,生产用户私钥
[root@master01 emporer]# openssl genrsa -out emporer.key 2048
Generating RSA private key, 2048 bit long modulus
.................................................................................................................+++
................+++
e is 65537 (0x10001)
4,利用用户私钥生成证书请求文件,,注意 **这里的CN 为用户名**
[root@master01 emporer]# openssl req -new -key emporer.key -subj "/CN=emporer" -out emporer.csr
5,利用用户私钥生成的证书请求文件,用ca证书和ca私钥签证书
[root@master01 emporer]# openssl x509 -req -in emporer.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out emporer.crt -days 365
利用模板填充config 文件
下载模板文件
kubernetes.iohttps://kubernetes.io/zh-cn/docs/concepts/configuration/organize-cluster-access-kubeconfig/
填充ca 证书 和api地址
[root@master01 emporer]# cat democonf
apiVersion: v1
kind: Config
clusters:
- cluster:
name: cluster1
users:
- name: emporer
contexts:
- context:
name: emporer-context
对应填充,ca证书,这里名字无所谓,只要是对应的就行
[root@master01 emporer]# kubectl config --kubeconfig=democonf set-cluster cluster1 --server=https://192.168.5.170:6443 --certificate-authority=ca.crt --embed-certs=true
Cluster "cluster1" set.
对应填充用户证书和私钥
[root@master01 emporer]# kubectl config --kubeconfig=democonf set-credentials emporer --client-certificate=emporer.crt --client-key=emporer.key --embed-certs=true
User "emporer" set.
填充用户默认登录是的namespace:
[root@master01 emporer]# kubectl config --kubeconfig=democonf set-context emporer-context --cluster=cluster1 --namespace=project --user=emporer
[root@master01 emporer]# kubectl config --kubeconfig=democonf view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://192.168.5.170:6443
name: cluster1
contexts:
- context:
cluster: cluster1
namespace: project
user: emporer
name: emporer-context
current-context: "" ##这里没有引用上面定义的emporer-context ,手动vim抄下来 .不过我看官网的配置多集群访问。并没有写。不写访问不了
#current-context: "emporer-context"
kind: Config
preferences: {}
users:
- name: emporer
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
绑定角色权限: cluster-admin 集群角色。还有view 查看等,可自定义role.后面再写。
[root@master01 emporer]# kubectl create clusterrolebinding --clusterrole=cluster-admin --user=emporer emporer-cluster-role
验证:
[root@master01 emporer]# scp democonf 192.168.5.140:~/.kube/config
root@192.168.5.140's password:
democonf
[root@mysql-master01 .kube]# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* emporer-context cluster1 emporer project
[root@mysql-master01 .kube]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master01 Ready control-plane,master 40d v1.23.8
node01 Ready woker 40d v1.23.8
node02 Ready woker 40d v1.23.8
[root@mysql-master01 .kube]# kubectl get pods
NAME READY STATUS RESTARTS AGE
bz1 1/1 Running 4 (23h ago) 14d
web-test-5f58c7c548-p782r 1/1 Running 7 (23h ago) 14d
kubernetes.io
https://kubernetes.io/zh-cn/docs/concepts/configuration/organize-cluster-access-kubeconfig/
总结下吧:
多集群配置时,也是利用模本一一填充ca证书,ca私钥,,用户证书,用户私钥,集群信息。role 权限分配.和用户权限更加颗粒度分配。安全控制访问。cn为用户名,而不是我们做https 时采用域名了。。