본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

인증서 생성하기

원문 보기 위키 갱신

etcdv3 데이터스토어에 대해 Calico Open Source 컴포넌트를 인증하는 데 쓰는 인증 기관(CA)과 클라이언트 인증서를 생성하는 방법을 안내해요. etcd의 사용자-역할 모델과 인증서 CN(Common Name)이 만나는 지점이 이 문서의 핵심이에요. operator 설치가 아닌 매니페스트 설치에 적용되는 참고 자료예요.

출처: 문서

본문

Tab: Operator

이 문서는 operator 방식의 Calico 설치에는 적용되지 않아요.

Tab: Manifest

etcd 데이터스토어에는 역할(role)에 연결되는 사용자(user)라는 개념이 있고, 각 역할은 etcd에 저장된 데이터에 대한 접근 권한 집합을 정의해요. 이 튜토리얼은 특정 사용자를 etcd에 인증하는 데 쓸 수 있는 인증 기관(CA), 인증서, 키를 생성하는 과정을 안내해요. 이런 파일을 생성하는 도구는 여러 가지가 있지만, 이 튜토리얼에서는 각 인증서마다 필요한 고유한 세부 사항을 짚어 보면서 인증서 생성을 쉽게 만들어 주는 etcd 저장소의 hack/tls-setup 도구를 사용해요.

etcd 서버는 인증서의 CN(Common Name) 속성을 사용해 인증서를 특정 사용자와 연결해요. 따라서 etcd에 접근할 각 컴포넌트의 인증서 CN이, 필요한 키나 경로에 접근할 수 있는 적절한 etcd 역할을 가진 etcd 사용자 이름과 일치하도록 만드는 게 중요해요.

hack/tls-setup 도구 사용하기

hack/tls-setup을 사용한다면 README를 따라 했는지, 그리고 make를 성공적으로 실행할 수 있는지 확인하세요.

tls-setup에서 주목할 디렉터리는 config와 certs예요. 이름이 말해 주듯 config에는 CA와 인증서 생성에 사용되는 구성 파일이 들어 있고, certs에는 생성된 파일이 기록돼요.

hack/tls-setup으로 인증서를 생성하는 절차는 다음과 같아요:

  1. etcd 인증서 구성을 편집해요.
  2. 사용자별/컴포넌트별 구성 파일을 추가해요.
  3. make를 실행해요. (make를 다시 실행하면 CA와 모든 인증서가 다시 생성돼요.)

인증서를 생성하면 다음이 만들어져요:

  • CA
  • etcd 서버 3대용 인증서·키 쌍
  • etcd 프록시용 인증서·키 쌍
  • 사용자/컴포넌트별 인증서·키 쌍

인증 기관(CA) 구성

hack/tls-setup에 포함된 기본 CA 구성은 추가 구성 없이도 잘 동작해요. 생성되는 certs/ca.pem 파일은 모든 컴포넌트(etcd, Kubernetes apiserver, 모든 calico 컴포넌트)에 제공해야 해요.

etcd 인증서 구성

config/req-csr.json 파일의 "hosts" 섹션에 etcd 멤버를 실행할 서버들의 IP 주소를 추가해요. 인증서를 생성하면 3대의 etcd 멤버 서버에 쓸 수 있는 인증서 3개가 만들어져요. (테스트할 때는 하나만 써도 돼요.) 인증서·키 파일은 certs/etcd[123].pem과 certs/etcd[123]-key.pem이고, 일치하는 쌍을 각 etcd 멤버에 제공해야 해요.

etcd 프록시를 사용한다면 도구가 생성한 인증서/키 쌍(파일 certs/proxy1.pem과 certs/proxy1-key.pem)을 모든 프록시에 쓸 수 있고, 프록시마다 개별 인증서/키 쌍을 만들 수도 있어요.

사용자별/컴포넌트별 etcd 인증서 구성

Calico, Kubernetes 또는 다른 컴포넌트의 인증서는 아래와 같은 구성 파일로 생성할 수 있어요. <etcd_username> 자리표시자를, 해당 컴포넌트가 필요로 하는 경로/키 접두사에 접근할 수 있는 역할을 가진 etcd 사용자의 이름으로 바꾸세요.

{
  "CN": "<etcd_username>",
  "hosts": ["localhost"],
  "key": {
    "algo": "ecdsa",
    "size": 384
  },
  "names": [
    {
      "O": "autogenerated",
      "OU": "etcd cluster",
      "L": "the internet"
    }
  ]
}

새로 만든 추가 구성 파일은 hack/tls-setup 폴더 안의 config 디렉터리에 넣어요. 각 새 구성에 대한 인증서를 빌드하려면 Makefile의 req: 타깃에 아래와 비슷한 줄을 추가해요. 구성을 추가할 때마다 <component> 자리에 적절한 이름을 넣어 구성 파일 이름과 인증서/키 파일 접두사를 알맞게 바꾸세요.

    $(CFSSL) gencert \
      -ca certs/ca.pem \
      -ca-key certs/ca-key.pem \
      -config config/ca-config.json \
      config/req-<component>.json | $(JSON) -bare certs/<component>

인증서와 키 파일이 생성되면 해당 컴포넌트에 전달해야 하는데, 방법은 이 문서의 범위를 벗어나요. Kubernetes와 Calico 컴포넌트에 인증서를 제공하는 방법은 이 문서를 참고하세요.

더 알아보기 (Learn more)

인증서의 CN이 etcd 사용자 이름과 일치해야 한다는 점이 이 절차의 핵심이에요. make를 다시 실행하면 CA와 모든 인증서가 함께 재생성된다는 점도 기억해 두세요.