LabHub

ICA — 이스티오 인증 어소시에이트 · 게이트웨이와 인그레스 · 실습

게이트웨이와 외부 서비스 연결하기

LabHub 에서 이어서 보기

목표

Gateway 로 진입점을 선언하고 VirtualService 로 라우팅을 붙이는 분업을 익히고, ServiceEntry 와 Sidecar 로 메시의 경계를 넓혔다 좁혔다 해 봅니다.

왜 중요한가

인그레스는 메시에서 가장 사고가 잦은 지점입니다. 원인은 대개 셋 중 하나입니다. Gateway 의 hosts 와 VirtualService 의 hosts 가 겹치지 않거나, gateways 필드를 빠뜨려 규칙이 메시 내부에만 적용되거나, credentialName 이 가리키는 시크릿이 게이트웨이 파드와 다른 네임스페이스에 있는 경우입니다. 셋 다 apply 는 성공하고 트래픽만 조용히 실패하므로, 매니페스트를 읽는 눈이 유일한 방어선입니다.

ServiceEntry 와 Sidecar 는 정반대 방향의 도구입니다. 하나는 메시 밖 서비스를 안으로 데려와 정책과 관측을 붙이고, 다른 하나는 사이드카가 알아야 할 범위를 줄여 메모리를 아낍니다. 대규모 메시에서 Envoy 메모리 문제의 표준 처방이 Sidecar 리소스라는 사실은 시험에도 실무에도 나옵니다.

Kubernetes 기본 리소스는 실제로 apply 하고, Istio CRD 는 /root/ica-gateway/ 아래 파일로 작성합니다.

단계

1. 네임스페이스 ica-gateway 를 만들고 라벨 istio-injection=enabled 를 붙이세요.
2. 네임스페이스 ica-gateway 에 디플로이먼트 shop-api 를 2 레플리카(이미지 nginx:1.27-alpine, 파드 라벨 app=shop-api)로 배포하고, 같은 이름의 서비스 shop-api 를 포트 8080, 포트 이름 http 로 만드세요.
3. 네임스페이스 ica-gateway 에 시크릿 shop-tls 를 타입 kubernetes.io/tls 로 만드세요. 키는 tls.crttls.key 두 개이고, 값은 자리표시자 문자열이어도 됩니다.
4. /root/ica-gateway/gw-shop.yaml 에 Gateway shop-gateway 를 작성하세요. spec.selectoristio: ingressgateway 이고 servers 는 두 개입니다. 첫 번째는 포트 443 / 프로토콜 HTTPS / hosts shop.example.com / tls.mode: SIMPLE / tls.credentialName: shop-tls. 두 번째는 포트 15443 / 프로토콜 TLS / hosts legacy.example.com / tls.mode: PASSTHROUGH 이며 credentialName 을 두지 않습니다.
5. /root/ica-gateway/vs-shop.yaml 에 VirtualService 를 작성하세요. hostsshop.example.com, gatewaysshop-gateway, http 라우팅 대상은 shop-api.ica-gateway.svc.cluster.local 의 포트 8080 입니다.
6. /root/ica-gateway/se-payment.yaml 에 ServiceEntry external-pg 를 작성하세요. hostsapi.pgprovider.example, locationMESH_EXTERNAL, resolutionDNS, ports 는 번호 443 / 이름 https / 프로토콜 TLS 입니다.
7. /root/ica-gateway/sidecar-default.yaml 에 Sidecar 를 작성하세요. metadata.namedefault, metadata.namespaceica-gateway 이고 spec.egress[0].hosts 에는 정확히 세 항목만 둡니다. 자기 네임스페이스(./*), 컨트롤 플레인(istio-system/*), 그리고 6단계에서 등록한 외부 호스트(*/api.pgprovider.example).

참고

단계 7개

  1. 게이트웨이 실습 네임스페이스 만들기
  2. 게이트웨이가 보낼 백엔드 준비
  3. TLS 시크릿 만들기
  4. 두 가지 TLS 모드를 한 Gateway 에 담기
  5. VirtualService 를 게이트웨이에 바인딩
  6. 외부 결제 API 를 메시에 등록
  7. Sidecar 로 시야 좁히기