Multi-Primary 설치
Multi-Primary 설치
cluster1과 cluster2 양쪽 모두에 Istio 컨트롤 플레인을 설치해서 둘 다 primary 클러스터로 만드는 방법을 알려드려요.
출처: Istio 문서
본문
이 가이드를 따라 cluster1과 cluster2 양쪽 모두에 Istio 컨트롤 플레인을 설치해서 각각을 primary 클러스터로 만들어요. 두 클러스터 모두 network1 네트워크에 있어서, 두 클러스터의 pod 간에 직접 연결이 가능해요.
진행하기 전에 시작하기 전에의 단계를 반드시 완료하세요.
이 구성에서는 각 컨트롤 플레인이 두 클러스터의 API Server를 모두 관찰해서 endpoint를 얻어요.
서비스 워크로드는 클러스터 경계를 넘어 직접(pod-to-pod) 통신해요.
cluster1을 primary로 설정
cluster1용 istioctl 설정을 만들어요:
istioctl과 IstioOperator API로 cluster1에 Istio를 primary로 설치해요.
$ cat <<EOF > cluster1.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
values:
global:
meshID: mesh1
multiCluster:
clusterName: cluster1
network: network1
EOF
설정을 cluster1에 적용해요:
$ istioctl install --context="${CTX_CLUSTER1}" -f cluster1.yaml
다음 Helm 명령으로 cluster1에 Istio를 primary로 설치해요:
cluster1에 base 차트를 설치해요:
$ helm install istio-base istio/base -n istio-system --kube-context "${CTX_CLUSTER1}"
그리고 다음 멀티클러스터 설정으로 cluster1에 istiod 차트를 설치해요:
$ helm install istiod istio/istiod -n istio-system --kube-context "${CTX_CLUSTER1}" --set global.meshID=mesh1 --set global.multiCluster.clusterName=cluster1 --set global.network=network1
cluster2를 primary로 설정
cluster2용 istioctl 설정을 만들어요:
istioctl과 IstioOperator API로 cluster2에 Istio를 primary로 설치해요.
$ cat <<EOF > cluster2.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
values:
global:
meshID: mesh1
multiCluster:
clusterName: cluster2
network: network1
EOF
설정을 cluster2에 적용해요:
$ istioctl install --context="${CTX_CLUSTER2}" -f cluster2.yaml
다음 Helm 명령으로 cluster2에 Istio를 primary로 설치해요:
cluster2에 base 차트를 설치해요:
$ helm install istio-base istio/base -n istio-system --kube-context "${CTX_CLUSTER2}"
그리고 다음 멀티클러스터 설정으로 cluster2에 istiod 차트를 설치해요:
$ helm install istiod istio/istiod -n istio-system --kube-context "${CTX_CLUSTER2}" --set global.meshID=mesh1 --set global.multiCluster.clusterName=cluster2 --set global.network=network1
Endpoint Discovery 활성화
cluster1의 API server에 대한 접근을 제공하는 remote secret을 cluster2에 설치해요.
$ istioctl create-remote-secret \
--context="${CTX_CLUSTER1}" \
--name=cluster1 | \
kubectl apply -f - --context="${CTX_CLUSTER2}"
cluster2의 API server에 대한 접근을 제공하는 remote secret을 cluster1에 설치해요.
$ istioctl create-remote-secret \
--context="${CTX_CLUSTER2}" \
--name=cluster2 | \
kubectl apply -f - --context="${CTX_CLUSTER1}"
축하합니다! 여러 primary 클러스터에 걸친 Istio 메시를 성공적으로 설치했어요!
다음 단계
이제 설치를 검증할 수 있어요.
정리
cluster1과 cluster2 양쪽 모두에서 Istio를 설치했을 때 사용한 것과 같은 방식(istioctl 또는 Helm)으로 Istio를 제거해요.
cluster1에서 Istio를 제거해요:
$ istioctl uninstall --context="${CTX_CLUSTER1}" -y --purge
$ kubectl delete ns istio-system --context="${CTX_CLUSTER1}"
cluster2에서 Istio를 제거해요:
$ istioctl uninstall --context="${CTX_CLUSTER2}" -y --purge
$ kubectl delete ns istio-system --context="${CTX_CLUSTER2}"
cluster1에서 Istio Helm 설치를 삭제해요:
$ helm delete istiod -n istio-system --kube-context "${CTX_CLUSTER1}"
$ helm delete istio-base -n istio-system --kube-context "${CTX_CLUSTER1}"
cluster1에서 istio-system 네임스페이스를 삭제해요:
$ kubectl delete ns istio-system --context="${CTX_CLUSTER1}"
cluster2에서 Istio Helm 설치를 삭제해요:
$ helm delete istiod -n istio-system --kube-context "${CTX_CLUSTER2}"
$ helm delete istio-base -n istio-system --kube-context "${CTX_CLUSTER2}"
cluster2에서 istio-system 네임스페이스를 삭제해요:
$ kubectl delete ns istio-system --context="${CTX_CLUSTER2}"
(선택) Istio가 설치한 CRD를 삭제해요:
CRD를 삭제하면 클러스터에 만든 모든 Istio 리소스가 영구적으로 제거돼요. 클러스터에 설치된 Istio CRD를 다음 명령으로 삭제하세요:
$ kubectl get crd -oname --context "${CTX_CLUSTER1}" | grep --color=never 'istio.io' | xargs kubectl delete --context "${CTX_CLUSTER1}"
$ kubectl get crd -oname --context "${CTX_CLUSTER2}" | grep --color=never 'istio.io' | xargs kubectl delete --context "${CTX_CLUSTER2}"