인증서 수동 생성하기
인증서 수동 생성하기 (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.pem과server.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를 사용할 수 있어요.