다음을 통해 공유


Istio 서비스 메시 추가 기능의 일반적인 문제 해결

이 문서에서는 AKS(Microsoft Azure Kubernetes Service)에 대한 Istio 서비스 메시 추가 기능과 관련된 문제를 해결하기 위한 일반적인 전략(사용 kubectlistioctl및 기타 도구)에 대해 설명합니다. 이 문서에서는 가능한 오류 메시지 목록, 오류 발생 이유 및 이러한 오류를 해결하기 위한 권장 사항도 제공합니다.

필수 조건

문제 해결 검사 목록: kubectl 사용

다음 문제 해결 단계에서는 Istio 디먼(Istiod)에서 중단된 Pod 또는 오류를 디버그하는 데 도움이 되는 다양한 kubectl 명령을 사용합니다.

1단계: Istiod Pod 로그 가져오기

다음 kubectl 로그 명령을 실행하여 Istiod Pod 로그를 가져옵니다.

kubectl logs --selector app=istiod --namespace aks-istio-system

2단계: Pod 반송(삭제)

Pod를 다시 시작해야 하는 충분한 이유가 있을 수 있습니다. Istiod는 배포이므로 kubectl delete 명령을 실행하여 Pod를 삭제하는 것이 안전합니다.

kubectl delete pods <istio-pod> --namespace aks-istio-system

Istio Pod는 배포에 의해 관리됩니다. 직접 삭제한 후 자동으로 다시 만들어지고 다시 배포됩니다. 따라서 Pod를 삭제하는 것은 Pod를 다시 시작하는 다른 방법입니다.

참고 항목

또는 다음 kubectl 롤아웃 다시 시작 명령을 실행하여 배포를 직접 다시 시작할 수 있습니다.

kubectl rollout restart deployment <istiod-asm-revision> --namespace aks-istio-system

3단계: 리소스 상태 확인

Istiod가 예약되지 않았거나 Pod가 응답하지 않는 경우 배포 및 복제본 집합의 상태를 확인할 수 있습니다. 이렇게 하려면 kubectl get 명령을 실행합니다.

kubectl get <resource-type> [[--selector app=istiod] | [<resource-name>]]

현재 리소스 상태는 출력의 끝 부분에 나타납니다. 출력에는 컨트롤러 루프와 연결된 이벤트도 표시될 수 있습니다.

4단계: 사용자 지정 리소스 정의 형식 가져오기

Istio에서 사용하는 CRD(사용자 지정 리소스 정의) 유형을 보려면 다음 kubectl get 명령을 실행합니다.

kubectl get crd | grep istio

특정 CRD를 기반으로 하는 모든 리소스 이름을 나열하려면 다음 kubectl get 명령을 실행합니다.

kubectl get <crd-type> --all-namespaces

5단계: Istiod Pod 목록 보기

Istiod Pod 목록을 보려면 다음 kubectl get 명령을 실행합니다.

kubectl get pod --namespace aks-istio-system --output yaml

6단계: Envoy 구성에 대한 자세한 정보 가져오기

Pod 간에 연결 문제가 있는 경우 Envoy의 관리 포트에 대해 다음 kubectl exec 명령을 실행하여 Envoy 구성에 대한 자세한 정보를 가져옵니다.

kubectl exec --namespace <pod-namespace> \
    "$(kubectl get pods \
        --namespace <pod-namespace> \
        --selector app=sleep \
        --output jsonpath='{.items[0].metadata.name}')" \
    --container sleep \
-- curl -s localhost:15000/clusters

7단계: 원본 및 대상 사이드카에 대한 사이드카 로그 가져오기

다음 kubectl logs 명령을 두 번 실행하여 원본 및 대상 사이드카에 대한 사이드카 로그를 검색합니다(원본 Pod의 경우 처음, 대상 Pod에 대해 두 번째로 실행).

kubectl logs <pod-name> --namespace <pod-namespace> --container istio-proxy

문제 해결 검사 목록: istioctl 사용

다음 문제 해결 단계에서는 다양한 istioctl 명령을 실행하여 정보를 수집하고 메시 환경을 디버그하는 방법을 설명합니다.

Istio의 AKS 추가 기능 설치를 가리키려면 모든 istioctl 명령을 플래그와 --istioNamespace aks-istio-system 함께 실행해야 합니다.

Warning

일부 istioctl 명령은 모든 사이드카에 요청을 보냅니다.

참고 항목

시작하기 전에 대부분의 istioctl 명령을 사용하려면 컨트롤 플레인 수정 버전을 알아야 합니다. Istiod 배포 또는 Pod의 접미사에서 이 정보를 얻거나 다음 istioctl 태그 목록 명령을 실행할 수 있습니다.

istioctl tag list

1단계: Istio가 올바르게 설치되었는지 확인

올바른 Istio 추가 기능 설치가 있는지 확인하려면 다음 istioctl verify-install 명령을 실행합니다.

istioctl verify-install --istioNamespace aks-istio-system --revision <tag>

2단계: 네임스페이스 분석

모든 네임스페이스를 분석하거나 특정 네임스페이스를 분석하려면 다음 istioctl analyze 명령을 실행합니다.

istioctl analyze --istioNamespace aks-istio-system \
    --revision <tag> \
    [--all-namespaces | --namespace <namespace-name>] \
    [--failure-threshold {Info | Warning | Error}]

3단계: 프록시 상태 가져오기

프록시 상태를 검색하려면 다음 istioctl proxy-status 명령을 실행합니다.

istioctl proxy-status pod/<pod-name> \
    --istioNamespace aks-istio-system \
    --revision <tag> \
    --namespace <pod-namespace>

4단계: 프록시 구성 다운로드

프록시 구성을 다운로드하려면 다음 istioctl proxy-config all 명령을 실행합니다.

istioctl proxy-config all <pod-name> \
    --istioNamespace aks-istio-system \
    --namespace <pod-namespace> \
    --output json

참고 항목

명령의 변형을 all istioctl proxy-config 사용하는 대신 다음 변형 중 하나를 사용할 수 있습니다.

5단계: 삽입 상태 확인

리소스의 주입 상태를 확인하려면 다음 istioctl 실험적 check-inject 명령을 실행합니다.

istioctl experimental check-inject --istioNamespace aks-istio-system \
    --namespace <pod-namespace> \
    --labels <label-selector> | <pod-name> | deployment/<deployment-name>

6단계: 전체 버그 보고서 가져오기

전체 버그 보고서에는 가장 자세한 정보가 포함되어 있습니다. 그러나 이 보고서를 실행하는 것은 모든 Pod를 포함하기 때문에 큰 클러스터에서 시간이 많이 걸릴 수 있습니다. 버그 보고서를 특정 네임스페이스로 제한할 수 있습니다. 보고서를 특정 배포, Pod 또는 레이블 선택기로 제한할 수도 있습니다.

버그 보고서를 검색하려면 다음 istioctl 버그 보고서 명령을 실행합니다.

istioctl bug-report --istioNamespace aks-istio-system \
    [--include <namespace-1>[, <namespace-2>[, ...]]]

검사 목록 문제 해결: 기타 문제

1단계: 리소스 사용 문제 해결

Envoy에서 높은 메모리 사용량이 발생하는 경우 Envoy 설정에서 통계 데이터 수집다시 확인합니다. MeshConfig를 통해 Istio 메트릭을 사용자 지정하는 경우 특정 메트릭의 카디널리티가 높을 수 있으므로 더 높은 메모리 공간을 만들 수 있습니다. 동시성과 같은 MeshConfig의 다른 필드는 CPU 사용량에 영향을 줍니다. 신중하게 구성해야 합니다.

기본적으로 Istio는 클러스터에 있는 모든 서비스에 대한 정보를 모든 Envoy 구성에 추가합니다. 사이드카는 특정 네임스페이스 내에 있는 워크로드에만 이 추가의 범위를 제한할 수 있습니다. 자세한 내용은 이 Istio 프록시 사이드카 메모리 문제 조심하세요.

예를 들어 네임스페이스의 다음 정의 aks-istio-systemSidecar 특정 애플리케이션과 동일한 네임스페이스 내의 메시 aks-istio-system 및 기타 워크로드에 대한 모든 프록시에 대한 Envoy 구성을 제한합니다.

apiVersion: networking.istio.io/v1alpha3
kind: Sidecar
metadata:
  name: sidecar-restrict-egress
  namespace: aks-istio-system  # Needs to be deployed in the root namespace.
spec:
  egress:
  - hosts:
    - "./*"
    - "aks-istio-system/*"

MeshConfig에서 Istio discoverySelectors 옵션을 사용해 볼 수도 있습니다. 이 discoverySelectors 옵션은 Kubernetes 선택기의 배열을 포함하며, 클러스터의 모든 네임스페이스와 달리 Istiod의 인식을 특정 네임스페이스로 제한할 수 있습니다. 자세한 내용은 검색 선택기를 사용하여 Istio 서비스 메시에 대한 네임스페이스 구성을 참조하세요.

2단계: 트래픽 및 보안 구성 오류 문제 해결

Istio 사용자가 자주 발생하는 일반적인 트래픽 관리 및 보안 구성 문제를 해결하려면 Istio 웹 사이트에서 트래픽 관리 문제보안 문제를 참조하세요.

사이드카 주입, 관찰 가능성 및 업그레이드와 같은 다른 문제에 대한 논의 링크는 Istio 설명서 사이트의 일반적인 문제를 참조하세요.

3단계: CoreDNS 오버로드 방지

CoreDNS 오버로드와 관련된 문제는 Istio MeshConfig 정의의 dnsRefreshRate 필드와 같은 특정 Istio DNS 설정을 변경해야 할 수 있습니다.

4단계: 포드 및 사이드카 경주 조건 수정

Envoy 사이드카가 시작되기 전에 애플리케이션 Pod가 시작되면 애플리케이션이 응답하지 않거나 다시 시작될 수 있습니다. 이 문제를 방지하는 방법에 대한 지침은 istio-proxy가 준비되지 않은 경우 Pod 또는 컨테이너가 네트워크 문제로 시작하는 것을 참조하세요. 특히 MeshConfig 필드를 설정 holdApplicationUntilProxyStarts defaultConfig 하면 이러한 경합 상태를 방지할 true 수 있습니다.

5단계: 아웃바운드 트래픽에 HTTP 프록시를 사용할 때 서비스 항목 구성

클러스터에서 아웃바운드 인터넷 액세스를 위해 HTTP 프록시를 사용하는 경우 서비스 항목을 구성해야 합니다. 자세한 내용은 Azure Kubernetes Service의 HTTP 프록시 지원을 참조하세요.

오류 메시지

다음 표에는 가능한 오류 메시지 목록(추가 기능 배포, 수신 게이트웨이 사용 및 업그레이드 수행), 오류가 발생한 이유 및 오류 해결을 위한 권장 사항이 포함되어 있습니다.

Error 이유 권장 사항
Azure service mesh is not supported in this region 이 기능은 미리 보기 중에는 지역에서 사용할 수 없습니다(퍼블릭 클라우드에서는 사용할 수 있지만 소버린 클라우드에서는 사용할 수 없음). 지원되는 지역의 기능에 대한 공개 설명서를 참조하세요.
Missing service mesh mode: {} 관리되는 클러스터 요청의 서비스 메시 프로필에서 모드 속성을 설정하지 않았습니다. API 요청의 managedCluster ServiceMeshProfile 필드에서 속성을 Istio.로 설정합니다mode.
Invalid istio ingress mode: {} 서비스 메시 프로필 내에서 수신을 추가할 때 수신 모드에 잘못된 값을 설정합니다. API 요청의 수신 모드를 둘 중 하나 External 또는 Internal.로 설정합니다.
Too many ingresses for type: {}. Only {} ingress gateway are allowed 클러스터에서 너무 많은 수신을 만들려고 했습니다. 클러스터에서 하나 이상의 외부 수신 및 하나의 내부 수신을 만듭니다.
Istio profile is missing even though Service Mesh mode is Istio Istio 프로필을 제공하지 않고 Istio 추가 기능을 사용하도록 설정했습니다. Istio 추가 기능을 사용하도록 설정하면 Istio 프로필 및 특정 수정 버전에 대한 구성 요소별(수신 게이트웨이, 플러그 인 CA) 정보를 지정합니다.
Istio based Azure service mesh is incompatible with feature %s 현재 Istio 추가 기능과 호환되지 않는 다른 확장, 추가 기능 또는 기능을 사용하려고 했습니다(예: Open Service Mesh). Istio 추가 기능을 사용하도록 설정하기 전에 먼저 다른 기능을 사용하지 않도록 설정하고 해당 리소스를 모두 정리합니다.
ServiceMeshProfile is missing required parameters: %s for plugin certificate authority 플러그 인 CA에 필요한 매개 변수를 모두 제공하지 않았습니다. 플러그 인 CA(인증 기관) 기능에 필요한 모든 매개 변수를 제공합니다(자세한 내용은 플러그 인 CA 인증서를 사용하여 Istio 기반 서비스 메시 추가 기능 설정 참조).
AzureKeyvaultSecretsProvider addon is required for Azure Service Mesh plugin certificate authority feature 플러그 인 CA를 사용하기 전에는 AKS 비밀 저장소 CSI 드라이버 추가 기능을 사용하도록 설정하지 않았습니다. 플러그 인 CA 기능을 사용하기 전에 Azure Key Vault 를 설정합니다.
'KeyVaultId': '%s' is not a valid Azure keyvault resource identifier. Please make sure that the format matches '/subscriptions//resourceGroups//providers/Microsoft.KeyVault/vaults/' 잘못된 AKS 리소스 ID를 사용했습니다. 플러그 인 CA 기능에 대한 유효한 Azure Key Vault ID를 설정하려면 오류 메시지에 언급된 형식을 참조하세요.
Kubernetes version is missing in orchestrator profile 요청에 Kubernetes 버전이 없습니다. 따라서 버전 호환성 검사를 수행할 수 없습니다. Istio 추가 기능 업그레이드 작업에서 Kubernetes 버전을 제공해야 합니다.
Service mesh revision %s is not compatible with cluster version %s. To find information about mesh-cluster compatibility, use 'az aks mesh get-upgrades' 현재 Kubernetes 클러스터 버전과 호환되지 않는 Istio 추가 기능 수정 버전을 사용하도록 설정하려고 했습니다. az aks mesh get-upgrades Azure CLI 명령을 사용하여 현재 클러스터에 사용할 수 있는 Istio 추가 기능 수정 버전을 알아봅니다.
Kubernetes version %s not supported. Please upgrade to a supported cluster version first. To find compatibility information, use 'az aks mesh get-upgrades' 지원되지 않는 Kubernetes 버전을 사용하고 있습니다. 지원되는 Kubernetes 버전으로 업그레이드합니다.
ServiceMeshProfile revision field must not be empty 수정 버전을 지정하지 않고 Istio 추가 기능을 업그레이드하려고 했습니다. 수정 버전 및 기타 모든 매개 변수를 지정합니다(자세한 내용은 부 버전 업그레이드 참조).
Request exceeds maximum allowed number of revisions (%d) 이미 (%d) 수정 버전이 설치되어 있더라도 업그레이드 작업을 수행하려고 했습니다. 다른 수정 버전으로 업그레이드하기 전에 업그레이드 작업을 완료하거나 롤백합니다.
Mesh upgrade is in progress. Please complete or roll back the current upgrade before attempting to retrieve versioning and compatibility information 현재 업그레이드 작업을 완료하거나 롤백하기 전에 수정 및 호환성 정보에 액세스하려고 했습니다. 수정 및 호환성 정보를 검색하기 전에 현재 업그레이드 작업을 완료하거나 롤백합니다.

참조

타사 정보 고지 사항

이 문서에 나와 있는 다른 공급업체 제품은 Microsoft와 무관한 회사에서 제조한 것입니다. Microsoft는 이들 제품의 성능이나 안정성에 관하여 명시적이든 묵시적이든 어떠한 보증도 하지 않습니다.

도움을 요청하십시오.

질문이 있거나 도움이 필요한 경우 지원 요청을 생성하거나Azure 커뮤니티 지원에 문의하세요. Azure 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.