# DNS resolution 재현 — variant=logical mode=mode1 **Date:** 2026-07-01_193800 · **ns:** dns-lab · **cluster:** homelab · backend-a=10.250.147.30 backend-b=10.250.27.55 > 초안(construction 로그). 기대 vs 실제 판정표가 아니라 '무엇을 어떻게 했고 그때 무엇이 보였나' 기록. ## 1. 변형 적용 적용: SE=logical, VS=80to443(no-retry), DR=tls(no-outlier) ## 2. BEFORE (gslb -> backend-a, load 전) ### before ``` dig : 10.250.147.30 -- endpoints -- ENDPOINT STATUS OUTLIER CHECK CLUSTER 10.250.147.30:443 HEALTHY OK outbound|443||gslb.lab.internal -- stats -- [cluster|443 cx] .membership_change: 4 .upstream_cx_active: 0 .upstream_cx_connect_fail: 0 .upstream_cx_destroy: 4 .upstream_cx_destroy_local: 4 .upstream_cx_destroy_local_with_active_rq: 0 .upstream_cx_destroy_remote: 0 .upstream_cx_destroy_remote_with_active_rq: 0 .upstream_cx_destroy_with_active_rq: 0 .upstream_cx_total: 4 [endpoint|443 cx] 10.250.147.30:443::cx_active::0 10.250.147.30:443::cx_total::0 10.250.147.30:443::rq_total::0 10.250.147.30:443::health_flags::healthy ``` ## 3. keepalive 롱세션 유지 중 flip(A→B) — 전/후를 load 중에 스냅샷 ### 3a. MID-PRE-FLIP (load 중; 연결이 backend-a 에 워밍됨) ### mid_pre ``` dig : 10.250.147.30 -- endpoints -- ENDPOINT STATUS OUTLIER CHECK CLUSTER 10.250.147.30:443 HEALTHY OK outbound|443||gslb.lab.internal -- stats -- [cluster|443 cx] .membership_change: 4 .upstream_cx_active: 2 .upstream_cx_connect_fail: 0 .upstream_cx_destroy: 4 .upstream_cx_destroy_local: 4 .upstream_cx_destroy_local_with_active_rq: 0 .upstream_cx_destroy_remote: 0 .upstream_cx_destroy_remote_with_active_rq: 0 .upstream_cx_destroy_with_active_rq: 0 .upstream_cx_total: 6 [endpoint|443 cx] 10.250.147.30:443::cx_active::2 10.250.147.30:443::cx_total::2 10.250.147.30:443::rq_total::68 10.250.147.30:443::health_flags::healthy ``` >> FLIP A→B @ 19:38:18 ### 3b. MID-POST-FLIP (load 여전히 진행 중 — 3a 대비 cx_destroy 델타가 정체) ### mid_post ``` dig : 10.250.27.55 -- endpoints -- ENDPOINT STATUS OUTLIER CHECK CLUSTER 10.250.27.55:443 HEALTHY OK outbound|443||gslb.lab.internal -- stats -- [cluster|443 cx] .membership_change: 4 .upstream_cx_active: 2 .upstream_cx_connect_fail: 0 .upstream_cx_destroy: 4 .upstream_cx_destroy_local: 4 .upstream_cx_destroy_local_with_active_rq: 0 .upstream_cx_destroy_remote: 0 .upstream_cx_destroy_remote_with_active_rq: 0 .upstream_cx_destroy_with_active_rq: 0 .upstream_cx_total: 6 [endpoint|443 cx] 10.250.27.55:443::cx_active::2 10.250.27.55:443::cx_total::2 10.250.27.55:443::rq_total::152 10.250.27.55:443::health_flags::healthy ``` ``` -- fortio(keepalive) -- Sockets used: 2 (for perfect keepalive, would be 2) Code 200 : 320 (100.0 %) All done 320 calls (plus 2 warmup) 1.122 ms avg, 8.0 qps ``` ### who= 타임라인 (netshoot; flip 전후 backend 전환, ~1s 간격 샘플) ``` 10:38:10 who=backend-a code=200 10:38:11 who=backend-a code=200 10:38:12 who=backend-a code=200 10:38:13 who=backend-a code=200 10:38:13 who=backend-a code=200 10:38:14 who=backend-a code=200 10:38:15 who=backend-a code=200 10:38:16 who=backend-a code=200 10:38:17 who=backend-a code=200 10:38:18 who=backend-a code=200 10:38:18 who=backend-a code=200 10:38:19 who=backend-a code=200 10:38:20 who=backend-a code=200 10:38:21 who=backend-a code=200 10:38:22 who=backend-a code=200 10:38:22 who=backend-a code=200 10:38:23 who=backend-a code=200 10:38:24 who=backend-a code=200 10:38:25 who=backend-a code=200 10:38:26 who=backend-a code=200 10:38:27 who=backend-a code=200 10:38:27 who=backend-a code=200 10:38:28 who=backend-a code=200 10:38:29 who=backend-a code=200 10:38:30 who=backend-a code=200 10:38:31 who=backend-a code=200 10:38:32 who=backend-a code=200 10:38:32 who=backend-a code=200 10:38:33 who=backend-a code=200 10:38:34 who=backend-a code=200 10:38:35 who=backend-a code=200 10:38:36 who=backend-a code=200 10:38:36 who=backend-a code=200 10:38:37 who=backend-a code=200 10:38:38 who=backend-a code=200 10:38:39 who=backend-a code=200 10:38:40 who=backend-a code=200 10:38:41 who=backend-a code=200 10:38:41 who=backend-a code=200 10:38:42 who=backend-a code=200 10:38:43 who=backend-a code=200 10:38:44 who=backend-a code=200 10:38:45 who=backend-a code=200 10:38:45 who=backend-a code=200 10:38:46 who=backend-a code=200 10:38:47 who=backend-a code=200 10:38:48 who=backend-a code=200 10:38:49 who=backend-a code=200 ``` ## 4. AFTER (load 종료 후) ### after ``` dig : 10.250.27.55 -- endpoints -- ENDPOINT STATUS OUTLIER CHECK CLUSTER 10.250.27.55:443 HEALTHY OK outbound|443||gslb.lab.internal -- stats -- [cluster|443 cx] .membership_change: 4 .upstream_cx_active: 2 .upstream_cx_connect_fail: 0 .upstream_cx_destroy: 4 .upstream_cx_destroy_local: 4 .upstream_cx_destroy_local_with_active_rq: 0 .upstream_cx_destroy_remote: 0 .upstream_cx_destroy_remote_with_active_rq: 0 .upstream_cx_destroy_with_active_rq: 0 .upstream_cx_total: 6 [endpoint|443 cx] 10.250.27.55:443::cx_active::2 10.250.27.55:443::cx_total::2 10.250.27.55:443::rq_total::322 10.250.27.55:443::health_flags::healthy ``` ## 5. 읽는 법 - STRICT_DNS 기대: 3a→3b 에서 endpoint A→B 교체, membership_change +1, **upstream_cx_destroy 급증(기존 A 연결 drain)**, cx_total(B) 신규. who 는 flip 후 backend-b 로 전환. - LOGICAL_DNS 기대: 3a→3b 에서 endpoint 논리 1개 유지, **cx_destroy 불변(기존 세션 보존)**, who 는 커넥션 재사용 동안 backend-a 잔존. ## 원상복구 힌트 ``` kubectl -n dns-lab scale deploy/backend-a --replicas=1 kubectl -n dns-lab apply -f /home/jinsoo/Documents/kakaopay/istio/scenarios/50-dns-resolution/42-virtualservice-80to443.yaml -f /home/jinsoo/Documents/kakaopay/istio/scenarios/50-dns-resolution/43-destinationrule-tls.yaml ```