rbac——安全机制

rbac——安全机制

赋权机制

集群是按照用户名进行登录,按照项目名称进行命名空间的分类。

配电云主站

资源空间

pod数量

k8s的安全机制:

api server ————>集群内部和外部的通信都需要靠api server进行调度,所有的安全机制都是围绕api server展开的。

api server进行通信:

1、认证 Authentication token

2、鉴权 Authorzation 你在集群当中权限的控制

3、准入控制 admission control 能做哪些,在哪里做哪些

认证:

token:http token 是一个很长的特殊编码方式的而且是难以被模仿的特殊字符串,来表达客户端的一种方式。

每一个token都会对应一个用户,存储在api server能够访问的文件中。客户端发起对api server的请求时,在http header当中必须加入token。

http base 认证: 用户名+密码进行认证

https证书认证: 基于ca证书签名的客户端身份认证方式。(最严格的方式)

http token和http base都是服务端对客户端的单向认证,https是双向认证的方式。

认证的资源类型:

kubectl kubelet kube-proxy

kubectl对pod进行管理也需要认证

service Account:是为了方便访问pod中的容器,以及容器访问api server专门创建的。

server Account————>每创建一个pod就会自动创建。

1、token 和api server认证的私钥

2、ca.crt 认证api server的证书

3、namespace server account的命名空间。

[root@master01 opt]# kubectl exec -it nginx1-bd76c7b4-jp445 bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@nginx1-bd76c7b4-jp445:/# cd /var/run/secrets/kubernetes.io/serviceaccount/
root@nginx1-bd76c7b4-jp445:/var/run/secrets/kubernetes.io/serviceaccount# ls
ca.crt  namespace  token  ##每个pod都有

鉴权:

认证过后,就到了鉴权。

确定请求方有哪些资源的权限

1.20版本,鉴权统一使用RBAC进行。

角色:

Role:指定命名空间的资源控制权限

ClusterRole:指定所有的命名空间的资源控制权限

角色绑定:

Rolebinding:将角色绑定到主体 用户————subject

clusterRolebinding:将集群角色绑定到主体

主体:

user:用户

service account:服务账号(集群的服务账号)

group:用户组

#rules.verbs有:"get", "list", "watch", "create", "update", "patch", "delete", "exec"
​
#rules.resources有:"services", "endpoints", "pods", "secrets", "configmaps", "crontabs", "deployments", "jobs", "nodes", "rolebindings", "clusterroles", "daemonsets", "replicasets", "statefulsets", "horizontalpodautoscalers", "replicationcontrollers", "cronjobs"

[root@master01 opt]# mkdir rbac
[root@master01 opt]# cd rbac/
[root@master01 rbac]# ls
[root@master01 rbac]# vim rbac.yaml
​
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
kind: Role
metadata:
  name: test1
#创建的角色名称
  namespace: default
#这个是必须要有的字段,只能有一个命名空间
rules:
#定义规则
- apiGroups: [""]
#rbac.authorization.k8s.io/v1,默认就是对apiserver的请求权限
  resources: ["pods","services"]
#给主体也就是用户,可以在指定的命名空间内对哪些资源对象进行>操作。
  verbs: ["get","watch","list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: test2
#创建的角色名称
  namespace: default
#这个是必须要有的字段,只能有一个命名空间
subjects:
- kind: User
  name: xy102
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: test1
  apiGroup: rbac.authorization.k8s.io
  
[root@master01 rbac]# useradd xy102
​

准入机制:

[root@master01 rbac]# useradd lucky
[root@master01 rbac]# passwd lucky 
[root@master01 rbac]# cd /usr/local/bin/
[root@master01 bin]# rz -E
rz waiting to receive.
[root@master01 bin]# ls
cfssl  cfssl-certinfo  cfssljson  helm
[root@master01 bin]# chmod 777 cfssl*
#apiserver和用户之间连接的认证证书
​
#客户端的证书签名
cat > lucky-csr.json <<EOF
{
  "CN": "lucky",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "k8s",
      "OU": "System"
    }
  ]
}
EOF
​
[root@master01 rbac]# cd /etc/kubernetes/pki/
apiserver.crt                 etcd
apiserver-etcd-client.crt     front-proxy-ca.crt
apiserver-etcd-client.key     front-proxy-ca.key
apiserver.key                 front-proxy-ca.srl
apiserver-kubelet-client.crt  front-proxy-client.crt
apiserver-kubelet-client.key  front-proxy-client.key
ca.crt                        sa.key
ca.key                        sa.pub
ca.srl
​
#客户端的签名证书
[root@master01 pki]# cfssl gencert -ca=ca.crt -ca-key=ca.key -profile=kubernetes /opt/rbac/lucky-csr.json | cfssljson -bare lucky
[root@master01 pki]# ls
apiserver.crt                 front-proxy-ca.crt
apiserver-etcd-client.crt     front-proxy-ca.key
apiserver-etcd-client.key     front-proxy-ca.srl
apiserver.key                 front-proxy-client.crt
apiserver-kubelet-client.crt  front-proxy-client.key
apiserver-kubelet-client.key  lucky.csr
ca.crt                        lucky-key.pem
ca.key                        lucky.pem
ca.srl                        sa.key
etcd                          sa.pub
​
[root@master01 rbac]# vim rbac-config.sh
APISERVER=$1
# 设置集群参数
export KUBE_APISERVER="https://$APISERVER:6443"
kubectl config set-cluster kubernetes \
  --certificate-authority=/etc/kubernetes/pki/ca.crt \
  --embed-certs=true \
  --server=${KUBE_APISERVER} \
  --kubeconfig=lucky.kubeconfig
​
# 设置客户端认证参数
kubectl config set-credentials lucky \
  --client-key=/etc/kubernetes/pki/lucky-key.pem \
  --client-certificate=/etc/kubernetes/pki/lucky.pem \
  --embed-certs=true \
  --kubeconfig=lucky.kubeconfig
​
# 设置上下文参数
kubectl config set-context kubernetes \
  --cluster=kubernetes \
  --user=lucky \
  --namespace=lucky-cloud \
  --kubeconfig=lucky.kubeconfig
​
[root@master01 rbac]# chmod 777 rbac-config.sh 
[root@master01 rbac]# ./rbac-config.sh 192.168.60.110
[root@master01 rbac]# kubectl config use-context kubernetes --kubeconfig=lucky.kubeconfig
[root@master01 rbac]# mkdir /home/lucky/.kube
[root@master01 rbac]# cp lucky.kubeconfig /home/lucky/.kube/config
[root@master01 rbac]# chown -R lucky:lucky /home/lucky/.kube/
​
[root@master01 rbac]# vim rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: test1
#创建的角色名称
  namespace: lucky-cloud
#这个是必须要有的字段,只能有一个命名空间
rules:
#定义规则
- apiGroups: [""]
#rbac.authorization.k8s.io/v1,默认就是对apiserver的请求权限
  resources: ["pods","services","deployments","pods/exec","pods/log"]
#给主体也就是用户,可以在指定的命名空间内对哪些资源对象进行>操作。
  verbs: ["get","watch","list","exec","create"]
kind: Role
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: test2
#创建的角色名称
  namespace: lucky-cloud
#这个是必须要有的字段,只能有一个命名空间
subjects:
- kind: User
  name: lucky
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: test1
  apiGroup: rbac.authorization.k8s.io
​
​
[root@master01 rbac]# kubectl create ns lucky-cloud
[root@master01 rbac]# kubectl apply -f rbac.yaml 
[root@master01 rbac]# kubectl get role,rolebinding -n lucky-cloud 
NAME                                   CREATED AT
role.rbac.authorization.k8s.io/test1   2024-09-13T05:38:13Z
​
NAME                                          ROLE         AGE
rolebinding.rbac.authorization.k8s.io/test2   Role/test1   97s
​
[root@master01 rbac]# kubectl create deployment nginx1 --image=nginx:1.22 --replicas=3 -n lucky-cloud       

如何抓取pod的包

1、describe pod 查询容器的container ID

2、到pod部署的节点,根据container ID获取容器在节点上的进程号

3、根据进程号进入容器的网络命名空间

4、tcpdump -i 网卡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值