Azure Kubernetes Service에 대한 Istio 기반 서비스 메시 추가 기능 배포
이 문서에서는 AKS(Azure Kubernetes Service) 클러스터용 Istio 기반 서비스 메시 추가 기능을 설치하는 방법을 보여 줍니다.
Istio 및 서비스 메시 추가 기능에 대한 자세한 내용은 Azure Kubernetes Service에 대한 Istio 기반 서비스 메시 추가 기능을 참조하세요.
시작하기 전에
추가 기능을 사용하려면 Azure CLI 버전 2.57.0 이상이 설치되어 있어야 합니다.
az --version
을 실행하여 버전을 확인할 수 있습니다. 설치하거나 업그레이드하려면 Azure CLI 설치를 참조하세요.지역에서 사용할 수 있는 Istio 추가 기능 수정 버전과 AKS 클러스터 버전과의 호환성에 대한 정보를 찾으려면
az aks mesh get-revisions
명령을 사용합니다.az aks mesh get-revisions --location <location> -o table
CLI 명령을 사용하도록
istioctl
선택하는 경우 Istio의 추가 기능 설치를 가리키는 플래그를 포함해야 합니다.--istioNamespace aks-istio-system
환경 변수 설정
export CLUSTER=<cluster-name>
export RESOURCE_GROUP=<resource-group-name>
export LOCATION=<location>
Istio 추가 기능 설치
이 섹션에는 클러스터를 만드는 동안 Istio 추가 기능을 설치하거나 Azure CLI를 사용하여 기존 클러스터를 사용하도록 설정하는 단계가 포함되어 있습니다. Bicep을 사용하여 추가 기능을 설치하려면 Bicep을 사용하여 Istio 서비스 메시 추가 기능이 있는 AKS 클러스터 설치 가이드를 참조하세요. AKS 클러스터에 대한 Bicep 리소스 정의에 대해 자세히 알아보려면 Bicep managedCluster 참조를 참조하세요.
수정 버전 선택
수정 버전을 지정하지 않고 추가 기능을 사용하도록 설정하면 지원되는 기본 수정 버전이 설치됩니다.
수정 버전을 지정하려면 다음 단계를 수행합니다.
az aks mesh get-revisions
명령을 사용하여 지역의 여러 AKS 클러스터 버전에 사용할 수 있는 수정 버전을 확인합니다.- 사용 가능한 수정 버전에 따라 메시 설치에 사용하는 enable 명령에
--revision asm-X-Y
(예:--revision asm-1-20
) 플래그를 포함할 수 있습니다.
클러스터를 만드는 동안 메시 설치
클러스터를 만들 때 Istio 추가 기능을 설치하려면 --enable-azure-service-mesh
또는 --enable-asm
매개 변수를 사용합니다.
az group create --name ${RESOURCE_GROUP} --location ${LOCATION}
az aks create \
--resource-group ${RESOURCE_GROUP} \
--name ${CLUSTER} \
--enable-asm \
--generate-ssh-keys
기존 클러스터에 대해 메시 설치
다음 예제에서는 기존 AKS 클러스터에 Istio 추가 기능을 사용하도록 설정합니다.
Important
OSM 추가 기능이 이미 클러스터에 있는 경우 기존 클러스터에서 Istio 추가 기능을 사용하도록 설정할 수 없습니다. Istio 추가 기능을 설치하기 전에 OSM 추가 기능을 제거합니다. 자세한 내용은 AKS 클러스터에서 OSM 추가 항목 제거를 참조하세요. Istio 추가 기능은 버전 >=1.23의 AKS 클러스터에서만 사용하도록 설정할 수 있습니다.
az aks mesh enable --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}
성공적인 설치 확인
Istio 추가 기능이 클러스터에 설치되어 있는지 확인하려면 다음 명령을 실행합니다.
az aks show --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --query 'serviceMeshProfile.mode'
출력에 Istio
가 표시되는지 확인합니다.
az aks get-credentials
를 AKS 클러스터의 자격 증명에 사용합니다.
az aks get-credentials --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}
kubectl
을 사용하여 istiod
(Istio 컨트롤 플레인) Pod가 성공적으로 실행되고 있는지 확인합니다.
kubectl get pods -n aks-istio-system
istiod
Pod의 상태가 Running
인지 확인합니다. 예시:
NAME READY STATUS RESTARTS AGE
istiod-asm-1-18-74f7f7c46c-xfdtl 1/1 Running 0 2m
istiod-asm-1-18-74f7f7c46c-4nt2v 1/1 Running 0 2m
사이드카 주입 사용
새 Pod에 사이드카를 자동으로 설치하려면 현재 설치된 컨트롤 플레인 수정 버전에 해당하는 수정 레이블로 네임스페이스에 주석을 추가해야 합니다.
어떤 수정 버전이 설치되어 있는지 확실하지 않은 경우 다음을 사용합니다.
az aks show --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --query 'serviceMeshProfile.istio.revisions'
수정 레이블 적용:
kubectl label namespace default istio.io/rev=asm-X-Y
Important
기본 istio-injection=enabled
레이블 지정은 작동하지 않습니다. 컨트롤 플레인 수정 버전과 일치하는 명시적 버전 관리(예: istio.io/rev=asm-1-18
)가 필요합니다.
istioctl kube-inject
를 사용하여 사이드카를 수동으로 삽입하려면 istioNamespace
(-i
) 및 revision
(-r
)의 추가 매개 변수를 지정해야 합니다. 예시:
kubectl apply -f <(istioctl kube-inject -f sample.yaml -i aks-istio-system -r asm-X-Y) -n foo
사이드카 삽입 트리거
테스트를 위해 제공된 샘플 애플리케이션을 배포하거나 기존 워크로드에 대한 사이드카 삽입을 트리거할 수 있습니다.
기존 애플리케이션
메시에 추가할 기존 애플리케이션이 있는 경우 이전 단계와 같이 해당 네임스페이스의 레이블이 지정되었는지 확인하고 배포를 다시 시작하여 사이드카 삽입을 트리거합니다.
kubectl rollout restart -n <namespace> <deployment name>
모든 컨테이너가 준비되었는지 확인하고 kubectl describe
출력에서 istio-proxy
컨테이너를 찾아 사이드카 삽입이 성공했는지 확인합니다. 예를 들면 다음과 같습니다.
kubectl describe pod -n namespace <pod name>
istio-proxy
컨테이너는 Envoy 사이드카입니다. 이제 애플리케이션이 데이터 플레인의 일부입니다.
샘플 애플리케이션 배포
kubectl apply
를 사용하여 샘플 애플리케이션을 클러스터에 배포합니다.
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.18/samples/bookinfo/platform/kube/bookinfo.yaml
참고 항목
아웃바운드 인터넷 액세스에 HTTP 프록시를 사용하는 클러스터는 서비스 항목을 설정해야 합니다. 설치 지침은 Azure Kubernetes Service의 HTTP 프록시 지원을 참조 하세요.
클러스터에 여러 배포 및 서비스가 만들어지는지 확인합니다. 예시:
service/details created
serviceaccount/bookinfo-details created
deployment.apps/details-v1 created
service/ratings created
serviceaccount/bookinfo-ratings created
deployment.apps/ratings-v1 created
service/reviews created
serviceaccount/bookinfo-reviews created
deployment.apps/reviews-v1 created
deployment.apps/reviews-v2 created
deployment.apps/reviews-v3 created
service/productpage created
serviceaccount/bookinfo-productpage created
deployment.apps/productpage-v1 created
kubectl get services
를 사용하여 서비스가 성공적으로 만들어졌는지 확인합니다.
kubectl get services
다음 서비스가 배포되었는지 확인합니다.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
details ClusterIP 10.0.180.193 <none> 9080/TCP 87s
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 15m
productpage ClusterIP 10.0.112.238 <none> 9080/TCP 86s
ratings ClusterIP 10.0.15.201 <none> 9080/TCP 86s
reviews ClusterIP 10.0.73.95 <none> 9080/TCP 86s
kubectl get pods
NAME READY STATUS RESTARTS AGE
details-v1-558b8b4b76-2llld 2/2 Running 0 2m41s
productpage-v1-6987489c74-lpkgl 2/2 Running 0 2m40s
ratings-v1-7dc98c7588-vzftc 2/2 Running 0 2m41s
reviews-v1-7f99cc4496-gdxfn 2/2 Running 0 2m41s
reviews-v2-7d79d5bd5d-8zzqd 2/2 Running 0 2m41s
reviews-v3-7dbcdcbc56-m8dph 2/2 Running 0 2m41s
모든 Pod의 상태가 Running
이고 READY
열에 2개의 컨테이너가 있는지 확인합니다. 각 Pod에 추가된 두 번째 컨테이너(istio-proxy
)는 Istio에 의해 주입된 Envoy 사이드카이고, 다른 하나는 애플리케이션 컨테이너입니다.
수신에 대해 이 샘플 애플리케이션을 테스트하려면 다음 단계를 확인하세요.
리소스 삭제
kubectl delete
를 사용하여 샘플 애플리케이션을 삭제합니다.
kubectl delete -f https://raw.githubusercontent.com/istio/istio/release-1.18/samples/bookinfo/platform/kube/bookinfo.yaml
클러스터에서 Istio 수신을 사용하지 않고 Istio 추가 기능을 사용하지 않으려면 다음 명령을 실행합니다.
az aks mesh disable --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}
주의
서비스 메시 추가 기능을 사용하지 않도록 설정하면 클러스터에서 Istio 컨트롤 플레인이 완전히 제거됩니다.
Istio CustomResourceDefintion
(CRD)는 기본적으로 삭제되지 않습니다. 정리하려면 다음을 사용합니다.
kubectl delete crd $(kubectl get crd -A | grep "istio.io" | awk '{print $1}')
az group delete
를 사용하여 클러스터 및 연결된 리소스를 삭제합니다.
az group delete --name ${RESOURCE_GROUP} --yes --no-wait
다음 단계
Azure Kubernetes Service