=== A-5 기준선 === keycloak-0=10.42.1.77 (kc-lab-2) keycloak-1=10.42.0.42 (kc-lab-1) keycloak-0 1/1 Running 0 11m keycloak-1 1/1 Running 1 (2m48s ago) 155m postgres-7b474b88c8-9cmsv 1/1 Running 0 14m Traceback (most recent call last): File "", line 3, in for r in json.load(sys.stdin)["data"]["result"]: print(f" cluster_size {r["metric"].get("pod"):12} = {r["value"][1]}") ~~~~~~~~~^^^^^^^^^^^ File "/usr/lib/python3.14/json/__init__.py", line 298, in load return loads(fp.read(), cls=cls, object_hook=object_hook, parse_float=parse_float, parse_int=parse_int, parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw) File "/usr/lib/python3.14/json/__init__.py", line 352, in loads return _default_decoder.decode(s) ~~~~~~~~~~~~~~~~~~~~~~~^^^ File "/usr/lib/python3.14/json/decoder.py", line 345, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.14/json/decoder.py", line 363, in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) === 주입: keycloak-0 으로 들어가는 7800/57800 만 DROP (한 방향) === A-1 의 NetworkPolicy 는 conntrack ESTABLISHED 에 막혀 기존 연결을 못 끊었다. FORWARD 최상단에 넣으면 conntrack 승인보다 먼저 평가된다. Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 DROP 6 -- 0.0.0.0/0 10.42.1.77 tcp dpt:57800 2 DROP 6 -- 0.0.0.0/0 10.42.1.77 tcp dpt:7800 주입 시각: 12:28:23 === 관찰 — 어느 쪽이 먼저 상대를 의심하는가 === +25초 | keycloak-0:1/1 keycloak-1:1/1 | 외부 200 +50초 | keycloak-0:1/1 keycloak-1:1/1 | 외부 200 +75초 | keycloak-0:1/1 keycloak-1:1/1 | 외부 200 +100초 | keycloak-0:1/1 keycloak-1:1/1 | 외부 200 +125초 | keycloak-0:1/1 keycloak-1:1/1 | 외부 200 +150초 | keycloak-0:1/1 keycloak-1:1/1 | 외부 200 +175초 | keycloak-0:1/1 keycloak-1:1/1 | 외부 200 +200초 | keycloak-0:1/1 keycloak-1:1/1 | 외부 200