Kubernetes/Udemy - CKAD with Tests

Authentication

비번변경 2021. 12. 25. 20:30

Kubernetes 클러스터는 물리 노드, 가상 노드 및 동작하는 다양한 요소로 구성되어 있다. Kubernetes 클러스터는 인증 및 권한 부여 메커니즘을 이용해 구성 요소 간 통신과 클러스터에 대한 접근 관리성을 확보함으로써 보호되어야 한다.

 

사용자

쿠버네티스는 기본적으로 사용자 계정을 관리하지 않는다. 즉, kubectl create user와 같은 명령어로 사용자를 생성할 수 없고, kubectl get users와 같은 명령어로 사용자를 확인할 수도 없다.

쿠버네티스는 인증서, LDAP과 같은 서비스, 사용자 정보가 저장된 정적 파일 등을 이용해 사용자를 관리한다.

 

단, Service Accounts는 쿠버네티스에 생성하고 관리할 수 있다.

 

사용자 유형

인간

User Accounts

  • 관리자 : 관리 작업을 수행하기 위해 클러스터에 접근
  • 개발자 : 애플리케이션을 테스트하거나 배포하기 위해 클러스터에 접근
  • 최종 사용자 : 클러스터에 배포된 애플리케이션에 접근. 최종 사용자의 보안은 애플리케이션 자체에서 관리되기 때문에 클러스터에서 별도로 관리할 필요가 없다.

로봇

Service Accounts

  • 타사 애플리케이션 : 통합 목적으로 클러스터에 접근

 

kuberctl을 통하든, kube-apiserver에 직접 접근하든, 모든 사용자의 접근은 kube-apiserver에 의해 관리된다. kube-apiserver는 요청을 처리하기 전에 해당 요청을 정해진 인증 메커니즘을 이용해 인증한다.

아래에는 인증 매커니즘 중 하나의 정적 암호/토큰 파일에 대한 내용을 정리한다.

 

정적 암호/토큰 파일

사용자와 패스워드, 또는 토큰 목록을 정적 파일로 생성하여 사용자 정보로 사용하는 방식이다.

파일 내 속성은 사용자명, 암호, user id, group 정보 등이 있을 수 있다.

 

kube-apiserver 인증 적용 방법

  • kube-apiserver.service에 설정 추가
    --basic-auth-file 옵션을 추가한다.
    ExecStart=/usr/local/bin/kube-apiserver \\
     --advertise-address=${INTERNAL_IP} \\
     --allow-privileged=true \\
     --apiserver-count=3 \\
     --authorization-mode=Node,RBAC \\
     --bind-address=0.0.0.0 \\
     --enable-swagger-ui=true \\
     --etcd-servers=https://192.168.5.11:2379,https://192.168.5.12:2379 \\
     --event-ttl=1h \\
     --runtime-config=api/all \\
     --service-cluster-ip-range=10.96.0.0/24 \\
     --service-node-port-range=30000-32767 \\
     --v=2
     --basic-auth-file=<FILENAME>​
    설정 변경 후 적용을 위해서는 서비스 재시작이 필요하다.
  • kubeadm을 이용해 클러스터를 설정한 경우, kube-apiserver의 POD 정의 yaml 파일 수정
    --basic-auth-file 옵션을 추가한다.
    vi /etc/kubernetes/manifests/kube-apiserver.yaml​
    apiVersion: v1
    kind: Pod
    metadata:
      creationTimestamp: null
      name: kube-apiserver
      namespace: kube-system
    spec:
      containers:
      - command:
        - kube-apiserver
        - --authorization-mode=Node,RBAC
        - --advertise-address=172.17.0.50
        - --allow-privileged=true
        - --enable-admission-plugins=NodeRestriction
        - --enable-bootstrap-token-auth=true
        - --basic-auth-file=<FILENAME>
        image: k8s.gcr.io/kube-apiserver-amd64:v1.11.3
        name: kube-apiserver
        ...​
    파일 업데이트 시, kubeadm이 자동으로 kube-apiserver를 재시작한다.

 

kube-apiserver 인증 방법

사용자, 비밀번호 또는 토큰을 이용해 kube-apiserver에 인증하기 위해서는 curl 명령어에 해당 정도를 지정하면 된다.

  • 사용자/비밀번호 사용
    curl -v -k <KUBE_APISERVER_URL> -u "<USERNAME>:<PASSWORD>"
    
    # 예시
    curl -v -k https://master-node-ip:6443/api/v1/pods -u "user1:password123"​
  • 토큰 사용
    curl -v -k <KUBE_APISERVER_URL> --header "Authorization: Bearer VALUE"​

 


참고 문서

https://coffeewhale.com/kubernetes/authentication/http-auth/2020/05/03/auth02/

https://freedeveloper.tistory.com/422