istio 멀티 클러스터 설치를 위한 인증서 구성 방법

istio를 멀티 클러스터 환경으로 구성하기 위해서는 두 클러스터가 동일한 ca를 사용해야한다.

이번 글에서는 istio 멀티 클러스터 구성을 위한 인증서 구성 방법에 대해 작성해보려고 한다.

root-ca 생성하기

istioctl 설치 파일을 다운받으면 해당 파일 내에 tools라는 폴더가 존재한다. 

만약 내 환경에 어디있는지 모르겠다면 istio github의 최상위에 tools라는 폴더가 존재한다. 해당 폴더 아래에 certs라는 폴더가 있다.

 

🗂️ 여기를 다운받자.

https://github.com/istio/istio/tree/master/tools/certs

 

istio/tools/certs at master · istio/istio

Connect, secure, control, and observe services. Contribute to istio/istio development by creating an account on GitHub.

github.com

 

 

root-ca를 만드는데 필요한 파일은 Makefile.selfsigned.mk 과 common.mk 파일이다.

이 파일이 있는 폴더에서 다음과 같은 명령어를 치면 root-ca파일이 생성된다.

make -f Makefile.selfsigned.mk root-ca

 

root-ca가 만들어진 중

폴더 아래에는 다음과 같은 파일들이 생성된다.

 

그리고 만들어진 ca파일(=root-cert.pem)을 한번 확인해보면 10년 짜리 root 인증서가 만들어진 것을 확인할 수 있다.

 

Root CA 인증서 날짜 늘려서 생성하기

common.mk파일을 열어보면 ROOT CA에대한 날짜 설정을 할 수 있다. 

# variables: root CA
ROOTCA_DAYS ?= 3650
ROOTCA_KEYSZ ?= 4096
ROOTCA_ORG ?= Istio
ROOTCA_CN ?= Root CA
KUBECONFIG ?= $(HOME)/.kube/config
ISTIO_NAMESPACE ?= istio-system
# Additional variables are defined in root-ca.conf target below.

 

이 날짜에서 ROOTCA_DAYS를 36500로 바꾸면 100년짜리 ca인증서를 만들 수 있다.  (넉넉하니 안심..)

그리고 환경별로 인증서를 다르게 관리하고 싶다면 ROOTCA_ORG에 이름을 변경해서 환경 정보를 알려줄 수도 있다. 

나중에 intermediate CA(=클러스터 전용 인증서)를 만들고 나서 인증서를 잘못 만들었는지에대한 정보도 확인할수 있어서 편하다.

 

common.mk파일을 수정한뒤 다시 명령어를 실행하면 된다. 

 

인증서 정보확인하기

cfssl certinfo -cert root-cert.pem | jq

 

클러스터(intermediate CA) 인증서 생성하기

이제 root ca를 생성했다면 이 인증서를 사용해서 클러스터에 적용할 ca를 생성하면 된다. 

root 인증서와 키가 있는, Makefile.selfsigned.mk, common.mk 파일이 위치한 폴더에서 작업하면 된다. 

하지만 root-ca를 만들때와 다르게 <클러스터 이름>-cacerts 를 실행해야 intermediate ca파일이 만들어진다. 

 

# 클러스터 이름이 prod-cluster 일때
make -f Makefile.selfsigned.mk prod-cluster-cacerts

 

인증서가 만들어지는 중

 

이렇게 되면 이제 prod-cluster라는 폴더내부에 인증서 파일들이 만들어진다. 

 

인증서 파일을 직접 확인해보면 아까 위에서 설정한 ca 정보가 보이는것을 확인할 수 있다.

cfssl certinfo -cert prod-cluster/ca-cert.pem

 

이미 설치 되어있는 istio 인증서를 사용하여 다른 클러스터 용 인증서 만들기

이미 istio를 쿠버네티스에 설치했다면 이 istio가 사용하고 있는 ca인증서를 사용하여 다른 클러스터의 intermediate ca 인증서를 만들 수 있습니다. 클러스터를 한개만 운영하다가 늘려야할 때 신규 클러스터의 인증서만 잘 만들면 됩니다.

 

이때 필요한 파일은 Makefile.selfsigned.mk 파일이 아니라 Makefile.k8s.mk파일과 common.mk 파일만 있으면 됩니다.

kubeconfig 컨텍스트 설정하기

이미 설치 되어있는 클러스터로 컨텍스트를 변경합니다.

kubectl config use-context < 컨텍스트 이름>

 

 

ca 인증서 가져오기

make -f Makefile.k8s.mk fetch-root-ca

 

설정한 컨텍스트를 이용하여 클러스터의 istio-system에 설치되어있는 istio-ca-certs 시크릿 혹은 cacerts 시크릿을 이용하여 인증서와 키파일을 생성합니다. 이 파일은 사용하고 있는 컨텍스트 이름과 동일한 이름으로 폴더가 생성되는데 이 아래에 생성이 되는 것을 확인할 수 있습니다.

 

 

이제 여기서 이 인증서를 이용하여 intermediate ca를 만들어야합니다. 

위에서와는 다르게 Makefile.k8s.mk 파일을 사용해야 합니다. 

# 클러스터 이름이 hello 일때
make -f Makefile.k8s.mk hello-cacerts

 

 

이렇게 하면 같은 폴더 위치에 클러스터 이름의 폴더가 생성되고 그 아래에 인증서와 키파일이 저장됩니다.

 

이제 이 인증서들을 사용하여 신규 클러스터에 istio를 구성하도록 하면 됩니다. 

'K8S > istio' 카테고리의 다른 글

istio 멀티 클러스터 구성하기 (작성중)  (0) 2024.09.27
맥에서 istio 이미지 빌드하기 (+orbstack)  (0) 2024.09.22