# DNS resolution 재현 — variant=logical mode=mode3 **Date:** 2026-07-01_195325 · **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) ### 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: 6 .upstream_cx_destroy_local: 4 .upstream_cx_destroy_local_with_active_rq: 0 .upstream_cx_destroy_remote: 2 .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::0 10.250.147.30:443::cx_total::2 10.250.147.30:443::rq_total::322 10.250.147.30:443::health_flags::healthy ``` ## 3. keepalive 세션 유지 중 flip(A→B) — LOGICAL은 기존 세션 유지 10:53:35 who=backend-a code=200 10:53:36 who=backend-a code=200 10:53:36 who=backend-a code=200 10:53:36 who=backend-a code=200 10:53:37 who=backend-a code=200 10:53:37 who=backend-a code=200 10:53:38 who=backend-a code=200 10:53:38 who=backend-a code=200 10:53:38 who=backend-a code=200 10:53:39 who=backend-a code=200 10:53:39 who=backend-a code=200 10:53:40 who=backend-a code=200 10:53:40 who=backend-a code=200 10:53:40 who=backend-a code=200 10:53:41 who=backend-a code=200 10:53:41 who=backend-a code=200 10:53:42 who=backend-a code=200 10:53:42 who=backend-a code=200 10:53:43 who=backend-a code=200 10:53:43 who=backend-a code=200 10:53:43 who=backend-a code=200 10:53:44 who=backend-a code=200 10:53:44 who=backend-a code=200 10:53:45 who=backend-a code=200 10:53:45 who=backend-a code=200 >> FLIP A→B @ 19:53:45 10:53:45 who=backend-a code=200 10:53:46 who=backend-a code=200 10:53:46 who=backend-a code=200 10:53:47 who=backend-a code=200 10:53:47 who=backend-a code=200 10:53:47 who=backend-a code=200 10:53:48 who=backend-a code=200 10:53:48 who=backend-a code=200 10:53:49 who=backend-a code=200 10:53:49 who=backend-a code=200 10:53:49 who=backend-a code=200 10:53:50 who=backend-a code=200 10:53:50 who=backend-a code=200 10:53:51 who=backend-a code=200 10:53:51 who=backend-a code=200 10:53:52 who=backend-a code=200 10:53:52 who=backend-a code=200 10:53:52 who=backend-a code=200 10:53:53 who=backend-a code=200 10:53:53 who=backend-a code=200 10:53:54 who=backend-a code=200 10:53:54 who=backend-a code=200 10:53:54 who=backend-a code=200 10:53:55 who=backend-a code=200 10:53:55 who=backend-a code=200 10:53:56 who=backend-a code=200 10:53:56 who=backend-a code=200 10:53:56 who=backend-a code=200 10:53:57 who=backend-a code=200 10:53:57 who=backend-a code=200 10:53:58 who=backend-a code=200 10:53:58 who=backend-a code=200 10:53:59 who=backend-a code=200 10:53:59 who=backend-a code=200 10:53:59 who=backend-a code=200 10:54:00 who=backend-a code=200 10:54:00 who=backend-a code=200 10:54:01 who=backend-a code=200 10:54:01 who=backend-a code=200 10:54:01 who=backend-a code=200 10:54:02 who=backend-a code=200 10:54:02 who=backend-a code=200 10:54:03 who=backend-a code=200 10:54:03 who=backend-a code=200 10:54:03 who=backend-a code=200 10:54:04 who=backend-a code=200 10:54:04 who=backend-a code=200 10:54:05 who=backend-a code=200 10:54:05 who=backend-a code=200 >> KILL backend-a @ 19:54:05 10:54:05 who=backend-b code=200 10:54:06 who=backend-b code=200 10:54:06 who=backend-b code=200 10:54:07 who=backend-b code=200 10:54:07 who=backend-b code=200 10:54:08 who=backend-b code=200 10:54:08 who=backend-b code=200 10:54:08 who=backend-b code=200 10:54:09 who=backend-b code=200 10:54:09 who=backend-b code=200 10:54:10 who=backend-b code=200 10:54:10 who=backend-b code=200 10:54:10 who=backend-b code=200 10:54:11 who=backend-b code=200 10:54:11 who=backend-b code=200 10:54:12 who=backend-b code=200 10:54:12 who=backend-b code=200 10:54:12 who=backend-b code=200 10:54:13 who=backend-b code=200 10:54:13 who=backend-b code=200 10:54:14 who=backend-b code=200 10:54:14 who=backend-b code=200 10:54:15 who=backend-b code=200 10:54:15 who=backend-b code=200 10:54:15 who=backend-b code=200 10:54:16 who=backend-b code=200 10:54:16 who=backend-b code=200 10:54:17 who=backend-b code=200 10:54:17 who=backend-b code=200 10:54:17 who=backend-b code=200 10:54:18 who=backend-b code=200 10:54:18 who=backend-b code=200 10:54:19 who=backend-b code=200 10:54:19 who=backend-b code=200 10:54:19 who=backend-b code=200 10:54:20 who=backend-b code=200 10:54:20 who=backend-b code=200 10:54:21 who=backend-b code=200 10:54:21 who=backend-b code=200 10:54:21 who=backend-b code=200 10:54:22 who=backend-b code=200 10:54:22 who=backend-b code=200 10:54:23 who=backend-b code=200 10:54:23 who=backend-b code=200 10:54:24 who=backend-b code=200 10:54:24 who=backend-b code=200 10:54:24 who=backend-b code=200 10:54:25 who=backend-b code=200 10:54:25 who=backend-b code=200 10:54:26 who=backend-b code=200 10:54:26 who=backend-b code=200 10:54:26 who=backend-b code=200 10:54:27 who=backend-b code=200 10:54:27 who=backend-b code=200 10:54:28 who=backend-b code=200 10:54:28 who=backend-b code=200 10:54:28 who=backend-b code=200 10:54:29 who=backend-b code=200 10:54:29 who=backend-b code=200 10:54:30 who=backend-b code=200 10:54:30 who=backend-b code=200 10:54:31 who=backend-b code=200 10:54:31 who=backend-b code=200 10:54:31 who=backend-b code=200 10:54:32 who=backend-b code=200 10:54:32 who=backend-b code=200 10:54:33 who=backend-b code=200 10:54:33 who=backend-b code=200 10:54:33 who=backend-b code=200 10:54:34 who=backend-b code=200 10:54:34 who=backend-b code=200 ``` -- fortio -- Sockets used: 1 (for perfect keepalive, would be 1) Code 200 : 300 (100.0 %) ``` ## 4. AFTER ### 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: 1 .upstream_cx_connect_fail: 0 .upstream_cx_destroy: 7 .upstream_cx_destroy_local: 4 .upstream_cx_destroy_local_with_active_rq: 0 .upstream_cx_destroy_remote: 3 .upstream_cx_destroy_remote_with_active_rq: 0 .upstream_cx_destroy_with_active_rq: 0 .upstream_cx_total: 8 [endpoint|443 cx] 10.250.27.55:443::cx_active::1 10.250.27.55:443::cx_total::4 10.250.27.55:443::rq_total::623 10.250.27.55:443::health_flags::healthy ``` ## 5. 읽는 법: flip(A→B) 직후에도 who=backend-a 지속(세션 유지) → backend-a KILL 시점에 잠깐 code!=200(재연결) → 이후 who=backend-b. liveness가 DNS가 아니라 '커넥션 단절'에 걸려 있음을 보여줌. ## 원상복구 힌트 ``` 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 ```