CFSSL 로 Kubernetes API 계정 생성하기
Kubernetes API 계정은 여러가지 방법으로 생성 가능하지만, 여기에서는 CFSSL 로 생성하는 방법을 다루었습니다.
1. CFSSL 설치
CFSSL 은 CloudFlare 에서 개발한 오픈 소스 도구로, 인증서와 인증 기관 (Certificate Authority, CA) 을 관리하기 위한 도구입니다.
CFSSL 명령 바이너리 파일을 다운로드 받습니다.
# CFSSL_VERSION="1.6.5"
# curl -L "https://github.com/cloudflare/cfssl/releases/download/v${CFSSL_VERSION}/cfssl_${CFSSL_VERSION}_linux_amd64" -o cfssl
# curl -L "https://github.com/cloudflare/cfssl/releases/download/v${CFSSL_VERSION}/cfssljson_${CFSSL_VERSION}_linux_amd64" -o cfssljson
# curl -L "https://github.com/cloudflare/cfssl/releases/download/v${CFSSL_VERSION}/cfssl-certinfo_${CFSSL_VERSION}_linux_amd64" -o cfssl-certinfo
파일에 실행권한을 주고 적절한 디렉토리로 이동 시킵니다.
# chmod +x cfssl*
# mv cfssl* /usr/local/bin/
설치된 CFSSL 버전을 확인합니다.
# cfssl version
Version: 1.6.5
Runtime: go1.22.0
2. 사용자 생성
공식 Document 참고 : https://kubernetes.io/docs/tasks/tls/managing-tls-in-a-cluster/
아래와 같이 Kubernetes API 에 접근할 계정 (sysdocu) 의 key 및 csr 파일을 생성합니다.
예제에서는 계정에 색상을 더했습니다. 다른 계정으로 사용할 분은 이름을 바꿔서 사용하시면 됩니다.
# openssl req -new -newkey rsa:4096 -nodes -keyout sysdocu.key -out sysdocu.csr -subj "/CN=sysdocu"
# cat <<EOF | kubectl apply -f -
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
name: sysdocu
spec:
groups:
- system:authenticated
request: $(cat sysdocu.csr | base64 | tr -d '\n')
signerName: kubernetes.io/kube-apiserver-client
usages:
- client auth
EOF
CSR 을 생성하면 승인 대기 상태가 되므로, 아래와 같이 추가 명령으로 승인을 해주어야 합니다.
# kubectl certificate approve sysdocu
승인 (Approved) 은 되었는데, 발행 (Issued) 까지 되지 못한 경우에는 아래 작업을 계속 이어서 진행합니다.
# kubectl get csr
NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION
sysdocu 106m kubernetes.io/kube-apiserver-client admin <none> Approved
이제 CFSSL 을 이용하여 인증서를 발급받아야 합니다.
# cat <<EOF | cfssl gencert -initca - | cfssljson -bare ca
{
"CN": "sysdocu",
"key": {
"algo": "rsa",
"size": 4096
}
}
EOF
2024/03/15 11:00:36 [INFO] generating a new CA key and certificate from CSR
2024/03/15 11:00:36 [INFO] generate received request
2024/03/15 11:00:36 [INFO] received CSR
2024/03/15 11:00:36 [INFO] generating key: rsa-4096
2024/03/15 11:00:37 [INFO] encoded CSR
2024/03/15 11:00:37 [INFO] signed certificate with serial number 540868796268120255911872831281879045817461391444
# vi server-signing-config.json
{ "signing": { "default": { "usages": [ "client auth" ], "expiry": "876000h", "ca_constraint": { "is_ca": false } } } } |
# kubectl get csr sysdocu -o jsonpath='{.spec.request}' | \
base64 --decode | \
cfssl sign -ca ca.pem -ca-key ca-key.pem -config server-signing-config.json - | \
cfssljson -bare ca-signed-server
2024/03/15 11:02:49 [INFO] signed certificate with serial number 559793821146666936971756884293966902391849545829
인증서가 생성되었습니다.
# ls -al ca-signed-server.pem
-rw-r--r-- 1 root root 1172 Mar 15 11:02 ca-signed-server.pem
CSR 에 서명된 인증서를 입력합니다.
# kubectl get csr sysdocu -o json | \
jq '.status.certificate = "'$(base64 ca-signed-server.pem | tr -d '\n')'"' | \
kubectl replace --raw /apis/certificates.k8s.io/v1/certificatesigningrequests/sysdocu/status -f -
(결과 생략)
이제 CSR 에 인증서가 발행된 것을 확인할 수 있습니다.
# kubectl get csr -A
NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION
sysdocu 110m kubernetes.io/kube-apiserver-client admin <none> Approved,Issued
'리눅스 > PaaS' 카테고리의 다른 글
Openstack Magnum 환경에서 Korifi 설치 및 API 계정 생성 이슈 (0) | 2024.03.07 |
---|---|
Ubuntu 22.04 Kubernetes Cluster 에 Korifi 설치하기 (0) | 2024.02.16 |
gitlab-runner 설치 및 GitLab CI/CD Pipeline 사용하기 (0) | 2024.02.08 |
Ubuntu 22.04 에서 Gogs 설치 및 설정하기 (0) | 2024.02.05 |
Ubuntu 22.04 단일 서버 K3S Cluster 에서 Korifi 설치하기 (0) | 2024.01.25 |