Kubernetes 인증 및 권한 수여 작업 전 공략: 액세스 제어 의 Service Account
Kubernetes 에는 사용자 와 service account 라 는 개념 이 있어 자원 에 접근 할 수 있 습 니 다.사용 자 는 키 와 인증서 와 연결 되 어 API 요청 을 검증 하 는 데 사 용 됩 니 다. 클 러 스 터 외부 에서 요청 한 모든 인증 을 위 한 설정 방안 을 사용 합 니 다.가장 흔 한 방안 은 X. 509 인증 서 를 통 해 인증 요청 을 하 는 것 이다.인증서 생 성 및 사용자 와 연 결 된 인증서 에 대한 정 보 는 Kubernetes 인증 튜 토리 얼 을 참조 하 십시오.
Kubernetes 는 데이터베이스 나 사용자, 비밀 번 호 를 유지 하지 않 는 설정 파일 을 기억 하 십시오.반면 집단 밖에서 관 리 를 원 하고 있다.인증 모듈 의 개념 을 통 해 Kubernetes 는 OpenID 나 Active Directory 와 같은 제3자 에 게 인증 을 위임 할 수 있다.
X. 509 인증 서 는 인증 의 외부 요청 에 사용 할 수 있 지만 service account 는 클 러 스 터 에서 실행 되 는 프로 세 스 를 검증 하 는 데 사용 할 수 있 습 니 다.또한, service account 는 API server 내부 호출 을 하 는 pod 와 연 결 됩 니 다.
Kubernetes 설치 마다 실행 중인 pod 와 연 결 된 기본 service account 가 있 습 니 다.이와 유사 하 게 pod 가 내부 API 서버 점 을 호출 할 수 있 도록 Kubernetes 라 는 ClusterIP 서비스 가 있 습 니 다. 기본 service account 와 함께 내부 프로 세 스 가 API 점 을 호출 할 수 있 도록 합 니 다.
kubectl get serviceAccounts
NAME SECRETS AGE
default 1 122m
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 443/TCP 123m
이 service account 는 모든 pod 내부 에 설 치 된 secret 를 가리 키 고 있 습 니 다.이 시 크 릿 은 API 서버 에 필요 한 토 큰 을 포함 하고 있 습 니 다.
kubectl get secret
NAME TYPE DATA AGE
default-token-4rpmv kubernetes.io/service-account-token 3 123m
우리 가 pod 를 예약 하고 방문 하기 시 작 했 을 때 모든 것 이 밝 아 졌 다.우 리 는 curl 명령 을 사용 하여 Busy Box 기반 pod 를 시작 할 것 입 니 다.
kubectl run -i --tty --rm curl-tns --image=radial/busyboxplus:curl
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
If you don't see a command prompt, try pressing enter.
[ root@curl-tns-56c6d54585-6v2xp:/ ]$
Busy Box 셸 에 있 을 때 API Server 터미널 에 접근 하려 고 합 니 다.
[ root@curl-tns-56c6d54585-6v2xp:/ ]$ curl https://kubernetes:8443/api
인증 토 큰 이 부족 해 결과 가 나 오지 않 습 니 다.HTTP 머리 에 박 을 수 있 는 토 큰 을 어떻게 검색 하 는 지 보 여 줍 니 다.
앞서 논의 한 바 와 같이 토 큰 은 시 크 릿 으로 pod 에 설치 되 어 있 습 니 다.영 패 를 찾 으 려 면/var/run/secrets/kubernetes. io/serviceaccount 를 보십시오.
[ root@curl-tns-56c6d54585-6v2xp:/ ]$ cd /var/run/secrets/kubernetes.io/serviceaccount
[ root@curl-tns-56c6d54585-6v2xp:/tmp/secrets/kubernetes.io/serviceaccount ]$ ls
ca.crt namespace token
curl 명령 을 간소화 하기 위해 환경 변 수 를 설정 합 니 다.
CA_CERT=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
NAMESPACE=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)
다음 curl 명령 은 기본 네 임 스페이스 에서 서 비 스 를 요청 합 니 다.API 서버 에서 응답 을 받 을 수 있 는 지 살 펴 보 자.
[ root@curl-tns-56c6d54585-6v2xp:~ ]$ curl --cacert $CA_CERT -H "Authorization: Bearer $TOKEN" "https://kubernetes/api/v1/namespaces/$NAMESPACE/services/"
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {
},
"status": "Failure",
"message": "services is forbidden: User \"system:serviceaccount:default:default\" cannot list resource \"services\" in API group \"\" in the namespace \"default\"",
"reason": "Forbidden",
"details": {
"kind": "services"
},
"code": 403
}
그러나 기본 service account 는 같은 네 임 스페이스 에 있 는 서 비 스 를 검색 할 수 있 는 충분 한 권한 이 없습니다.
Kubernetes 는 폐쇄 적 이 고 개방 적 인 관례 에 따라 기본 적 인 상황 에서 사용자 와 service account 에 권한 이 없다 는 것 을 기억 하 십시오.
이 요청 을 만족 시 키 기 위해 서 는 기본 service account 와 적당 한 캐릭터 를 연결 하 는 캐릭터 바 인 딩 을 만들어 야 합 니 다.이 단 계 는 우리 가 캐릭터 를 Bob 에 연결 하 는 방식 과 유사 하 며 후 자 는 그 에 게 pod 를 열거 할 수 있 는 권한 을 부여 합 니 다.
pod 를 종료 하고 다음 명령 을 실행 합 니 다. 기본 service account 에 캐릭터 바 인 딩 을 만 듭 니 다.
kubectl create rolebinding default-view \
--clusterrole=view \
--serviceaccount=default:default \
--namespace=default
rolebinding.rbac.authorization.k8s.io/default-view created
이 명령 은 기본 service account 를 클 러 스 터 캐릭터 보기 와 연결 합 니 다. 이 캐릭터 보 기 는 pod 가 자원 을 표시 할 수 있 도록 합 니 다.
궁금 하 다 면 사용 가능 한 모든 클 러 스 터 역할 을 보고 싶 습 니 다. 명령 실행: kubectl get clusterroles.
Busy Box pod 를 다시 시작 하고 API Server 에 접근 합 니 다.
kubectl run -i --tty --rm curl-tns --image=radial/busyboxplus:curl
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
If you don't see a command prompt, try pressing enter.
[ root@curl-tns-56c6d54585-2cx44:/ ]$
CA_CERT=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
NAMESPACE=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)
curl --cacert $CA_CERT -H "Authorization: Bearer $TOKEN" "https://kubernetes/api/v1/namespaces/$NAMESPACE/services/"
{
"kind": "ServiceList",
"apiVersion": "v1",
"metadata": {
"selfLink": "/api/v1/namespaces/default/services/",
"resourceVersion": "11076"
},
"items": [
{
"metadata": {
"name": "kubernetes",
"namespace": "default",
"selfLink": "/api/v1/namespaces/default/services/kubernetes",
"uid": "b715a117-6be1-4de0-8830-45bddcda701c",
"resourceVersion": "151",
"creationTimestamp": "2019-08-13T09:45:27Z",
"labels": {
"component": "apiserver",
"provider": "kubernetes"
}
},
"spec": {
"ports": [
{
"name": "https",
"protocol": "TCP",
"port": 443,
"targetPort": 8443
}
],
"clusterIP": "10.96.0.1",
"type": "ClusterIP",
"sessionAffinity": "None"
},
"status": {
"loadBalancer": {
}
}
}
]
}
RBAC 가 pod 로 어떻게 확장 되 는 지 확인 하기 위해 서 기본 service account 에 다른 바 인 딩 을 만 들 수 있 습 니 다.
Kubernetes 인증 과 권한 수여 시리즈 에 관 한 글 은 여기 서 끝 났 습 니 다. 저 희 는 인증, 권한 수여 와 Service account 의 기본 개념 에 대해 논 의 했 습 니 다. 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
리눅스 입문~컴퓨터 시스템의 하드웨어의 개요와 리눅스의 주요 기능과 그 구조의 개요~별도의 기사에서 각 Linux의 기능인 프로세스 및 메모리 관리 메커니즘에 대한 자세한 내용을 요약합니다. 입력 장치, 네트워크 어댑터를 통해 컴퓨터에서 처리를 수행하도록 요청 프로세스 관리 메모리 관리 장치 조작 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.