9.0 KiB
title, source_type, url, archive_url, status, confidence, tags, related_projects, related_branches, created, last_reviewed
| title | source_type | url | archive_url | status | confidence | tags | related_projects | related_branches | created | last_reviewed | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Istio — Health Checking of Istio Services (mTLS and Probes) | official-doc | https://istio.io/latest/docs/ops/configuration/mesh/app-health-check/ | raw | high |
|
|
|
2026-05-22 | 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-httpservice 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
PodSpecreadiness/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 가
STRICTmTLS 를 default 사용" — 본 fetch 인용에 없음. 이전 노트의 해당 진술은 검증 실패. STRICT/PERMISSIVE 는 PeerAuthentication 정책에 따른 별도 결정. - "
PERMISSIVEPeerAuthentication 또는tcpSocketprobe 를 대안으로 권장" — 본 fetch 인용에 없음. 이전 노트의 해당 진술은 검증 실패 (UNSUPPORTED). 별도 PeerAuthentication 문서로 확인 필요. - probe rewrite 가 sidecar 자체의 health 까지 검증한다는 보장 (sidecar 가 healthy 면 통과하므로 false-healthy 가능성은 본 페이지로 직접 입증되지 않음 — interpretation)
- Linkerd / Consul Connect 의 동등 메커니즘 (별도 vendor doc 필요)
- "Istio 가
- 내 프로젝트에 적용하려면 추가 확인이 필요한 것:
- 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
- ca-tmpl 이 mesh 환경으로 이동할 경우
메모 / 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: (미작성)