이 페이지 개선에 도움 주기
이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.
Kubernetes 인증서로 워크로드 보안
Kubernetes Certificates API를 통해 X.509CertificateSigningRequest
(CSR) 리소스를 사용할 수 있습니다. 요청은 서명되기 전에 승인되거나 거부됩니다. Kubernetes는 잘 정의된 동작을 통해 기본 제공 서명자와 사용자 지정 서명자를 모두 지원합니다. 이렇게 하면 클라이언트는 CSR에 어떤 일이 일어나는지 예측할 수 있습니다. 인증서 서명에 대한 자세한 내용을 알아보려면 서명 요청
기본 제공 서명자 중 하나는 kubernetes.io/legacy-unknown
입니다. CSR 리소스의 v1beta1
API는 이 legacy-unknown 서명자를 준수했습니다. 그러나 CSR의 안정적인 v1
API에서는 signerName
이 kubernetes.io/legacy-unknown
으로 설정되도록 허용하지 않습니다.
Amazon EKS CA를 사용하여 클러스터에서 인증서를 생성하려는 경우 사용자 지정 서명자를 사용해야 합니다. CSR v1
API 버전을 사용하여 새 인증서를 생성하려면 기존 매니페스트 및 API 클라이언트를 마이그레이션해야 합니다. 기존 v1beta1
API를 사용하여 생성된 기존 인증서는 유효하며 인증서가 만료될 때까지 기능합니다. 다음 내용이 포함됩니다:
-
신뢰 배포: 없음. Kubernetes 클러스터에는 이 서명자에 대한 표준 트러스트나 배포가 없습니다.
-
허용된 과목: 모두
-
허용된 x509 확장 기능: subjectAltName 및 키 사용 확장 기능을 준수하고 다른 확장 기능을 폐기합니다.
-
허용된 키 사용: ["키 암호화”, “디지털 서명”, “서버 인증"] 이외의 용도는 포함하지 않아야 합니다.
참고
클라이언트 인증서 서명은 지원되지 않습니다.
-
만료/인증서 수명: 1년(기본 및 최대)
-
CA 비트 허용됨/허용되지 않음: 허용되지 않음
signerName을 사용한 CSR 생성 예
다음 단계에서는 signerName: beta.eks.amazonaws.com/app-serving
을 사용하여 myserver.default.svc
DNS 이름에 대한 서빙 인증서를 생성하는 방법을 보여줍니다. 이 정보를 사용자 환경에 대한 가이드로 사용합니다.
-
openssl genrsa -out myserver.key 2048
명령을 실행하여 RSA 프라이빗 키를 생성합니다.openssl genrsa -out myserver.key 2048
-
다음 명령을 실행하여 인증 요청을 생성합니다.
openssl req -new -key myserver.key -out myserver.csr -subj "/CN=myserver.default.svc"
-
CSR 요청에 대한
base64
값을 생성하고 이후 단계에서 사용할 수 있도록 변수에 저장합니다.base_64=$(cat myserver.csr | base64 -w 0 | tr -d " ")
-
다음 명령을 실행하여
mycsr.yaml
이라는 파일을 생성합니다. 다음 예에서beta.eks.amazonaws.com/app-serving
은signerName
입니다.cat >mycsr.yaml <<EOF apiVersion: certificates.k8s.io/v1 kind: CertificateSigningRequest metadata: name: myserver spec: request: $base_64 signerName: beta.eks.amazonaws.com/app-serving usages: - digital signature - key encipherment - server auth EOF
-
CSR을 제출합니다.
kubectl apply -f mycsr.yaml
-
서빙 인증서를 승인합니다.
kubectl certificate approve myserver
-
인증서가 발급되었는지 확인합니다.
kubectl get csr myserver
예제 출력은 다음과 같습니다.
NAME AGE SIGNERNAME REQUESTOR CONDITION myserver 3m20s beta.eks.amazonaws.com/app-serving kubernetes-admin Approved,Issued
-
발급된 인증서를 내보냅니다.
kubectl get csr myserver -o jsonpath='{.status.certificate}'| base64 -d > myserver.crt