- default = kubernetes-admin ( 전체 관리 가능 )
- user1 = 매핑된 권한 ( role ) 없음
- 현재 role 은 없지만, Clusterrole 은 있다
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: user1role
rules:
- apiGroups: [""]
resources: ["services"]
verbs: ["get", "list"]
api 그룹은 apiversion 에서 / 를 기준으로 구분한다
- 만약, v1 만 써있다면 그룹이 "" 이고, 이를 core group 이라고 한다
- apps/v1 은 그룹이 apps 이다
그룹 -> ""
리소스 -> service
verb(s) -> list
서비스 전체를 확인할 때에는 kubectl get svc 로 확인하였다. 이는 list 이다. 옵션을 사용하여 Pod 가 아닌 특정 Pod 의 정보를 확인하고 싶다면 뒤에 특정 Pod 의 이름을 지정한다. 이는 get 이다
- list 는 전체를 확인한다. 큰 범위. list 만 부여해도 get 이 가능하다
- get 은 특정 무언가를 확인한다. 작은 범위. 허나, get 을 사용하고 싶다면, 전체 리스트를 확인 가능 해야 한다. 따라서, get 을 사용하면 앞에 list 를 포함해야 실행된다. 따라서 get 과 list 를 함께 표기해야 한다
watch 는 상태 정보를 확인 가능하다
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
namespace: default
name: user1-rolebinding
subjects: # sa 정의
- kind: ServiceAccount
name: user1
namespace: default
roleRef: # role 정의
kind: Role
name: user1role
apiGroup: rbac.authorization.k8s.io
root@manager:~/k8slab/0908# k get svc --as system:serviceaccount:default:user1
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 27h
root@manager:~/k8slab/0908# k get pod --as system:serviceaccount:default:user1
Error from server (Forbidden): pods is forbidden: User "system:serviceaccount:default:user1" cannot list resource "pods" in API group "" in the namespace "default"
Q.(객관식) 다음중 정상동작하는 것은? ( 1 )
- kubectl get deployment --as list-only [list 만 추가]
- kubectl get deployment --as get-only [get 만 추가]
- kubectl get deployment --as watch-only [watch 만 추가]
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: user2role
rules:
- apiGroups: ["apps"]
resources: ["deployments"]
verbs: ["get", "list"]
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
namespace: default
name: user1-rolebinding2
subjects:
- kind: ServiceAccount
name: user1
namespace: default
roleRef:
kind: Role
name: user2role
apiGroup: rbac.authorization.k8s.io
root@manager:~/k8slab/0908# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
root@manager:~/k8slab/0908# cat ~/.kube/config
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: [ 공개 키 ]
server: https://211.183.3.100:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: [ 공개 키 ]
client-key-data: [ 개인 키 ]
export DTKN=$(kubectl get secret $SECNAME -o jsonpath='{.data.token}' | base64 -d)
root@manager:~/k8slab/0908# curl https://211.183.3.100:6443/apis --header "Authorization: Bearer $DTKN" -k
{
"kind": "APIGroupList",
"apiVersion": "v1",
"groups": [
{
"name": "apiregistration.k8s.io",
"versions": [
{
"groupVersion": "apiregistration.k8s.io/v1",
"version": "v1"
},
{
"groupVersion": "apiregistration.k8s.io/v1beta1",
"version": "v1beta1"
}
],
"preferredVersion": {
"groupVersion": "apiregistration.k8s.io/v1",
"version": "v1"
}
},
- Token 을 넣어 접속하면, 계정 정보와 함께 접속하므로 Kubernetes API Server 접속하여 Data 를 확인할 수 있다
curl https://211.183.3.100:6443/api/v1/namespaces/default/services --header "Authorization: Bearer $DTKN" -k
curl https://localhost:6443/apis/apps/v1/namespaces/default/deployments -k --header "Authorization: Bearer $DTKN"
curl https://211.183.3.100:6443/api/v1/namespaces/default/services/kubernetes --header "Authorization: BBearer $DTKN" -k
- 이거에 대한 Data 이다