# ext-client — "폐쇄망 밖 외부 사용자"의 모사. ingress 테스트의 트래픽 소스. # # sidecar 없음(lab-ext는 injection 라벨 없음) = mesh 밖에서 들어오는 진짜 외부 # 클라이언트와 같은 조건. DNS는 fake-dns를 바라보므로 www.lab.external을 # "실제 DNS 경로"로 resolve해 ingressgateway에 도달한다 # (curl --resolve로 DNS를 우회하면 DNS 동작 자체는 검증되지 않는다 — 용도 구분). # # __LABDNS_IP__ / __CLUSTER_DOMAIN__ 은 apply 전에 sed로 치환한다(README ⑥단계 — # fake-dns Service ClusterIP / coredns ConfigMap의 kubernetes 존에서 발견). # searches의 cluster domain은 하드코딩 금지 — kubespray 등 커스텀 도메인 클러스터에서 # (예: homelab.local) cluster.local 하드코딩 시 클러스터 이름 resolve가 깨진다. --- apiVersion: apps/v1 kind: Deployment metadata: { name: ext-client, namespace: lab-ext, labels: { app: ext-client } } spec: replicas: 1 selector: { matchLabels: { app: ext-client } } template: metadata: labels: { app: ext-client } spec: dnsPolicy: None dnsConfig: nameservers: ["__LABDNS_IP__"] searches: - lab-ext.svc.__CLUSTER_DOMAIN__ - svc.__CLUSTER_DOMAIN__ - __CLUSTER_DOMAIN__ options: - { name: ndots, value: "5" } containers: - name: netshoot image: docker.io/nicolaka/netshoot:latest command: ["sh", "-c", "while true; do sleep 3600; done"] volumeMounts: - { name: lab-ca, mountPath: /etc/lab-ca, readOnly: true } volumes: - name: lab-ca configMap: { name: lab-ca } # ca.crt — ingress TLS 검증용(README ②단계에서 생성)