설치 검증
설치 검증
멀티클러스터 Istio 설치가 제대로 동작하는지 검증하는 방법을 알아봐요.
출처: Istio 문서
본문
이 가이드를 따라 멀티클러스터 Istio 설치가 제대로 동작하는지 검증해요.
진행하기 전에 시작하기 전에의 단계를 완료하고, 멀티클러스터 설치 가이드 중 하나를 골라 따라 했는지 확인하세요.
이 가이드에서는 멀티클러스터가 작동하는지 검증하기 위해 HelloWorld 애플리케이션의 V1을 cluster1에, V2를 cluster2에 배포해요. 요청을 받으면 HelloWorld는 응답에 자기 버전을 포함해요.
또한 두 클러스터 모두에 curl 컨테이너를 배포해요. 이 pod들을 HelloWorld 서비스로 보내는 요청의 출처로 사용해서 메시 내부 트래픽을 시뮬레이션할 거예요. 마지막으로 트래픽을 발생시킨 뒤 어느 클러스터가 요청을 받았는지 관찰해요.
멀티클러스터 검증
Istiod가 이제 원격 클러스터의 Kubernetes 컨트롤 플레인과 통신할 수 있는지 확인해요.
$ istioctl remote-clusters --context="${CTX_CLUSTER1}"
NAME SECRET STATUS ISTIOD REVISION
cluster1 synced istiod-7b74b769db-kb4kj default
cluster2 istio-system/istio-remote-secret-cluster2 synced istiod-7b74b769db-kb4kj default
모든 클러스터의 상태가 synced로 표시돼야 해요. 어떤 클러스터의 STATUS가 timeout으로 표시된다면, primary 클러스터의 Istiod가 원격 클러스터와 통신하지 못한다는 뜻이에요. 자세한 오류 메시지는 Istiod 로그를 확인하세요.
참고: timeout 문제가 보이고 primary 클러스터의 Istiod와 원격 클러스터의 Kubernetes 컨트롤 플레인 사이에 중간 호스트(예: Rancher auth proxy)가 있다면, istioctl create-remote-secret이 생성하는 kubeconfig의 certificate-authority-data 필드를 중간 호스트가 사용하는 인증서에 맞게 업데이트해야 할 수도 있어요.
HelloWorld 서비스 배포
HelloWorld 서비스를 어떤 클러스터에서든 호출 가능하게 만들려면 각 클러스터에서 DNS 조회가 성공해야 해요(자세한 내용은 배포 모델 참고). 이를 위해 HelloWorld 서비스를 메시 안의 각 클러스터에 배포할 거예요.
먼저 각 클러스터에 sample 네임스페이스를 만들어요:
$ kubectl create --context="${CTX_CLUSTER1}" namespace sample
$ kubectl create --context="${CTX_CLUSTER2}" namespace sample
sample 네임스페이스에서 자동 sidecar 주입을 활성화해요:
$ kubectl label --context="${CTX_CLUSTER1}" namespace sample \
istio-injection=enabled
$ kubectl label --context="${CTX_CLUSTER2}" namespace sample \
istio-injection=enabled
두 클러스터 모두에 HelloWorld 서비스를 만들어요:
$ kubectl apply --context="${CTX_CLUSTER1}" \
-f @samples/helloworld/helloworld.yaml@ \
-l service=helloworld -n sample
$ kubectl apply --context="${CTX_CLUSTER2}" \
-f @samples/helloworld/helloworld.yaml@ \
-l service=helloworld -n sample
HelloWorld V1 배포
helloworld-v1 애플리케이션을 cluster1에 배포해요:
$ kubectl apply --context="${CTX_CLUSTER1}" \
-f @samples/helloworld/helloworld.yaml@ \
-l version=v1 -n sample
helloworld-v1 pod 상태를 확인해요:
$ kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l app=helloworld
NAME READY STATUS RESTARTS AGE
helloworld-v1-86f77cd7bd-cpxhv 2/2 Running 0 40s
helloworld-v1의 상태가 Running이 될 때까지 기다려요.
HelloWorld V2 배포
helloworld-v2 애플리케이션을 cluster2에 배포해요:
$ kubectl apply --context="${CTX_CLUSTER2}" \
-f @samples/helloworld/helloworld.yaml@ \
-l version=v2 -n sample
helloworld-v2 pod 상태를 확인해요:
$ kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l app=helloworld
NAME READY STATUS RESTARTS AGE
helloworld-v2-758dd55874-6x4t8 2/2 Running 0 40s
helloworld-v2의 상태가 Running이 될 때까지 기다려요.
curl 배포
두 클러스터 모두에 curl 애플리케이션을 배포해요:
$ kubectl apply --context="${CTX_CLUSTER1}" \
-f @samples/curl/curl.yaml@ -n sample
$ kubectl apply --context="${CTX_CLUSTER2}" \
-f @samples/curl/curl.yaml@ -n sample
cluster1에서 curl pod 상태를 확인해요:
$ kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l app=curl
NAME READY STATUS RESTARTS AGE
curl-754684654f-n6bzf 2/2 Running 0 5s
curl pod 상태가 Running이 될 때까지 기다려요.
cluster2에서 curl pod 상태를 확인해요:
$ kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l app=curl
NAME READY STATUS RESTARTS AGE
curl-754684654f-dzl9j 2/2 Running 0 5s
curl pod 상태가 Running이 될 때까지 기다려요.
클러스터 간 트래픽 검증
클러스터 간 로드 밸런싱이 예상대로 동작하는지 검증하려면 curl pod로 HelloWorld 서비스를 여러 번 호출해요. 로드 밸런싱이 제대로 동작하는지 확인하려면 배포에 있는 모든 클러스터에서 HelloWorld 서비스를 호출해요.
cluster1의 curl pod에서 HelloWorld 서비스로 요청을 하나 보내요:
$ kubectl exec --context="${CTX_CLUSTER1}" -n sample -c curl \
"$(kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l \
app=curl -o jsonpath='{.items[0].metadata.name}')" \
-- curl -sS helloworld.sample:5000/hello
이 요청을 여러 번 반복하고 HelloWorld 버전이 v1과 v2 사이에서 전환되는지 확인해요:
Hello version: v2, instance: helloworld-v2-758dd55874-6x4t8
Hello version: v1, instance: helloworld-v1-86f77cd7bd-cpxhv
...
이제 cluster2의 curl pod에서 이 과정을 반복해요:
$ kubectl exec --context="${CTX_CLUSTER2}" -n sample -c curl \
"$(kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l \
app=curl -o jsonpath='{.items[0].metadata.name}')" \
-- curl -sS helloworld.sample:5000/hello
이 요청을 여러 번 반복하고 HelloWorld 버전이 v1과 v2 사이에서 전환되는지 확인해요:
Hello version: v2, instance: helloworld-v2-758dd55874-6x4t8
Hello version: v1, instance: helloworld-v1-86f77cd7bd-cpxhv
...
축하합니다! 여러 클러스터에 Istio를 성공적으로 설치하고 검증했어요!
다음 단계
멀티클러스터 메시에서 트래픽을 제어하는 방법을 배우려면 지역 로드 밸런싱 작업을 확인해 보세요.