Authentication / Authorization

dongbin_Shin·2022년 11월 15일
0

kubernetes

목록 보기
16/16
post-custom-banner

Authentication

K8S로 접근하는 방법

X509 Client Certs

  • Cluster에는 접근할 때 필요한 정보(CA crt, Client crt, Client key)가 들어있는 kubeconfig라는 파일이 존재
  • 외부에서 Client Key와 Client crt를 가지고 https로 API Server에 접근이 가능
  • kubectl은 kubeconfig를 복사하기 때문에 accept-hosts 로 proxy를 개방하면 외부에서 proxy port로 http 접근이 가능

kubectl

  • 외부의 kubectl에서 각 cluster의 kubeconfig 파일을 갖고 있다면 원하는 cluster에 접근이 가능
  • kubectl config user-context context-A

kubeconfig 구성 요소

/etc/kubernetes/admin.conf

  • clusters: cluster를 등록하는 항목
    • name
    • url
    • CA
  • users: 사용자를 등록하는 항목
    • name
    • crt
    • key
  • contexts: 유저와 cluster를 매핑하는 항목
    • name
    • cluster
    • user

Service Account

  • Namespace를 생성하면 기본적으로 default라는 이름의 ServiceAccount가 생성됨
  • ServiceAccount에는 CA crt와 토큰을 가진 Secret이 연결됨
  • Pod를 생성하면 ServiceAccount와 연결되고 이 Pod로 API Server에 접근 가능
  • 사용자는 Secret의 토큰값만 알면 API Server에 접근 가능

Authorization

RBAC


  • Role과 RoleBinding을 만들어 Service Account와 연결해 권한을 부여함
  • Cluster 단위의 오브젝트에 대한 권한인 ClusterRole, ClusterRoleBinding
  • Namespace 단위의 오브젝트에 대한 권한인 Role, RoleBinding
  • ClusterRole, ClusterRoleBinding은 모든 Namespace에 같은 권한을 부여할 때 사용하면 유용
  • Pod와 같이 core object일 경우 Role.apiGroups: [""] 로 생략해도 됨
  • 모든 cluster 자원에 접근 가능하게 하려면 apiGroups: [*], resources: [*], verbs: [*]
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: r-01
  namespace: nm-01
rules:
- apiGroups: [""]
  verbs: ["get", "list"]
  resources: ["pods"]
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: rb-01
  namespace: nm-01
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: r-01
subjects:
- kind: ServiceAccount
  name: default
  namespace: nm-01
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cr-02
rules:
- apiGroups: ["*"]
  verbs: ["*"]
  resources: ["*"]
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: rb-02
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cr-02
subjects:
- kind: ServiceAccount
  name: sa-02
  namespace: nm-02
profile
멋있는 백엔드 개발자
post-custom-banner

0개의 댓글