다음을 통해 공유


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 참조를 참조하세요.

수정 버전 선택

수정 버전을 지정하지 않고 추가 기능을 사용하도록 설정하면 지원되는 기본 수정 버전이 설치됩니다.

수정 버전을 지정하려면 다음 단계를 수행합니다.

  1. az aks mesh get-revisions 명령을 사용하여 지역의 여러 AKS 클러스터 버전에 사용할 수 있는 수정 버전을 확인합니다.
  2. 사용 가능한 수정 버전에 따라 메시 설치에 사용하는 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

다음 단계