需求
需求
1、创建token
需求:
只对以下资源具备查看权限:
service、namespace、pod、node
deployment
workspace、workspacetemplates
ingresses
gateways
这些资源都必须是复数形式(可以通过
kubectl api-resources | grep work
查看对应的组合名称)
创建sa
vim ifcloud-viewer-sa.yaml
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: ifcloud-viewer
namespace: default
- 创建资源
kubectl create -f ifcloud-viewer-sa.yaml
获取sa关联的secret以及token
kubectl get sa ifcloud-viewer -o jsonpath='{.secrets[0].name}'
kubectl get secret $(kubectl get sa ifcloud-viewer -o jsonpath='{.secrets[0].name}') -o yaml
kubectl get secret $(kubectl get sa ifcloud-viewer -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}'
kubectl get secret $(kubectl get sa ifcloud-viewer -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 -d
eyJhbGciOiJSUzI1NiIsImtpZCI6Im4xc2lFSWZFMlBfNFd6U2xPQTZLbVNoQTlSbjhGek43cmZ6MDJTWV9nTm8ifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImlmY2xvdWQtdmlld2VyLXRva2VuLXpkaGQ5Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImlmY2xvdWQtdmlld2VyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZGMyZjM0YWQtZjgzZi00NmFlLWE1YzUtYWE1OTcyNjg5ZWFiIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmRlZmF1bHQ6aWZjbG91ZC12aWV3ZXIifQ.utEnXVK7jHlD0aoM1K2X3h3L0a5rCbMf3h-o-Q2UKkQrN7LLyrF6d1ocK2X64l0SxD-rrzj70J49A9m612BeLEPKE2L-EfvAvGaN2TsVtgEyXNMHX6mb7ui3wiWQ5LDpBR2VaO77mcDMTI9qZOcFxUHo6NVydadoK4MlmVGHc4eZnpElkYmF4qgl55Kaf9xI5511rtfiDXoeQ-hP4vk7TzqtfHchV2MjaHlX8En0Id2p2PV65u3UbLcKGksl5b2_t4od8palxw5_PTVI9zrkncLBUgAVDNT8bTkodLg92izIUj1MuZwWX0Vc7ebqhqWnpTShYc02427o4IoXGrHVqw
这里的token是进行 base64 编码后的结果,一定要将 kubectl 的输出中的 token 值进行 base64 解码应用程序可以通过Token和kubeconfig两种认证方式
创建kubeconfig,提供用户的应用程序使用
设置集群参数
- 设置全局参数
这里的token变量是解码后的真实值
# 查看apiserver
kubectl cluster-info
# 设置变量
KUBE_APISERVER="https://lb.memberkubesphere.local:6443"
SECRET_TOKEN="ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNklqbDVZelF6VjAxeFdtNXBaVXhPZUhGd1JGTkNNV2RuUkVsWVMwaFVOSGN6UjNCdFNFRTNRbk5TU0hjaWZRLmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXVZVzFsYzNCaFkyVWlPaUprWldaaGRXeDBJaXdpYTNWaVpYSnVaWFJsY3k1cGJ5OXpaWEoyYVdObFlXTmpiM1Z1ZEM5elpXTnlaWFF1Ym1GdFpTSTZJbWxtWTJ4dmRXUXRkbWxsZDJWeUxYUnZhMlZ1TFdRMmJHWmpJaXdpYTNWaVpYSnVaWFJsY3k1cGJ5OXpaWEoyYVdObFlXTmpiM1Z1ZEM5elpYSjJhV05sTFdGalkyOTFiblF1Ym1GdFpTSTZJbWxtWTJ4dmRXUXRkbWxsZDJWeUlpd2lhM1ZpWlhKdVpYUmxjeTVwYnk5elpYSjJhV05sWVdOamIzVnVkQzl6WlhKMmFXTmxMV0ZqWTI5MWJuUXVkV2xrSWpvaVptTXhaREpsTXpjdFpqQTBZUzAwWkRnekxUbGhNV1l0WVdJelpUUm1aV0ptWkRZNElpd2ljM1ZpSWpvaWMzbHpkR1Z0T25ObGNuWnBZMlZoWTJOdmRXNTBPbVJsWm1GMWJIUTZhV1pqYkc5MVpDMTJhV1YzWlhJaWZRLlZRM21kc3pLd0N0ay1vd0tsQVpXaU84Q2RpZU5EQnBqQzlTd3UtV2U1T0tMNW5nZ0FTZVhFdF9QTXlmQlJKVGNQV2cyNmdHQURadjR6WnJnOGQ0N0RlWmFrdkpzd3pLT2lpVWFyVkpiYkdhZ1ptd3lRQ3RzdEZyNUllMzlYVnBfM09abV9fXzVfckg0ZWQ3SWhnSG1oTHNRb0E0VlNZZkVKbjdIYVZGNVF5NEd1QlF2RHZLLVFlLUNadlE5YzAzd0NjekU3ajFQS1p5MlR2MW9NZlhiLTA2dU9ET3dHaVJqcmQwZHg2Q25YNVpRYW1fWU9tcGlTMjRqb2wycHBNd0ZNZEpKWV82bmxIUlU0X3RKazhXOUZ0dmtXbngzWnRKUzZTQ0ZsaVFsZ0p6cDdfTThtMndzeXJWanpiY0puWUJKOUtRbnZDbS14UUZnYmk2c0VqdTJYUQ=="
- 设置集群参数
kubectl config set-cluster k8s-ifcloud-viewer \
--certificate-authority=/etc/kubernetes/pki/ca.crt \
--server=${KUBE_APISERVER} \
--embed-certs=true \
--kubeconfig=ifcloud-viewer-poc.kubeconfig
设置客户端认证凭据,指定token
kubectl config set-credentials ifcloud-viewer \
--token=${SECRET_TOKEN} \
--kubeconfig=ifcloud-viewer-poc.kubeconfig
设置上下文参数
kubectl config set-context k8s-ifcloud-viewer \
--cluster=k8s-ifcloud-viewer \
--user=ifcloud-viewer \
--kubeconfig=ifcloud-viewer-poc.kubeconfig
--cluster
对应set-cluster
名称--user
对应set-credentials
名称
切换上下文
kubectl config use-context k8s-ifcloud-viewer --kubeconfig=ifcloud-viewer-poc.kubeconfig
k8s-ifcloud-viewer
对应set-context
名称
测试权限
kubectl get pod -A --kubeconfig=ifcloud-viewer-poc.kubeconfig
kubectl get sts -A --kubeconfig=ifcloud-viewer-poc.kubeconfig
- 这里还没有提供相关权限所有报错
Error from server (Forbidden): pods is forbidden: User “system:serviceaccount:default:ifcloud-viewer” cannot list resource “pods” in API group “” at the cluster scope
创建clusterrole、clusterrolebanding设置权限
vim k8s_create_kubeconfig_ClusterRole_Clusterrolebanding.yaml
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: ifcloud-viewer
rules:
- apiGroups: [""]
resources: ["services", "namespaces", "pods", "nodes"]
verbs: ["get", "watch", "list"]
- apiGroups: ["apps"]
resources: ["deployments"]
verbs: ["get", "watch", "list"]
- apiGroups: ["tenant.kubesphere.io"]
resources: ["workspaces", "workspacetemplates"]
verbs: ["get", "watch", "list"]
- apiGroups: ["extensions"]
resources: ["ingresses"]
verbs: ["get", "watch", "list"]
- apiGroups: ["networking.k8s.io"]
resources: ["ingresses"]
verbs: ["get", "watch", "list"]
- apiGroups: ["gateway.kubesphere.io"]
resources: ["gateways"]
verbs: ["get", "watch", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: ifcloud-viewer
subjects:
- kind: ServiceAccount
name: ifcloud-viewer
namespace: default
#- kind: User
# name: ifcloud-viewer
# apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: ifcloud-viewer
apiGroup: rbac.authorization.k8s.io
- 创建资源
kubectl create -f k8s_create_kubeconfig_ClusterRole_Clusterrolebanding.yaml
再次测试权限成功
kubectl get pod -A --kubeconfig=ifcloud-viewer-poc.kubeconfig
kubectl get sts -A --kubeconfig=ifcloud-viewer-poc.kubeconfig
金科生产CMDB-clusterrole
- 新增storage
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cmdb-sniffer-viewer
rules:
- apiGroups:
- ""
resources:
- services
- namespaces
- pods
- nodes
- persistentvolumeclaims
- persistentvolumeclaims/status
verbs:
- get
- watch
- list
- apiGroups:
- apps
resources:
- deployments
- statefulsets
verbs:
- get
- watch
- list
- apiGroups:
- tenant.kubesphere.io
resources:
- workspaces
- workspacetemplates
verbs:
- get
- watch
- list
- apiGroups:
- extensions
resources:
- ingresses
verbs:
- get
- watch
- list
- apiGroups:
- networking.k8s.io
resources:
- ingresses
verbs:
- get
- watch
- list
- apiGroups:
- gateway.kubesphere.io
resources:
- gateways
verbs:
- get
- watch
- list
- apiGroups:
- storage.k8s.io
resources:
- storageclasses
verbs:
- get
- watch
- list
https://blog.csdn.net/a772304419/article/details/126285333
https://jimmysong.io/kubernetes-handbook/guide/auth-with-kubeconfig-or-token.html