-
Kubernetes API 이용해서 사용자 인증서 및 Context 만들기K8S 2023. 12. 30. 10:24
이번 포스팅은 Kubernetes API를 이용해서 사용자나 서비스에 대한 인증 정보를 생성하고 설정하는 과정에 대해서 다룬다.
수동으로 설정하는 방법은 다음 포스팅을 참고한다.
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
반응형'K8S' 카테고리의 다른 글
쿠버네티스 Image Hardening (0) 2024.01.16 Kubernetes NodeRestriction 플러그인 (0) 2023.12.30 Kubernetes에서 수동으로 사용자 인증서와 Context 만들기 (0) 2023.12.29 K8S 빠른 CLI 커맨드 정리 (0) 2023.12.29 Kubernetes의 역할 및 바인딩 조합 이해 (0) 2023.12.29