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
폴더 아래에는 다음과 같은 파일들이 생성된다.
그리고 만들어진 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 |