Files
llm-wiki/raw/official-docs/runtime-health-istio-mesh-health-check.md
T

104 lines
9.0 KiB
Markdown

---
title: "Istio — Health Checking of Istio Services (mTLS and Probes)"
source_type: official-doc
url: https://istio.io/latest/docs/ops/configuration/mesh/app-health-check/
archive_url:
status: raw
confidence: high
tags: [ca-skeleton, runtime, health, lifecycle, istio, service-mesh, official-doc]
related_projects: [ca-skeleton-operational-contract]
related_branches: [feature-runtime-health-lifecycle-contract]
created: 2026-05-22
last_reviewed: 2026-05-27
---
# Istio — Health Checking of Istio Services (mTLS and Probes)
> Layer: `raw/official-docs/` — Istio 공식 문서 "Health Checking of Istio Services" 절 verbatim 발췌. ca-tmpl 대안 모델 (mesh-based health) baseline.
## Parent / 활용 branch (필수)
| Branch | 이 자료가 정당화하는 결정 |
|---|---|
| [[raw/branch-notes/feature-runtime-health-lifecycle-contract]] | ca-tmpl "application 이 직접 actuator health endpoint 책임" 채택의 **대안** (mesh-based health) trade-off baseline |
| [[raw/project-notes/ca-skeleton-operational-contract]] | Group G-D (Runtime health lifecycle) 대안 4 — Service mesh based health (Istio/Linkerd/Consul Connect) baseline |
## 컨텍스트
ca-tmpl `feature-runtime-health-lifecycle-contract`는 application이 직접 `/actuator/health/*`을 노출하는 모델을 채택. 본 source는 대안 — **service mesh가 health를 대신 수행**하는 모델 — 의 trade-off를 baseline으로 보존.
## 출처 / Source
- 원본 URL: https://istio.io/latest/docs/ops/configuration/mesh/app-health-check/
- 아카이브 URL: (미수집)
- 저자 / 조직: Istio Project
- 발행일: rolling docs (Istio 1.x reference)
- 마지막 확인일: 2026-05-27
## 핵심 인용 / Key quotes (verbatim)
> [§Liveness/Readiness probes — mTLS issue] "The health check requests to the `liveness-http` service are sent by Kubelet. This becomes a problem when mutual TLS is enabled, because the Kubelet does not have an Istio issued certificate. Therefore the health check requests will fail."
> [§Probe rewrite mechanism] "Istio solves both these problems by rewriting the application `PodSpec` readiness/liveness probe, so that the probe request is sent to the [sidecar agent]." (The sidecar "redirects the request to the application and strips the response body, only returning the response code.")
> [§Default enablement] "The rewriting of problematic probes is enabled by default in all built-in Istio [configuration profiles]."
> [§Disabling probe rewrite] Two methods to disable: annotate pods with `sidecar.istio.io/rewriteAppHTTPProbers: "false"` or install with `--set values.sidecarInjectorWebhook.rewriteAppHTTPProbe=false`.
> [§Command/exec probes] "The command approach works with no changes required" — exec-based probes operate independently of mTLS concerns.
## Claims Extracted / 추출된 주장
| Claim ID | Claim (이 자료가 직접 말하는 것) | Evidence quote | Strength | Applies to | Does not prove |
|---|---|---|---|---|---|
| RH-IST-C1 | mTLS 가 활성화된 Istio mesh 에서 **Kubelet 의 httpGet probe 가 실패** — Kubelet 이 Istio issued cert 를 보유하지 않기 때문 | [§Liveness/Readiness probes — mTLS issue] "The health check requests to the `liveness-http` service are sent by Kubelet. This becomes a problem when mutual TLS is enabled, because the Kubelet does not have an Istio issued certificate. Therefore the health check requests will fail." | `official-vendor-doc` | Istio mesh + mTLS 활성화 + httpGet probe | mTLS 가 default 로 STRICT 라는 뜻은 본 인용에 없음 (별도 PeerAuthentication 정책에 따름) |
| RH-IST-C2 | Istio 는 application `PodSpec` 의 readiness/liveness probe 를 rewrite 하여 **probe request 가 sidecar agent 로 전송**되도록 함. sidecar 는 application 으로 redirect 하고 response body 를 strip 한 뒤 response code 만 반환 | [§Probe rewrite mechanism] "Istio solves both these problems by rewriting the application `PodSpec` readiness/liveness probe, so that the probe request is sent to the [sidecar agent]." + "redirects the request to the application and strips the response body, only returning the response code." | `official-vendor-doc` | Istio 의 자동 probe rewrite 활성화 환경 | probe rewrite 가 application 자체의 deadlock 을 감지한다는 뜻은 아님 — sidecar→app HTTP probe 가 통과하면 healthy 로 판정 |
| RH-IST-C3 | probe rewrite 는 **모든 built-in Istio configuration profile 에서 default 활성화** | [§Default enablement] "The rewriting of problematic probes is enabled by default in all built-in Istio [configuration profiles]." | `official-vendor-doc` | Istio 기본 설치 | custom profile 에서도 자동 활성화된다는 뜻은 아님 |
| RH-IST-C4 | probe rewrite 비활성화 방법 2가지: (a) pod annotation `sidecar.istio.io/rewriteAppHTTPProbers: "false"`, (b) 설치 옵션 `--set values.sidecarInjectorWebhook.rewriteAppHTTPProbe=false` | [§Disabling probe rewrite] Two methods to disable: annotate pods with `sidecar.istio.io/rewriteAppHTTPProbers: "false"` or install with `--set values.sidecarInjectorWebhook.rewriteAppHTTPProbe=false`. | `official-vendor-doc` | probe rewrite 비활성화 운영 결정 | 비활성화 후 권장되는 대체 probe 종류는 본 인용 범위 밖 |
| RH-IST-C5 | **exec/command probe** 는 변경 없이 동작 — mTLS 와 무관하게 application container 내부에서 실행되므로 | [§Command/exec probes] "The command approach works with no changes required" — exec-based probes operate independently of mTLS concerns. | `official-vendor-doc` | Istio + mTLS 환경에서 health 구현 선택 | exec probe 가 httpGet probe 와 동일한 fine-grained dependency 분류를 제공한다는 뜻은 아님 |
## Usage Boundaries / 적용 경계
- **이 자료가 직접 증명하는 것**:
- `RH-IST-C1`: mTLS 환경에서 Kubelet httpGet probe 실패 원인
- `RH-IST-C2`: Istio probe rewrite 의 동작 메커니즘 (kubelet → sidecar → app)
- `RH-IST-C3`: rewrite 가 default 활성화
- `RH-IST-C4`: rewrite 비활성화의 정확한 두 가지 방법
- `RH-IST-C5`: exec probe 가 mTLS 영향 없이 동작
- **이 자료가 증명하지 않는 것**:
- "Istio 가 `STRICT` mTLS 를 default 사용" — 본 fetch 인용에 없음. 이전 노트의 해당 진술은 **검증 실패**. STRICT/PERMISSIVE 는 PeerAuthentication 정책에 따른 별도 결정.
- "`PERMISSIVE` PeerAuthentication 또는 `tcpSocket` probe 를 대안으로 권장" — 본 fetch 인용에 없음. 이전 노트의 해당 진술은 **검증 실패** (UNSUPPORTED). 별도 PeerAuthentication 문서로 확인 필요.
- probe rewrite 가 sidecar 자체의 health 까지 검증한다는 보장 (sidecar 가 healthy 면 통과하므로 false-healthy 가능성은 본 페이지로 직접 입증되지 않음 — interpretation)
- Linkerd / Consul Connect 의 동등 메커니즘 (별도 vendor doc 필요)
- **내 프로젝트에 적용하려면 추가 확인이 필요한 것**:
- ca-tmpl 이 mesh 환경으로 이동할 경우 `/actuator/health/liveness``/actuator/health/readiness` 의 정확한 path 가 probe rewrite 와 호환되는지
- mesh 환경에서 Spring Actuator Health Group (fine-grained DB/broker dependency 분류) 의 신호 손실 여부
- Istio 외 Linkerd / Consul Connect 사용 시 동등 mechanism
## 메모 / Notes (내 프로젝트 해석)
> 본 섹션은 자료 직접 인용 아님. ca-tmpl 결정 컨텍스트 해석.
- 적용 시나리오: Istio / Linkerd / Consul Connect 등 mTLS-by-default service mesh 환경.
- 장점:
- application code가 health endpoint를 직접 노출하지 않고 mesh가 대신 처리 (별도 healthIndicator 구현 불필요).
- mTLS 환경에서도 kubelet probe가 정상 동작.
- 단점:
- **probe가 sidecar에 묶이므로 application 자체의 deadlock을 감지하지 못할 수 있다.** sidecar는 정상이지만 app은 죽어있는 경우 false-healthy.
- probe 결과의 정확한 의미가 흐려진다 — "sidecar가 살아있다 vs. application이 살아있다"의 구분이 불분명.
- Spring Actuator Health Group의 fine-grained dependency 분류(DB, broker 등)와 결합되지 않으면 의미 손실.
- ca-tmpl과의 차이: ca-tmpl은 **application이 직접 actuator health endpoint를 책임지는** 모델. mesh-based health는 trade-off로 알아두지만 ca-tmpl default가 아님.
- testability 영향: mesh 환경에서는 contract test에 sidecar 시뮬레이션이 필요해 부담.
## Related / 관련
- 같은 주제 다른 official-doc:
- (Kubernetes probe spec — 별도 추가 후보)
- 같은 주제 company-tech-blog:
- [[raw/company-tech-blogs/runtime-health-datadog-engineering-graceful-shutdown]] (shutdown 측면, mesh 와 별개)
- 적용 branch / contract:
- [[raw/branch-notes/feature-runtime-health-lifecycle-contract]]
- canonical contract: [[raw/project-notes/ca-skeleton-operational-contract]] (runtime health lifecycle section, 예정)
- 대안 그룹: **Group G-D — Runtime health lifecycle**, 대안 4 — Service mesh based health
- 인용하는 wiki: (미작성)