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}"

더 알아보기 (Learn more)