brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Sep 30. 2021

쿠버2탄-4. 쿠버네티스-개발자에게 제한된 권한 제공

4/4


쿠버네티스 유튜브 동영상을 보고  AWS EKS설치하고 따라해 봤습니다.

잘 됩니다.


참고 유튜브

https://www.youtube.com/watch?v=qt4fMcvG564



<1> 목표

<2> 인증과 인가는 ?

<3> kubectl 은  쿠버네티스 api에 날리면 쿠버네티스는 인증, 인가를 한다.

<4> Context 구성?

<5> serviceaccount 생성



<1> 목표


개발팀은 test namespace에만 어플케이션을 테스트 할수 있도록 환경 구축

그외 name space는 사용하지 못하도록 함



<2> 인증과 인가는 ?


1

인증은?

serviceaccount , context 사용


2

인가는?

role , serviceaccount  사용



<3> kubectl 은  쿠버네티스 api에 날리면 쿠버네티스는 인증, 인가를 한다.


kubectl로 요청을 보내면, 인증, 인가 정보가 전달 된다.

설정 하지 않으면  /root/.kube/config 파일을 읽어서 인증,인가 정보를 보낸다.



<4> Context 구성?


1

context = cluster + users는 2개로 구성된다.

목적지와 이용자 정보가 있는것이다.

cluster는 목적지이다.

user는 사용자 이다.


2

cluster는 기본 localhost로 설정되어 있음

users는 어떤 계정을  사용할지 설정됨



<5>  config 파일을 보자.


1

cluster

users


2

디폴트 context 확인

user는 develeoper  이다.

cluster는 설치된 eks 클러스터 이다.

설정 파일 보자.

current context   amazone-eks  //  디폴트 context는  amazone-eks  설치 된 값이다.

user는 develeoper

cluster는 eks


3

config ??

kubectl conifig get-context

config파일에 context가 기본 2개 나온다.

현재 dev가 디폴트 이다.


k config use-context dev

k get po

안된다.


<5> serviceaccount 생성


1

name space를 만든다.

해당 name space에 serviceaccount를 만든다.


k create ns test

// test라는 네임스페이스를 만든다.


k create sa  developer -n test

// test라는 네임스페이스에서 서비스 어카운트를 만든다.


k get sa -n test

NAME        SECRETS   AGE

default     1         2m33s

developer   1         2m8s

k config use-context seo-sing-admin@myeks.ap-southeast-1.eksctl.io


2

서비스 어카운트를 만들면 secret이 자동적으로 만들어진다.

k get secret -n test


NAME                    TYPE                                  DATA   AGE

default-token-2grcg     kubernetes.io/service-account-token   3      3m14s

developer-token-dsb97   kubernetes.io/service-account-token   3      2m49s

// developer-token  이 만들어진다.

이 토큰  developer-token 을 context에 넣어 사용하자


3

k config view

토큰 정보 보기

k get secret -n test

k describe secret -n test

export DEV_TOCKEN="eyJhbww"


4

토큰을 context 에 넣자.


5

k config 명령어로 넣어보자

 k config set-credentials --token=$DEV_TOCKEN dev

User "dev" set.

// 토큰을 구분해주는 이름이 필요하다.

user에 보면 이름이 있다.

이 부분을 다른 이름인 dev로 하나 추가하자.


6

추가 확인 ?

k config get-users


NAME

arn:aws:eks:ap-southeast-1:9999:cluster/myeks

dev

seo-sing-admin@myeks.ap-southeast-1.eksctl.io

//dev가 만들어 졌다.


7

user안 dev가 만들었다.


8

cluster는 AWS EKS 로  사용한다.


9

context  =  user + cluster 이다.


k config get-clusters

NAME

arn:aws:eks:ap-southeast-1:9999:cluster/myeks

myeks.ap-southeast-1.eksctl.io


10

생성 ?

클러스터 myeks.ap-southeast-1.eksctl.io

user는 dev 라고 만든다.

context 이름은 dev 로 한다.

네임스페이스 지정 해야 한다.


k config set-context --cluster=myeks.ap-southeast-1.eksctl.io --user=dev dev --namespace=test

Context "dev" created.


11

k config get-contexts


CURRENT   NAME            CLUSTER             AUTHINFO                                                NAMESPACE

*         arn:aws:eks:ap-southeast-1:9999:cluster/myeks   arn:aws:eks:ap-southeast-1:9999:cluster/myeks   arn:aws:eks:ap-southeast-1:9999:cluster/myeks

          dev          myeks.ap-southeast-1.eksctl.io                dev                               test

          seo-sing-admin@myeks.ap-southeast-1.eksctl.io           myeks.ap-southeast-1.eksctl.io                          seo-sing-admin@myeks.ap-southeast-1.eksctl.io           kube-system



12

context switching ?


k config use-context dev

Switched to context "dev".


13

k get po  


(dev:test) [root@myeks-host .kube]# k get po

Error from server (Forbidden): pods is forbidden: User "system:serviceaccount:test:developer" cannot list resource "pods" in API group "" in the namespace "test"

// 인증은 되었다는것. 로그인은 되었다는것

// 권한은 없다.



<5> 인가는 권한이다.


role을 만들고  role 바인딩 하자.


1

role을 만들자

네임 스페이스는 test

사용자는 dev


2

role 샘플 복사

https://kubernetes.io/docs/reference/access-authn-authz/rbac/


3

vi role.yaml


apiVersion: rbac.authorization.k8s.io/v1

kind: Role

metadata:

  namespace: test

  name: dev

rules:

- apiGroups: [""] # "" indicates the core API group

  resources: ["pods"]

  verbs: ["create", "delete"]


4

admin context로 전환해 role을 만든다.

k config use-context seo-sing-admin@myeks.ap-southeast-1.eksctl.io

k create -f role.yaml


5

dev라는 role 만들어짐


 k get role -n test

st tmp]# k get role -n test

NAME   CREATED AT

dev    2021-09-29T21:13:03Z



6

롤 바인딩

 k create rolebinding --help

 // --serviceaccount=test:developer   네임스페이스 : 서비스어카운트 이름 으로 해야 한다.


 k create rolebinding --serviceaccount=test:developer --role=dev --dry-run=client -o yaml dev --namespace=test >role-binding.yaml


create  -f role-binding.yaml

rolebinding.rbac.authorization.k8s.io/dev created


7

확인 ?

k get rolebindings.rbac.authorization.k8s.io -n test

NAME        ROLE       AGE

dev       Role/dev   4m7s


8

dev 라는 이름의 롤 바인딩이 만들어 졌다.


9

context 전환후 테스트


 k config use-context dev

poc 생성만 되도록 한것을 확인

조회는 안된다.


k run --image=nginx nginx-test

pod/nginx-test created

// 생성 권한은 있다.


k get po

Error from server (Forbidden): pods is forbidden: User "system:serviceaccount:test:developer" cannot list resource "pods" in API group "" in the namespace "test"

// 읽기 권한은 없어서 안된다.




https://brunch.co.kr/@topasvga/1656




감사합니다.



브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari