L7 경로 변환

L7 경로 변환 (L7 Path Translation)

새로운 Cilium Envoy Config CRD를 사용해 커스텀 Envoy 리스너를 구성하는 예제예요. Prometheus 메트릭 경로 /metrics를 Envoy의 경로 /stats/prometheus로 변환하는 리스너를 각 Cilium 노드에 추가해요. 이전에는 Cilium Agent 코드 변경이 필요했던 기능을 CRD만으로 구현할 수 있음을 보여줘요.

출처: L7 Path Translation

본문

이 예제는 명령줄 옵션 --proxy-prometheus-port로 이미 제공되는 Prometheus 메트릭 리스너를 복제해요. 따라서 이 예제의 포인트는 새 기능을 추가하는 것이 아니라, 이전에 Cilium Agent 코드 변경이 필요했던 기능을 새로운 Cilium Envoy Config CRD로 구현할 수 있음을 보여주는 것이에요.

예제 CRD 적용 (Apply Example CRD)

이 예제는 표준 Prometheus 포트(예: 9090)에 새 Envoy 리스너 envoy-prometheus-metrics-listener를 각 Cilium 노드에 추가해서, 기본 Prometheus 메트릭 경로 /metrics를 Envoy의 Prometheus 메트릭 경로 /stats/prometheus로 변환해요.

이 Cilium Envoy Config CRD를 적용하세요:

$ kubectl apply -f https://raw.githubusercontent.com/cilium/cilium/1.20.2/examples/kubernetes/servicemesh/envoy/envoy-prometheus-metrics-listener.yaml

이 CiliumClusterwideEnvoyConfig CRD 버전은 클러스터 범위(즉, 네임스페이스 없음)이므로, CRD를 새 것으로 교체하려는 경우가 아니라면 이름은 클러스터에서 고유해야 해요.

Note 이 Envoy 리소스들은 K8s에서 전혀 검증되지 않으므로, Envoy 리소스의 모든 오류는 이 CRD를 관찰하는 Cilium Agent에서만 보여요. 즉 kubectl apply는 성공을 보고하지만, 노드 로컬 Envoy 인스턴스의 리소스 파싱 및/또는 설치가 실패했을 수 있어요. 현재 이것을 검증하는 유일한 방법은 Cilium Agent 로그에서 오류와 경고를 관찰하는 것이에요. 또한 Cilium Agent는 클러스터의 충돌하는 Envoy 리소스에 대해 경고 로그를 출력해요.

Note Cilium Ingress Controller는 필요할 때 내부적으로 Envoy 리소스를 구성해요. 충돌이 없는지 확인하려면 Envoy 리소스를 명시적으로 만들 때 Cilium Agent 로그를 확인하세요.

$ kubectl logs -n kube-system ds/cilium | grep -E "level=(error|warning)"

리스너 포트 테스트 (Test the Listener Port)

새 포트가 메트릭 요청에 응답하는지 테스트하세요:

$ curl http://<node-IP>:9090/metrics

여기서 <node-IP>는 k8s 클러스터 노드 중 하나의 IP 주소예요.

정리 (Clean-up)

prometheus 리스너를 다음으로 제거하세요:

$ kubectl delete -f https://raw.githubusercontent.com/cilium/cilium/1.20.2/examples/kubernetes/servicemesh/envoy/envoy-prometheus-metrics-listener.yaml

더 알아보기 (Learn more)