웨이포인트 문제 트러블슈팅하기

웨이포인트 문제 트러블슈팅하기 (Troubleshoot issues with waypoints)

이 가이드는 네임스페이스, 서비스 또는 워크로드를 웨이포인트 프록시에 등록했지만 예상한 동작이 보이지 않을 때 무엇을 해야 하는지 설명해요.

출처: Istio 문서

본문

트래픽 라우팅 또는 보안 정책 문제 (Problems with traffic routing or security policy)

curl 파드에서 productpage 서비스를 통해 reviews 서비스로 요청을 보내려면:

$ kubectl exec deploy/curl -- curl -s http://productpage:9080/productpage

curl 파드에서 reviews v2 파드로 요청을 보내려면:

$ export REVIEWS_V2_POD_IP=$(kubectl get pod -l version=v2,app=reviews -o jsonpath='{.items[0].status.podIP}')
$ kubectl exec deploy/curl -- curl -s http://$REVIEWS_V2_POD_IP:9080/reviews/1

reviews 서비스로의 요청은 모든 L7 정책에 대해 reviews-svc-waypoint가 적용해야 해요. reviews v2 파드로의 요청은 모든 L7 정책에 대해 reviews-v2-pod-waypoint가 적용해야 해요.

  1. L7 구성이 적용되지 않는다면, 먼저 istioctl analyze를 실행해 구성에 검증 문제가 있는지 확인하세요.
$ istioctl analyze
✔ No validation issues found when analyzing namespace: default.
  1. 서비스나 파드에 대한 L7 구성을 구현하는 웨이포인트를 결정하세요.

소스가 서비스의 호스트 이름이나 IP로 목적지를 호출한다면, istioctl experimental ztunnel-config service 명령을 사용해 목적지 서비스가 웨이포인트를 사용하는지 확인하세요. 이전 예제에 따르면, reviews 서비스는 reviews-svc-waypoint를 사용해야 하고 default 네임스페이스의 다른 모든 서비스는 네임스페이스 waypoint를 사용해야 해요.

$ istioctl ztunnel-config service
NAMESPACE    SERVICE NAME            SERVICE VIP   WAYPOINT
default      bookinfo-gateway-istio  10.43.164.194 waypoint
default      bookinfo-gateway-istio  10.43.164.194 waypoint
default      bookinfo-gateway-istio  10.43.164.194 waypoint
default      bookinfo-gateway-istio  10.43.164.194 waypoint
default      details                 10.43.160.119 waypoint
default      kubernetes              10.43.0.1     waypoint
default      productpage             10.43.172.254 waypoint
default      ratings                 10.43.71.236  waypoint
default      reviews                 10.43.162.105 reviews-svc-waypoint
...

소스가 파드 IP로 목적지를 호출한다면, istioctl ztunnel-config workload 명령을 사용해 목적지 파드가 웨이포인트를 사용하는지 확인하세요. 이전 예제에 따르면, reviews v2 파드는 reviews-v2-pod-waypoint를 사용해야 하고, default 네임스페이스의 다른 모든 파드는 기본적으로 웨이포인트가 서비스로 주소가 지정된 트래픽만 처리하므로 어떤 웨이포인트도 없어야 해요.

$ istioctl ztunnel-config workload
NAMESPACE    POD NAME                                    IP         NODE                     WAYPOINT                PROTOCOL
default      bookinfo-gateway-istio-7c57fc4647-wjqvm     10.42.2.8  k3d-k3s-default-server-0 None                    TCP
default      details-v1-698d88b-wwsnv                    10.42.2.4  k3d-k3s-default-server-0 None                    HBONE
default      productpage-v1-675fc69cf-fp65z              10.42.2.6  k3d-k3s-default-server-0 None                    HBONE
default      ratings-v1-6484c4d9bb-crjtt                 10.42.0.4  k3d-k3s-default-agent-0  None                    HBONE
default      reviews-svc-waypoint-c49f9f569-b492t        10.42.2.10 k3d-k3s-default-server-0 None                    TCP
default      reviews-v1-5b5d6494f4-nrvfx                 10.42.2.5  k3d-k3s-default-server-0 None                    HBONE
default      reviews-v2-5b667bcbf8-gj7nz                 10.42.0.5  k3d-k3s-default-agent-0  reviews-v2-pod-waypoint HBONE
...

파드의 웨이포인트 열 값이 올바르지 않다면, 파드가 istio.io/use-waypoint로 레이블링되어 있고 그 레이블 값이 워크로드 트래픽을 처리할 수 있는 웨이포인트의 이름인지 확인하세요. 예를 들어 reviews v2 파드가 서비스 트래픽만 처리할 수 있는 웨이포인트를 사용한다면, 그 파드가 사용하는 웨이포인트를 볼 수 없을 거예요. 파드의 istio.io/use-waypoint 레이블이 올바르게 보인다면, 웨이포인트의 Gateway 리소스가 istio.io/waypoint-for에 대해 호환되는 값으로 레이블링되었는지 확인하세요. 파드의 경우 적합한 값은 all 또는 workload예요.

  1. istioctl proxy-status 명령으로 웨이포인트의 프록시 상태를 확인하세요.
$ istioctl proxy-status
NAME                                                CLUSTER        CDS         LDS         EDS          RDS          ECDS         ISTIOD                      VERSION
bookinfo-gateway-istio-7c57fc4647-wjqvm.default     Kubernetes     SYNCED      SYNCED      SYNCED       SYNCED       NOT SENT     istiod-795d55fc6d-vqtjx     1.23-alpha.75c6eafc5bc8d160b5643c3ea18acb9785855564
reviews-svc-waypoint-c49f9f569-b492t.default        Kubernetes     SYNCED      SYNCED      SYNCED       NOT SENT     NOT SENT     istiod-795d55fc6d-vqtjx     1.23-alpha.75c6eafc5bc8d160b5643c3ea18acb9785855564
reviews-v2-pod-waypoint-7f5dbd597-7zzw7.default     Kubernetes     SYNCED      SYNCED      NOT SENT     NOT SENT     NOT SENT     istiod-795d55fc6d-vqtjx     1.23-alpha.75c6eafc5bc8d160b5643c3ea18acb9785855564
waypoint-6f7b665c89-6hppr.default                   Kubernetes     SYNCED      SYNCED      SYNCED       NOT SENT     NOT SENT     istiod-795d55fc6d-vqtjx     1.23-alpha.75c6eafc5bc8d160b5643c3ea18acb9785855564
...
  1. Envoy의 액세스 로그를 활성화하고, 요청을 보낸 후 웨이포인트 프록시의 로그를 확인하세요:
$ kubectl logs deploy/waypoint

정보가 충분하지 않다면 웨이포인트 프록시의 디버그 로그를 활성화할 수 있어요:

$ istioctl pc log deploy/waypoint --level debug
  1. istioctl proxy-config 명령으로 웨이포인트의 envoy 구성을 확인하세요. 이 명령은 클러스터, 엔드포인트, 리스너, 라우트, 시크릿 같은 웨이포인트와 관련된 모든 정보를 보여줘요:
$ istioctl proxy-config all deploy/waypoint

웨이포인트 프록시는 Envoy 기반이므로, Envoy를 디버깅하는 방법에 대한 자세한 내용은 Envoy 구성 상세 분석 섹션을 참조하세요.

더 알아보기 (Learn more)