웨이포인트 문제 트러블슈팅하기
웨이포인트 문제 트러블슈팅하기 (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가 적용해야 해요.
- L7 구성이 적용되지 않는다면, 먼저
istioctl analyze를 실행해 구성에 검증 문제가 있는지 확인하세요.
$ istioctl analyze
✔ No validation issues found when analyzing namespace: default.
- 서비스나 파드에 대한 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예요.
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
...
- Envoy의 액세스 로그를 활성화하고, 요청을 보낸 후 웨이포인트 프록시의 로그를 확인하세요:
$ kubectl logs deploy/waypoint
정보가 충분하지 않다면 웨이포인트 프록시의 디버그 로그를 활성화할 수 있어요:
$ istioctl pc log deploy/waypoint --level debug
istioctl proxy-config명령으로 웨이포인트의 envoy 구성을 확인하세요. 이 명령은 클러스터, 엔드포인트, 리스너, 라우트, 시크릿 같은 웨이포인트와 관련된 모든 정보를 보여줘요:
$ istioctl proxy-config all deploy/waypoint
웨이포인트 프록시는 Envoy 기반이므로, Envoy를 디버깅하는 방법에 대한 자세한 내용은 Envoy 구성 상세 분석 섹션을 참조하세요.