Files
document-haness/docs/virtualization/final/evidence/raw/lab-state-before-rebuild/README.txt
T
DongHyeonkaandClaude Opus 5 32e39e20aa fix(setup): 실험대에서 35편을 끝까지 밟고 어긋난 명령·결과 31건을 고친다
test-server 를 비우고 다시 세운 뒤 Setup 기록 35편(virtualization 9 ·
keycloak-session-store 26)을 문서에 적힌 명령 그대로 쳤다. 어긋난 자리를
기록과 SSOT 양쪽에 실측과 함께 넣었다.

막히던 것
- 04 의 인증서 경로가 live/hyeonworks.com 이라 nginx 가 [emerg] 로 안 떴다.
  실제 계보는 live/auth.hyeonworks.com 이고 「문제가 생기면」은 진단이 거꾸로였다
- 인증서가 와일드카드가 아니다. SAN 이 auth·app1·app2 셋뿐이라 그 밖의 이름은
  TLS 에서 끊기고 curl 이 exit 60 · %{http_code} 000 을 낸다. SSOT 안에서
  두 문단이 서로 어긋나 있었다
- A-7 14번 ①이 kc-lab-1 에서 여섯 줄 다 실패하는데 마지막 date 만 「차단」을 찍는다

검사가 실패할 수 없던 자리
- B-1 의 세션 키 고르기는 앞 단계가 $KEY 를 채워 둬서 루프가 한 건도 못 맞혀도
  통과한다. KEY= 로 비우고 키마다 1/0 을 찍게 바꿨다
- k3s-agent 유닛의 sed -i 는 패턴에 $HOME 이 들어 있어 아무 줄도 안 바꾼 채 성공한다

certbot
- renew --dry-run 의 종료 코드는 성공도 0, 실패도 0, 다른 사유의 실패는 1 이다.
  본문의 renew failure(s) 로만 판정할 수 있다
- --dry-run 은 staging 서버를 쓰는데 renewal/*.conf 의 account= 는 운영 계정을
  가리킨다. 실패한 dry-run 이 staging 계정을 하나 더 만들어 다음 실행이 계속 멎는다
- 훅을 755 로 놓고 시뮬레이션이 성공해도 Running deploy-hook command 는 안 나온다.
  certbot 2.1.0 에는 --run-deploy-hooks 도 없다
- 강제 갱신은 실제로 쳤고 서빙까지 닿았다. serial 06F3E0EF…1373 → 065547…3DF1,
  notAfter Dec 3 → Dec 16, nginx worker 2629 4712 → 4745 4754

독자가 칠 수 있는 형태로
- 안 되는 형태가 번호 붙은 단계에 앉아 있던 8곳을 뒤집고, 되는 형태를 ①로 올렸다
- 랩 안에서 공개 이름을 치는 curl 65줄에 --resolve 를 붙였다. 붙인 형태를 실제로
  쳐서 문서가 적은 값과 같은지 확인했다
- 힙독·sed -i·echo >>·&&·|| 를 편집기 + 파일 리스팅 + 분할 형태로 바꿨다
- 닫는 코드펜스가 빠져 뒤 200여 줄의 블록 종류가 뒤집혀 있던 곳을 포함해 3곳을 고쳤다

관문: check_body PASS · check_prose error 0 · check_evidence 두 프로젝트 문제 없음 ·
verify-tech-log-tree error 0 · verify-project-layout error 0 · 코드펜스 전수 0건

남은 것: B-0 주입은 keycloak-pattern 저장소의 소스를 고치고 이미지를 다시 구워야
해서 안 했다(unknown).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 19:38:12 +09:00

60 lines
5.3 KiB
Plaintext

2026-09-17 에 test-server 를 문서대로 철거하고 다시 세운 기록.
문서가 맞는지 실물로 확인하는 것이 목적이라, 명령을 고쳐 치지 않고 **문서에 적힌
그대로** 쳤다. 그래서 실패한 출력도 그대로 들어 있다 — 06 이 그것이다.
| 파일 | 무엇 |
|---|---|
| 01 | 철거 전 호스트 상태 전부 |
| 02 | 철거 문서의 「지우기 전에 먼저 본다」 |
| 03 | 철거 1단계 — 게스트 셋 |
| 04 | 철거 2단계 — DHCP 예약 셋 |
| 05 | 철거 확인표 다섯 줄 |
| 06 | **구축 5번을 문서 그대로 쳤다 → 실패.** meta 파일 이름에 `.yaml` 이 빠져 있다 |
| 07 | 이름을 고치고 세 장을 구웠다. 문서에는 한 장 굽는 절만 있다 |
| 08 | 시드 볼륨 셋 업로드 |
| 09 | DHCP 예약 셋 |
| 10~11 | `virt-install` 세 대 |
| 12 | 부팅 뒤 리스 — 셋 다 예약 주소를 받았다 |
| 13 | 게스트 SSH 와 `vdb` 가 `iso9660 CIDATA` 인 것 |
| 14 | `cloud-init schema` 는 `sudo:` 리스트형을 거부하는데 런타임은 받는다 |
| 15 | **k3s 사전 확인이 실패.** `REMOTE HOST IDENTIFICATION HAS CHANGED!` |
| 16 | 별칭은 되고 IP 직접 지정은 막힌다 — `Host kc-lab-*` 가 IP 에 안 걸린다 |
| 17 | 옛 키를 지우고 다시 |
| 18~19 | k3s server 설치와 확인 |
| 20 | kubeconfig 를 lab host 로 |
| 21~22 | 토큰 전달과 agent 설치 |
| 23 | 2노드 클러스터 확인 |
비밀은 옮기지 않았다. 14 에 평문 비밀번호와 공개키가 찍혀 나와 `<REDACTED>` 로
가렸고, 가린 자리에 길이만 남겼다.
25-edge-nginx-config.txt 03 1-④·2·3 — sites-enabled/default 를 지우고 keycloak-lab 을 써서 링크·nginx -t·reload 까지
26-edge-nginx-verify.txt 03 3-②③④ 와 층 ①② — nginx -t 가 두 줄이다([warn] 없음), nginx -v 가 command not found, 층 ② 가 404
27-edge-doc-mismatch.txt which nginx 가 깔린 상태에서도 빈손인 것 · PATH · sudo nginx -v · nginx -t 3회 warn 0
28-host-state-before-dnat.txt 03 4번 치기 전 호스트 — tailscale0 있음, DNAT 파일과 유닛이 2026-09-11 자로 이미 있음, 호스트 sudo 는 비밀번호를 묻는다
29-host-dnat-files.txt 호스트에 깔려 있는 .nft 와 유닛 원문 — forward 체인이 남아 있고 ExecStartPost 가 없다 (문서·저장소 원본과 다르다)
30-layer3-from-workstation.txt 03 층 ③ 을 밖에서 — curl: (7) Failed to connect. 29 의 ExecStartPost 누락이 그대로 드러난 자리
31-cert-doc-precheck.txt 04 확인 ①② 와 1번 — dig 이 게스트에 없다, nginx -v 가 sudo 없이는 안 된다, certbot plugins 세 줄은 문서대로
32-cert-doc-dig-remedy.txt 처방 검증 — getent hosts 와 dnsutils 설치 뒤의 dig 이 같은 주소를 낸다
33-keycloak-precheck.txt 05 확인 ①② — 매니페스트 목록, 000 tls=0 (연결이 안 돼도 tls=0 이 찍힌다), 2노드 Ready
34-keycloak-apply.txt 05 1-②·2-① — apply 출력 9줄과 rollout status. Waiting for … 줄이 먼저 나온다
35-keycloak-verify-1-3.txt 05 판정 ①~③ — get all·get secret,configmap,pvc,ingress·사슬·Secret 길이 19/22/19 (값은 안 찍었다)
36-keycloak-verify-4-6.txt 05 판정 ④~⑥ — Endpoints 둘, PVC 가 postgres-data 하나, ISPN000094 에 (v=16.0.12), jgroups_ping 2행
37-keycloak-cluster-size.txt 05 판정 ⑥ 지표 — 임시 파드가 읽은 vendor_cluster_size 2.0, Keycloak 안에 curl 이 없다(exit 127)
38-keycloak-verify-7-8.txt 05 판정 ⑦⑧ — 밖에서는 000(04 미실시), Host 헤더를 실은 80 은 엣지·Traefik 둘 다 200, 세션 표 0행
39-observability-apply.txt 06 1·2 — apply 출력, rollout, 파드 네 줄(38초에 grafana 가 0/1)
40-observability-verify.txt 06 판정 ①~④ — job 네 개, health 가 unknown 인 keycloak 둘, can-i 의 경고 줄, 원소 하나뿐인 cluster_size
41-observability-cluster-size-retry.txt 90초 뒤 다시 — health 가 up 이 되고 원소 둘 다 2. node/pod/exported_node 세 라벨이 다른 것을 말한다
42-power-cycle-memory.txt 07 1번 — setmaxmem/setmem --config 뒤 dominfo 가 안 바뀐다. 게스트 free -m 도 옛 값
43-dominfo-vs-config.txt 같은 순간의 dominfo(5242880) 와 dumpxml --inactive(4194304). 바꾼 것이 들어갔는지는 --inactive 가 답한다
44-host-prep-checks.txt 00 의 확인 명령 전부 — vmx, kvm 모듈 셋, 저장소, virsh 12.7.0, libvirtd.socket, libvirt 그룹, default 네트워크, sudo 없는 virsh list
45-libvirt-uri-mechanism.txt rc 파일은 비대화형 ssh 에서 안 읽힌다. 그런데도 되는 까닭은 ~/.config/libvirt/libvirt.conf 의 uri_default
48 cloud-init 의 packages 에 certbot 이 없다는 것 (게스트 user-data + 저장소 템플릿)
49 01 의 확인 ①②③ 을 다시 친 결과
50 08 의 철거 전 네 값과, 인증서가 어느 기계에 있는지
51 (철거는 실행하지 않았다 — 파일 없음)
52 09 의 lsmod·코어 수·libvirtd.socket, 01 의 vol-info·net-dumpxml·cloud-init status
53 sudo 가 열린 뒤 doc 03 의 미검증 셋 — 배포 파일 상태·guest_input 중복·masquerade 찾기
54 출발지를 덮는 것이 Tailscale 이라는 근거 (ts-forward MARK → ts-postrouting MASQUERADE)
55 doc 02 의 API 서버 SAN 과 두 journalctl