Azure Kubernetes Service를 위한 Istio 기반 서비스 메시 추가 기능 구성
오픈 소스 Istio는 MeshConfig를 사용하여 Istio 서비스 메시에 대한 메시 전체 설정을 정의합니다. AKS를 위한 Istio 기반 서비스 메시 추가 기능은 MeshConfig를 기반으로 빌드되며 다양한 속성을 지원, 허용, 차단으로 분류합니다.
이 문서에서는 Azure Kubernetes Service를 위한 Istio 기반 서비스 메시 추가 기능을 구성하는 방법과 이러한 구성에 적용할 수 있는 지원 정책을 안내합니다.
필수 조건
이 가이드에서는 설명서를 따라 AKS 클러스터에서 Istio 추가 기능을 사용하도록 설정했다고 가정합니다.
클러스터에 구성 설정
클러스터에 배포된 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" }
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
필드를 사용하여 완화할 수 있습니다.
Azure Kubernetes Service