다음을 통해 공유


Azure Kubernetes Service를 위한 Istio 기반 서비스 메시 추가 기능 구성

오픈 소스 Istio는 MeshConfig를 사용하여 Istio 서비스 메시에 대한 메시 전체 설정을 정의합니다. AKS를 위한 Istio 기반 서비스 메시 추가 기능은 MeshConfig를 기반으로 빌드되며 다양한 속성을 지원, 허용, 차단으로 분류합니다.

이 문서에서는 Azure Kubernetes Service를 위한 Istio 기반 서비스 메시 추가 기능을 구성하는 방법과 이러한 구성에 적용할 수 있는 지원 정책을 안내합니다.

필수 조건

이 가이드에서는 설명서를 따라 AKS 클러스터에서 Istio 추가 기능을 사용하도록 설정했다고 가정합니다.

클러스터에 구성 설정

  1. 클러스터에 배포된 Istio 수정 버전을 확인합니다.

    az aks show --name $CLUSTER --resource-group $RESOURCE_GROUP --query 'serviceMeshProfile'
    

    출력

    {
      "istio": {
          "certificateAuthority": null,
          "components": {
          "egressGateways": null,
          "ingressGateways": null
          },
          "revisions": [
          "asm-1-18"
          ]
      },
      "mode": "Istio"
    }
    
  2. aks-istio-system 네임스페이스에 istio-shared-configmap-<asm-revision> 이름으로 ConfigMap을 만듭니다. 예를 들어, 클러스터가 메시의 asm-1-18 수정 버전을 실행 중인 경우 ConfigMap의 이름을 istio-shared-configmap-asm-1-18로 지정해야 합니다. 메시 구성은 메시 아래의 데이터 섹션 내에서 제공되어야 합니다.

    예시:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: istio-shared-configmap-asm-1-18
      namespace: aks-istio-system
    data:
      mesh: |-
        accessLogFile: /dev/stdout
        defaultConfig:
          holdApplicationUntilProxyStarts: true
    

    defaultConfig 아래의 값은 Envoy 사이드카 프록시에 적용되는 메시 전체 설정입니다.

주의

Istio 추가 기능을 사용하도록 설정하면 클러스터의 aks-istio-system 네임스페이스에 기본 ConfigMap(예: 수정 asm-1-18에 대한 istio-asm-1-18)이 만들어집니다. 그러나 이 기본 ConfigMap은 관리되는 Istio 추가 기능에 의해 조정되므로 사용자는 이 ConfigMap을 직접 편집해서는 안 됩니다. 대신, 사용자는 aks-istio-system 네임스페이스에서 수정 버전별 Istio 공유 ConfigMap(예: 수정 버전 asm-1-18의 경우 istio-shared-configmap-asm-1-18)을 만들어야 합니다. 그러면 Istio 컨트롤 플레인은 이를 기본 ConfigMap과 병합하며 기본 설정이 우선 적용됩니다.

메시 구성 및 업그레이드

Istio에 대한 카나리아 업그레이드를 수행할 때 카나리아 업그레이드를 시작하기 전에 aks-istio-system 네임스페이스에 새 수정 버전에 대한 별도의 ConfigMap을 만들어야 합니다. 이렇게 하면 새 수정 버전의 컨트롤 플레인이 클러스터에 배포될 때 구성을 사용할 수 있습니다. 예를 들어, 메시를 asm-1-18에서 asm-1-19로 업그레이드하는 경우 istio-shared-configmap-asm-1-18의 변경 내용을 복사하여 aks-istio-system 네임스페이스에 istio-shared-configmap-asm-1-19라는 새 ConfigMap을 만들어야 합니다.

업그레이드가 완료되거나 롤백된 후 클러스터에서 제거된 수정 버전의 ConfigMap을 삭제할 수 있습니다.

허용되는, 지원되는 및 차단된 MeshConfig 값

MeshConfig 필드는 , supported또는 blocked.로 allowed분류됩니다. 이러한 범주에 대한 자세한 내용은 Istio 추가 기능 및 구성 옵션에 대한 지원 정책을 참조하세요.

메시 구성 및 허용되거나 지원되는 필드 목록은 수정 버전 전반에 걸쳐 추가되거나 제거된 필드를 설명하기 위한 수정 버전입니다. 허용된 필드의 전체 목록과 허용된 목록 내에서 지원되는 필드 또는 지원되지 않는 필드는 아래 표에 제공됩니다. 새 메시 수정 버전이 제공되면 필드의 허용 및 지원 분류에 대한 변경 내용이 이 표에 기록됩니다.

MeshConfig

다음 표에서 다루지 않는 오픈 소스 MeshConfig 참조 설명서가 있는 필드는 차단됩니다. 예를 들어, configSources는 차단되었습니다.

필드 지원/허용된 참고
proxyListenPort 허용됨 -
proxyInboundListenPort 허용됨 -
proxyHttpPort 허용됨 -
connectTimeout 허용됨 DestinationRule에서 구성 가능
tcpKeepalive 허용됨 DestinationRule에서 구성 가능
defaultConfig 지원 여부 ProxyConfig를 구성하는 데 사용됨
outboundTrafficPolicy 지원 여부 사이드카 CR에서도 구성 가능
extensionProviders 허용됨 -
defaultProviders 허용됨 -
accessLogFile 지원 여부 이 필드는 액세스 로그 생성을 다룹니다. 로그 수집 및 쿼리에 대한 관리 환경은 AKS의 Azure Monitor Container Insights를 참조하세요. 원격 분석 API를 통해 액세스 로깅을 구성하는 것이 좋습니다.
accessLogFormat 지원 여부 이 필드는 액세스 로그 생성을 다룹니다. 로그 수집 및 쿼리에 대한 관리 환경은 AKS에서 Azure Monitor Container Insights를 참조하세요.
accessLogEncoding 지원 여부 이 필드는 액세스 로그 생성을 다룹니다. 로그 수집 및 쿼리에 대한 관리 환경은 AKS에서 Azure Monitor Container Insights를 참조하세요.
enableTracing 허용됨 원격 분석 API를 통해 추적을 구성하는 것이 좋습니다.
enableEnvoyAccessLogService 지원 여부 이 필드는 액세스 로그 생성을 다룹니다. 로그 수집 및 쿼리에 대한 관리 환경은 AKS에서 Azure Monitor Container Insights를 참조하세요.
disableEnvoyListenerLog 지원 여부 이 필드는 액세스 로그 생성을 다룹니다. 로그 수집 및 쿼리에 대한 관리 환경은 AKS에서 Azure Monitor Container Insights를 참조하세요.
trustDomain 허용됨 -
trustDomainAliases 허용됨 -
caCertificates 허용됨 DestinationRule에서 구성 가능
defaultServiceExportTo 허용됨 ServiceEntry에서 구성 가능
defaultVirtualServiceExportTo 허용됨 VirtualService에서 구성 가능
defaultDestinationRuleExportTo 허용됨 DestinationRule에서 구성 가능
localityLbSetting 허용됨 DestinationRule에서 구성 가능
dnsRefreshRate 허용됨 -
h2UpgradePolicy 허용됨 DestinationRule에서 구성 가능
enablePrometheusMerge 허용됨 -
discoverySelectors 지원 여부 -
pathNormalization 허용됨 -
defaultHttpRetryPolicy 허용됨 VirtualService에서 구성 가능
serviceSettings 허용됨 -
meshMTLS 허용됨 -
tlsDefaults 허용됨 -
ingressService 허용됨 istio 수신 컨트롤러에 사용되는 Kubernetes 서비스의 이름입니다.
ingressSelector 허용됨 수신 컨트롤러로 사용할 게이트웨이 배포를 정의합니다. 이 필드는 Gateway.selector 필드에 해당하며 istio: INGRESS_SELECTOR로 설정됩니다.

ProxyConfig(meshConfig.defaultConfig)

다음 표에서 다루지 않는 오픈 소스 MeshConfig 참조 설명서에 있는 필드는 차단됩니다.

필드 지원/허용된 참고
tracingServiceName 허용됨 원격 분석 API를 통해 추적을 구성하는 것이 좋습니다.
drainDuration 지원 여부 -
statsUdpAddress 허용됨 -
proxyAdminPort 허용됨 -
tracing 허용됨 원격 분석 API를 통해 추적을 구성하는 것이 좋습니다.
동시성 지원 여부 -
envoyAccessLogService 허용됨 원격 분석 API를 통해 추적을 구성하는 것이 좋습니다.
envoyMetricsService 허용됨 원격 분석 API를 통해 메트릭 수집을 구성하는 것이 좋습니다.
proxyMetadata 허용됨 -
statusPort 허용됨 -
extraStatTags 허용됨 -
proxyStatsMatcher 허용됨 -
terminationDrainDuration 지원 여부 -
meshId 허용됨 -
holdApplicationUntilProxyStarts 지원 여부 -
caCertificatesPem 허용됨 -
privateKeyProvider 허용됨 -

주의

구성의 지원 범위: Mesh 구성을 사용하면 Istio 추가 기능으로 Zipkin 또는 Apache Skywalking의 자체 관리형 인스턴스와 같은 확장 공급자를 구성할 수 있습니다. 그러나 이러한 확장 공급자는 Istio 추가 기능의 지원 범위를 벗어납니다. 확장 도구와 관련된 모든 문제는 Istio 추가 기능의 지원 범위를 벗어납니다.

일반적인 오류 및 문제 해결 팁

  • MeshConfig가 탭 대신 공백으로 들여쓰여 있는지 확인합니다.
  • 수정 버전별 공유 ConfigMap(예: istio-shared-configmap-asm-1-18)만 편집하고 기본 ConfigMap(예: istio-asm-1-18)은 편집하려고 시도하지 않는지 확인합니다.
  • ConfigMap은 istio-shared-configmap-<asm-revision> 이름을 따라야 하며 aks-istio-system 네임스페이스에 있어야 합니다.
  • 모든 MeshConfig 필드의 철자가 올바른지 확인합니다. 인식되지 않거나 허용 목록에 포함되지 않은 경우 허용 제어에서는 이러한 구성을 거부합니다.
  • 카나리아 업그레이드를 수행할 때 수정 버전별 ConfigMap을 확인하여 클러스터에 배포된 수정 버전에 대한 구성이 있는지 확인합니다.
  • accessLogging과 같은 특정 MeshConfig 옵션은 Envoy의 리소스 사용량을 증가시킬 수 있으며, 이러한 설정 중 일부를 사용하지 않도록 설정하면 Istio 데이터 평면 리소스 사용률이 완화될 수 있습니다. 또한 Istiod 및 Envoy의 메모리 사용량을 줄이는 데 도움이 되도록 MeshConfig의 discoverySelectors 필드를 사용하는 것이 좋습니다.
  • MeshConfig의 concurrency 필드가 잘못 구성되어 0으로 설정된 경우 Envoy가 모든 CPU 코어를 사용하게 됩니다. 대신 이 필드가 설정되지 않으면 실행할 작업자 스레드 수가 CPU 요청/한도에 따라 자동으로 결정됩니다.
  • 애플리케이션이 Envoy보다 먼저 시작되는 Pod 및 사이드카 경합 상태는 MeshConfig의 holdApplicationUntilProxyStarts 필드를 사용하여 완화할 수 있습니다.