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
감사합니다.