Accounts
어카운츠에는 두 가지의 타입이 존재
- 사용자를 위한 user
- 애플리케이션(포드 외)를 위한 service account
Static Token File
Apiserver 서비스를 실행할 때 --token-auth-file=SOMEFILE.csv 전달 (kube-apiserver 수정 필요)
API 서버를 다시 시작해야 적용됨
토큰, 사용자 이름, 사용자 uid, 선택적으로 그룹 이름 다음에 최소 3 열의 csv 파일
password1,user1,uid001,"group1" password2,user2,uid002 password3,user3,uid003 password3,user4,uid004
Static Token File 을 적용했을 때 사용 방법
- HTTP 요청을 진행할 때 다음과 같은 내용을 헤더에 포함해야함
- Authorization: Bearer 31ada4fd-adec-460c-809a-9e56ceb75269
$ TOKEN=password1
$ APISERVER=https://127.0.0.1:6443
$ curl -X GET $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure
- Kubectl에 등록하고 사용하는 방법
$ kubectl config set-credentials user1 --token=password1
$ kubectl config set-context user1-context --cluster=kubernetes --namespace=frontend --user=user1
$ kubectl get pod --user user1
서비스 어카운트 만들기
포드에 별도의 설정을 주지 않으면 기본적은 service account가 생성
$ kubectl get sa default -o yaml apiVersion: v1 kind: ServiceAccount metadata: creationTimestamp: "2019-07-06T06:12:26Z" name: default namespace: default resourceVersion: "279" selfLink: /api/v1/namespaces/default/serviceaccounts/default uid: 06b46c38-9fb5-11e9-a520-42010a920176 secrets: - name: default-token-ppzqk
명령어를 사용하여 serviceaccount sa1를 생성
- Kubectl create serviceaccount sa1
Pod 에 spec.serviceAccount: service-account-name과 같은 형식으로 지정
연습문제
http-go라는 이름을 가진 ServiceAccount를 생성하고 http-go 포드를 생성해 http-go 서비스 어카운트를 사용하도록 설정하라
다음 csv 파일을 생성하고 apiserver에 토큰을 등록하여 재시작하자
password1,user1,uid001,"group1" password2,user2,uid002 password3,user3,uid003 password3,user4,uid004
- 마스터 노드에 문제가 발생하는가? 어떤 서비스가 문제가 발생하는가?
- 문제가 발생하는 서비스의 컨테이너를 확인하기 위해
docker logs
를 사용하고 그 해결 방법을 찾으라 - 정상적으로 서비스가 시작됐다면 kubectl에 유저정보를 등록하고 등록한 유저 권한으로
kubectl get pod
요청을 수행하라- 반드시 Fobidden이라는 결과가 나와야 함 (유저는 있으되 권한은 없다)
풀이
somefile.csv 파일 생성
$ vi somefile.csv
/etc/kubernetes/manifests/kube-apiserver.yaml
에 token-auth-file
옵션 추가
$ sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml
spec:
containers:
- command:
...
- --authorization-mode=Node,RBAC
- --token-auth-file=/home/server1/somefile.csv # somefile.csv 경로 추가
...
docker 명령으로 확인해보면 kube-apiserver 가 정상적으로 구동되지 않고 있음
$ docker ps -a | grep kube-apiserver
7e3c7afb096b 75c7f7112080 "kube-apiserver --ad…" 9 seconds ago Exited (1) 7 seconds ago k8s_kube-apiserver_kube-apiserver-master_kube-system_cd6a4c3fdf1ad1a357eaffa42b1feac3_2
$ docker logs 7e3c7afb096b
Flag --insecure-port has been deprecated, This flag has no effect now and will be removed in v1.24.
I0120 04:23:14.226988 1 server.go:632] external host was not specified, using 10.0.2.15
I0120 04:23:14.227593 1 server.go:182] Version: v1.20.1
Error: open /home/server1/somefile.csv: no such file or directory
hostPath 경로가 /etc/kubernetes/pki
경로이기 때문에
신규로 만들기보다는 해당 경로를 이용하도록 수정
spec:
containers:
- command:
...
- --authorization-mode=Node,RBAC
- --token-auth-file=/etc/kubernetes/pki/somefile.csv # somefile.csv 경로 수정
...
somefile.csv 파일을 /etc/kubernetes/pki
경로로 이동
$ sudo mv somefile.csv /etc/kubernetes/pki
docker 명령으로 컨테이너가 잘 구동됐는지 확인
$ docker ps -a | grep kube-apiserver
97e7b9820c97 75c7f7112080 "kube-apiserver --ad…" 18 minutes ago Up 18 minutes k8s_kube-apiserver_kube-apiserver-master_kube-system_55ba4a5d69f9689f0e08e66172e7f2fc_4
kubectl get pod 명령이 잘 수행되는 것을 확인
정의한 ID 와 PASSWORD 가 잘 등록이 된 것으로 기대할 수 있음
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
http-go-568f649bb-crtcr 1/1 Running 1 19h
user1 ID 와 password 를 등록 아직 로그인한 상태는 아님
$ kubectl config set-credentials user1 --token=password1
User "user1" set.
kubernetes 클러스터에 로그인하기 위해서는 위에 등록한 정보를 이용하겠다고 user1-context 에 등록
$ kubectl config set-context user1-context --cluster=kubernetes --namespace=frontend --user=user1
Context "user1-context" created.
user1-context 사용할 수 있도록 처리
$ kubectl config use-context user1-context
Switched to context "user1-context".
아래와 같이 Forbidden 에러 메세지가 출력된다면 잘 적용된 것
$ kubectl get pod
Error from server (Forbidden): pods is forbidden: User "user1" cannot list resource "pods" in API group "" in the namespace "frontend"
아래와 같이 에러 메세지가 출력됐다면 로그인 조차 되지 않은 것이므로 잘못 적용된 것
$ kubectl get pod
error: You must be logged in to the server (Unauthorized)
아래 명령으로 admin 계정인 kubernetes-admin@kubernetes 를 사용하도록 다시 변경처리
$ kubectl config use-context kubernetes-admin@kubernetes
'개발강의정리 > DevOps' 카테고리의 다른 글
[데브옵스를 위한 쿠버네티스 마스터] 클러스터 유지와 보안, 트러블슈팅 - TLS 인증서를 활용한 유저 생성하기 (0) | 2021.01.20 |
---|---|
[데브옵스를 위한 쿠버네티스 마스터] 클러스터 유지와 보안, 트러블슈팅 - TLS 인증서를 활용한 통신 이해 (0) | 2021.01.20 |
[데브옵스를 위한 쿠버네티스 마스터] 클러스터 유지와 보안, 트러블슈팅 - 보안을 위한 다양한 리소스 (0) | 2021.01.20 |
[데브옵스를 위한 쿠버네티스 마스터] 클러스터 유지와 보안, 트러블슈팅 - 백업과 복원 방법 (0) | 2021.01.20 |
[데브옵스를 위한 쿠버네티스 마스터] 클러스터 유지와 보안, 트러블슈팅 - 쿠버네티스 버전 업데이트 (0) | 2021.01.20 |
댓글