# mesh-client — "우리 서비스"(sidecar 주입됨). egress 테스트의 트래픽 소스이자 관측 지점. # # dnsPolicy:None + nameservers=[fake-dns] 로 /etc/resolv.conf를 덮는다. # app 컨테이너와 istio-proxy가 같은 resolv.conf를 공유하므로, Envoy(STRICT_DNS의 # c-ares)의 api.lab.external 해석도 fake-dns를 타게 된다(50-dns 랩 실측 검증 패턴). # searches/ndots는 남겨 둬야 istiod 등 클러스터 이름이 (fake-dns → forward → # cluster DNS 경로로) 계속 resolve된다 — 이게 깨지면 sidecar가 아예 안 뜬다. # # __LABDNS_IP__ / __CLUSTER_DOMAIN__ 은 apply 전에 sed로 치환한다(README ⑥단계 — # 30-ext-client.yaml과 같은 명령으로 함께 처리). # # proxyStatsMatcher: Istio 기본 stats matcher는 cluster 단위 upstream_cx_* 를 억제한다. # lab.external cluster stats(cx_active/cx_destroy 등)를 명시 포함 → egress 경유·drain # 거동을 pilot-agent stats로 정량 관측하기 위함(50-dns 랩의 정본 카운터). --- apiVersion: apps/v1 kind: Deployment metadata: { name: mesh-client, namespace: lab-apps, labels: { app: mesh-client } } spec: replicas: 1 selector: { matchLabels: { app: mesh-client } } template: metadata: labels: { app: mesh-client } annotations: proxy.istio.io/config: | proxyStatsMatcher: inclusionRegexps: - ".*lab.external.*" spec: dnsPolicy: None dnsConfig: nameservers: ["__LABDNS_IP__"] searches: - lab-apps.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 — 외부 서버(ext-a) TLS 검증용