인증서 수동 생성하기

인증서 수동 생성하기 (Generate Certificates Manually)

클라이언트 인증서 인증을 사용할 때는 easyrsa, openssl, 또는 cfssl을 통해 인증서를 수동으로 생성할 수 있어요.

출처: 문서

본문

easyrsa

easyrsa는 클러스터를 위한 인증서를 수동으로 생성할 수 있어요.

  • 패치된 버전의 easyrsa3을 다운로드·압축 해제하고 초기화해요.
  • 새 인증 기관(CA)을 생성해요. --batch는 자동 모드를 설정하고, --req-cn은 CA 새 루트 인증서의 CN(Common Name)을 지정해요.
  • 서버 인증서와 키를 생성해요. --subject-alt-name 인자는 API 서버가 접근될 가능한 IP와 DNS 이름을 설정해요. MASTER_CLUSTER_IP는 보통 API 서버와 컨트롤러 매니저 컴포넌트 모두에 대해 --service-cluster-ip-range 인자로 지정된 service CIDR의 첫 번째 IP예요. --days 인자는 인증서가 만료되는 일수를 설정하는 데 사용돼요. 아래 샘플은 기본 DNS 도메인 이름으로 cluster.local을 사용한다고 가정해요.
  • pki/ca.crt, pki/issued/server.crt, pki/private/server.key를 디렉터리로 복사해요.
  • 다음 매개변수를 API 서버 시작 매개변수에 채워 넣고 추가해요.

openssl

openssl은 클러스터를 위한 인증서를 수동으로 생성할 수 있어요.

  • 2048비트로 ca.key를 생성해요.
  • ca.key에 따라 ca.crt를 생성해요(-days를 사용해 인증서 유효 시간 설정).
  • 2048비트로 server.key를 생성해요.
  • CSR(Certificate Signing Request) 생성을 위한 구성 파일을 만들어요. 꺾쇠 괄호로 표시된 값(예: <MASTER_IP>)을 실제 값으로 반드시 치환한 후 파일(예: csr.conf)로 저장해야 해요. MASTER_CLUSTER_IP의 값은 이전 하위 섹션에서 설명한 대로 API 서버의 service cluster IP예요. 아래 샘플은 기본 DNS 도메인 이름으로 cluster.local을 사용한다고 가정해요.
  • 구성 파일을 기반으로 인증서 서명 요청을 생성해요.
  • ca.key, ca.crt, server.csr을 사용해 서버 인증서를 생성해요.
  • 인증서 서명 요청을 확인해요.
  • 인증서를 확인해요.
  • 다음 매개변수를 API 서버 시작 매개변수에 채워 넣고 추가해요.

cfssl

cfssl은 인증서 생성을 위한 또 다른 도구예요.

  • 아래와 같이 명령줄 도구를 다운로드·압축 해제하고 준비해요. 사용 중인 하드웨어 아키텍처와 cfssl 버전에 따라 샘플 명령을 조정해야 할 수 있음에 유의해요.
  • 아티팩트를 담을 디렉터리를 만들고 cfssl을 초기화해요.
  • CA 파일 생성을 위한 JSON 구성 파일을 만들어요(예: ca-config.json).
  • CA 인증서 서명 요청(CSR)을 위한 JSON 구성 파일을 만들어요(예: ca-csr.json). 꺾쇠 괄호로 표시된 값을 사용하려는 실제 값으로 반드시 치환해야 해요.
  • CA 키(ca-key.pem)와 인증서(ca.pem)를 생성해요.
  • API 서버용 키와 인증서 생성을 위한 JSON 구성 파일을 만들어요(예: server-csr.json). 꺾쇠 괄호 안의 값을 사용하려는 실제 값으로 반드시 치환해야 해요. <MASTER_CLUSTER_IP>는 이전 하위 섹션에서 설명한 대로 API 서버의 service cluster IP예요. 아래 샘플은 기본 DNS 도메인 이름으로 cluster.local을 사용한다고 가정해요.
  • 기본적으로 각각 server-key.pemserver.pem 파일에 저장되는 API 서버용 키와 인증서를 생성해요.

자체 서명 CA 인증서 배포

클라이언트 노드는 자체 서명 CA 인증서를 유효한 것으로 인식하기를 거부할 수 있어요. 비프로덕션 배포이거나 회사 방화벽 뒤에서 실행되는 배포라면, 자체 서명 CA 인증서를 모든 클라이언트에 배포하고 유효한 인증서의 로컬 목록을 갱신할 수 있어요.

각 클라이언트에서 다음 작업을 수행해요.

sudo cp ca.crt /usr/local/share/ca-certificates/kubernetes.crt
sudo update-ca-certificates
Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d....
done.

인증서 API (Certificates API)

클러스터에서 TLS 관리 작업 페이지에 문서화된 대로 인증에 사용할 x509 인증서를 프로비저닝하는 데 certificates.k8s.io API를 사용할 수 있어요.

더 알아보기 (Learn more)