ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kubernetes API 이용해서 사용자 인증서 및 Context 만들기
    K8S 2023. 12. 30. 10:24

     

     

    이번 포스팅은 Kubernetes API를 이용해서 사용자나 서비스에 대한 인증 정보를 생성하고 설정하는 과정에 대해서 다룬다.

     

    수동으로 설정하는 방법은 다음 포스팅을 참고한다. 

     

    Kubernetes에서 수동으로 사용자 인증서와 Context 만들기

    이번 포스팅은 쿠버네티스 클러스터와 상호작용하는 사용자나 서비스에 대한 인증 정보를 수동으로 생성하고 설정하는 과정에 대해서 다룬다. 1. 사용자 키 생성 사용자의 개인 키를 생성하기

    seungjuitmemo.tistory.com

     

    1. 사용자 키 생성

    사용자의 개인 키를 생성하기 위해 OpenSSL을 사용한다.

    이 키는 사용자의 인증서를 생성하는 데 사용된다. 

    openssl genrsa -out test-user.key

     

    2. CSR(인증서 서명 요청) 생성

    생성된 키를 사용하여 CSR을 생성한다.

    그리고 CSR을 생성할때 Common Name(CN)을 설정하는데

    이는 쿠버네티스 클러스터에서 사용자를 식별하는 데 사용되기 때문에 Common Name(CN)을 test-user로 설정한다.  

    openssl req -new -key test-user.key -out test-user.csr
    # Common Name에 'test-user' 입력

     

    3. 사용자 인증서 생성

    이 부분부터 K8S API를 이용해서 인증서 서명을 통해 사용자 인증서를 만든다. 

    위에서 생성한 .csr 파일을 이용해서 certificate signing request 리소스를 만들어야 한다.

     

    먼저 csr을 출력해서 어디 메모장에 적어 놓자. 

    cat test-user.csr | base64 -w 0 # 줄바꿈 없이 출력

     

     

    이후 certificateSiginingRequest 리소스를 생성한다. 

    apiVersion: certificates.k8s.io/v1
    kind: CertificateSigningRequest
    metadata:
      name: test-user
    spec:
      # 이 부분을 출력한 csr로 바꿔치기 한다. 
      request: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ25qQ0NBWVlDQVFBd1dURUxNQWtHQTFVRUJoTUNRVlV4RXpBUkJnTlZCQWdNQ2xOdmJXVXRVM1JoZEdVeApJVEFmQmdOVkJBb01HRWx1ZEdWeWJtVjBJRmRwWkdkcGRITWdVSFI1SUV4MFpERVNNQkFHQTFVRUF3d0pkR1Z6CmRDMTFjMlZ5TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF2TUZjd3BXWU9wSmoKTVFvTWNwYXFoaFBSaEZ2S0pBc3EwRzRzMzhXaDkxSC8xdE9yYUw3NGlpbXZZbFgyRHBtaUdBd0lUYk4zKzRTaApnZTd1NEZnNjNsT1hBQ3MvZ2pOQ21xN3NHSSt3bmpqTnB5YU9SSm9mWFNGNjE4aFRMUmVPT0pwaE8vZGZJMy94Cm8rZGpSN2xmOHdGRlRsWTJpUituclhVTzdaTmhWMEVBZlNiYnV4Q0VwQVBIK1cwSGJ
    TVlhUOTI1OFF5eWxZTUkKcmU5QXFEaENwVnlVNGR0K2NMY2doMWJuQ1FIZHA5ZGF6RWRrdmlyZFlZWjduVkc4NXc2UmYzbDZabUFNR0I2ZgpQcngxMmpXSjFIWnlSS3NsR25NTVJ6YjdrV1psNVFUR09BUmlGWHJOb1RadUx2S2JRWElVZXZmVW9xZjNtTjBmCjhJNGg5L3JYU1FJREFRQUJvQUF3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUtWRzdXTU14ZzE0bXRQT1I3dlkKeXRHMVg0NEdxTHYxN09hUkZiVHpyTkpzVDJ1QmE2c0tlaTVXdlEvZjdvQW1TMWRNME1MRGd2bmZFVC8xVW95ZgpYWUZFcXdCMTZVTzRxaHZqNTM0YlNpKzRvWExRVm1MY3NmSXJ5LzhsQVlCaE85MHJSMmNsUjhOUTdrNFdjSURMCjJoMk16ZFA2aG9MbkNpVm5UeXpxR0QyeEdjNmQzMFpPbzIzRzNSZVUzTGdJSDc0T0dTYTdvMTQ4UnNnM2k5cFgKVXg3ejF3SXRnWDBTT3JsVlFRSTRzZnUyeXhLbGxuZzdNdDBEM0tRY3gzSTBacWVVbkJocEhETjh5UWc0VGFrOAp6ZDVnemV4emdKS2s3L1ZNMUduNzZLR0FHK0tQVmRIajV6Zm1zUm9CTkdwek91bWlROGpHd0IyclVIRHh6c0IvCm1zRT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCg==
      signerName: kubernetes.io/kube-apiserver-client
      expirationSeconds: 86400  # one day
      usages:
      - client auth

     

     

    test-user라는 CSR을 확인 할 수 있고, approve를 통해 K8S API 인증서 키로 서명한다.

    k certificate approve test-user

     

    approve가 정상적으로 완료되면, CSR 리소스의 status에 test-user에 대한 인증서 crt를 확인할 수 있다. 

    k8s context에 등록하기 위해 이 인증서를 추출한다. 

     

    k get csr test-user -o jsonpath='{.status.certificate}' | base64 -d > test-user.crt

     

     

    4. 쿠버네티스 컨텍스트 등록

    생성된 키와 인증서를 사용하여 쿠버네티스 컨텍스트를 등록한다. 

    k config set-credentials test-user --client-key=test-user.key --client-certificate=test-user.crt
    k config set-context test-user-context --cluster=kubernetes --user=test-user


    5. 컨텍스트 조회 및 사용

    등록된 컨텍스트를 조회하고, 원하는 컨텍스트를 활성화한다. 

    k config get-contexts # 등록된 컨텍스트 목록 조회
    k config use-context test-user-context # test-user-context 컨텍스트 사용

     

    6. 네임스페이스 조회 시도

    활성화된 컨텍스트로 네임스페이스를 조회한다. 

    이 때, 사용자 test-user는 아직 클러스터에서 네임스페이스를 조회할 권한이 없어 조회가 실패하지만,

    올바른 사용자 이름이 반환되는 것을 확인할 수 있다.

    k get ns

    반응형

    댓글

Designed by Tistory.