Skip to content

NaverCloudPlatform/ncloud-pca-issuer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ncloud Private CA Issuer for cert-manager

이 레포지토리는 네이버 클라우드 Private CA를 사용하는 cert-manager의 external Issuer를 포함하고 있습니다.

시작하기

사전준비

Private CA 이용신청

Private CA 이용 신청하기 버튼을 눌러 신청합니다.

Private CA 서비스로 사설 CA 생성

사설 CA 생성 가이드를 참고하여 CA를 생성합니다.

cert-manager

클러스터에 cert-manager가 설치되지 않았다면, cert-manager official documentation를 참고하여 설치합니다.

Ncloud Private CA Issuer for cert-manager 설치

cert-manager Namespace에 설치한다고 가정합니다.

Realeses를 확인하여, 최신버전을 확인합니다. 버전에 맞춰 아래 명령을 수행합니다.

kubectl apply -f https://github.com/NaverCloudPlatform/ncloud-pca-issuer/releases/download/v0.1.0/ncloud-pca-issuer-v0.1.0.yaml

Custom 배포(개발자용)

config/rbac/role.yamlconfig/rbac/role_binding.yaml 파일의 ClusterRole 과 ClusterRolebinding을 확인합니다. 기본적으로 cet-manager 네임스페이스에 위치한 ncloud-pca-issuer 서비스어카운트가 필요한 모든 권한을 가지고 있습니다. 필요에 따라 수정해서 사용 하십시오.

kubectl create serviceaccount -n cert-manager ncloud-pca-issuer

kubectl apply -f config/rbac/role.yaml
kubectl apply -f config/rbac/role_binding.yaml

Install the Ncloud PCA Issuer CRDs in config/crd 디렉토리의 Ncloud PCA Issuer CRD들을 설치합니다. 이 매니페스트는 kustomization을 사용합니다(-k옵션을 추가하세요)

kubectl apply -k config/crd
Controller 이미지 빌드와 배포

참고: Ncloud 공식 이미지를 사용하면 이 단계를 건너뛸 수 있습니다.

이미지를 빌드하기 위해서 kubebuilder installed가 완료되어야 합니다.

docker 이미지 빌드:

make docker-build

Docker 이미지 푸시하고 kind에 load해 테스트:

make docker-push || kind load docker-image nks-release.kr.ncr.ntruss.com/cert-manager-ncloud-pca-issuer:latest

controller 배포하기

Issuer controller 배포:

cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ncloud-pca-issuer
  namespace: cert-manager
  labels:
    app: ncloud-pca-issuer
spec:
  selector:
    matchLabels:
      app: ncloud-pca-issuer
  replicas: 1
  template:
    metadata:
      labels:
        app: ncloud-pca-issuer
    spec:
      serviceAccountName: controller-manager
      containers:
      # update the image to your registry if you built and pushed your own image.
      - image: nks-release.kr.ncr.ntruss.com/cert-manager-ncloud-pca-issuer:latest 
        imagePullPolicy: IfNotPresent
        name: ncloud-pca-issuer
        resources:
          limits:
            cpu: 100m
            memory: 30Mi
          requests:
            cpu: 100m
            memory: 20Mi
      terminationGracePeriodSeconds: 10
EOF

기본적으로 Ncloud PCA Issuer controller는 cert-manager 네임스페이스에 배포됩니다.

NAME                                                    READY   STATUS    RESTARTS   AGE
cert-manager-b4d6fd99b-jsr8p                            1/1     Running   0          38h
cert-manager-cainjector-74bfccdfdf-q62qx                1/1     Running   0          38h
cert-manager-webhook-65b766b5f8-m2cpb                   1/1     Running   0          38h
ncloud-pca-issuer-controller-manager-6b777b58b9-vfm5b   2/2     Running   0          37h

SubAccount 인증 설정

Private CA 권한이 있는 SubAccount를 생성하고, AccessKey/SecretKey를 준비합니다. AccessKey, SecretKey로 Ncloud Private CA Issuer가 사용할 secret을 생성합니다.

kubectl create secret generic ncloud-secret --from-literal=NCLOUD_ACCESS_KEY=ACCESSKEYIDACCESSKEY --from-literal=NCLOUD_SECRET_KEY=SECRETACCESSKEYSECRETACCESSKEYSECRETACCE -n cert-manager

Issuer 설정

cert-manager는 Ncloud Private CA를 사용하여 NcloudPCAIssuer (네임스페이스 내부) 와 NcloudPCAClusterIssuer (클러스터 전체)를 등록 할 수 있습니다.

아래의 샘플 설정을 참고하여주십시오.

# ncloudpcaissuer-sample.yaml
apiVersion: privateca-issuer.ncloud.com/v1alpha1
kind: NcloudPCAIssuer
metadata:
  name: issuer-sample
  namespace: cert-manager
spec:
  # Private CA에 생성된 Root CA TAG
  caTag: 12345678-abcdefg
  # 민간클라우드 : https://pca.apigw.ntruss.com, 공공클라우드 : https://privateca.apigw.gov-ntruss.com
  ncloudApiGw: https://pca.apigw.ntruss.com
  # AccessKey, SecretKey가 저장된 Secret
  secretRef:
    name: ncloud-secret
kubectl apply -f ncloudpcaissuer-sample.yaml

또는

# ncloudpcaclusterissuer-sample.yaml
apiVersion: privateca-issuer.ncloud.com/v1alpha1
kind: NcloudPCAClusterIssuer
metadata:
  name: clusterissuer-sample
spec:
  # Private CA에 생성된 Root CA TAG
  caTag: 12345678-abcdefg
  # 민간클라우드 : https://pca.apigw.ntruss.com, 공공클라우드 : https://privateca.apigw.gov-ntruss.com
  ncloudApiGw: https://pca.apigw.ntruss.com
  # AccessKey, SecretKey가 저장된 Secret
  secretRef:
    name: ncloud-secret
    namespace: cert-manager
kubectl apply -f ncloudpcaclusterissuer-sample.yaml

첫 인증서 생성

인증서를 생성하기 위해서는 위 단계에서 NcludPCAIssuerNcloudPCACluserIssuer가 생성되어 있어야 합니다.

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: demo-certificate
  namespace: cert-manager
spec:
  # 인증서가 저장될 Secret Name
  secretName: demo-cert-tls
  # Common Name
  commonName: cert-manager.io.demo
  # DNS SAN
  dnsNames:
    - cert-manager.io
    - jetstack.io
  # 인증서 duration
  duration: 24h0m0s
  # 인증서가 만료되기 8시간 전에 갱신
  renewBefore: 8h0m0s
  # Issuer나 ClusterIssuer가 먼저 설정되어 있어야 합니다.
  issuerRef:
    group: privateca-issuer.ncloud.com
    kind: NcloudPCAIssuer #또는 NcloudPCAClusterIssuer
    name: issuer-sample
kubectl apply -f demo-certificate.yaml

곧 클러스터내에 인증서가 생성되고 사용 가능합니다.

kubectl get certificates,secret
NAME                                           READY   SECRET         AGE
certificate.cert-manager.io/demo-certificate   True    demo-cert-tls  1m

NAME                                     TYPE                                  DATA   AGE
secret/demo-cert-tls                     kubernetes.io/tls                     3      1m