Вопрос или проблема
Я запускаю кластер AKS (Kubernetes на Azure) с их собственным плагином Istio (вставляет istio в aks-istio).
В результате мне пришлось пройти через некоторые конфигурационные ухищрения, чтобы перенаправить все в правильное пространство имен для Istio – все работает.
Кроме Kiali – я не вижу никакого исходящего трафика за пределами Pass Through Cluster.
У меня установлено REGISTRY_ONLY
, и это работает, как только я удаляю свои Service Entries
, трафик останавливается – но я хотел бы видеть исходящий трафик.
Я предполагаю, что это связано с тем, что у меня неправильно настроен Prometheus – так как я не могу найти никаких ссылок на PassThrough Cluster в своих данных – но также нет документации, чтобы помочь с его настройкой.
У меня настроены два Service Monitors – которые захватывают большую часть моего трафика – просто не хватает кластера.
{
"apiVersion": "monitoring.coreos.com/v1",
"kind": "ServiceMonitor",
"metadata": {
"labels": {
"monitoring": "istio-dataplane",
"release": "prometheus"
},
"name": "prometheus-oper-istio-dataplane",
"namespace": "monitoring",
"spec": {
"endpoints": [
{
"interval": "15s",
"path": "/stats/prometheus",
"relabelings": [
{
"action": "keep",
"regex": "istio-proxy",
"sourceLabels": [
"__meta_kubernetes_pod_container_name"
]
},
{
"action": "keep",
"sourceLabels": [
"__meta_kubernetes_pod_annotationpresent_prometheus_io_scrape"
]
},
{
"action": "replace",
"regex": "([^:]+)(?::\\d+)?;(\\d+)",
"replacement": "$1:$2",
"sourceLabels": [
"__address__",
"__meta_kubernetes_pod_annotation_prometheus_io_port"
],
"targetLabel": "__address__"
},
{
"action": "keep",
"regex": ".*-envoy-prom",
"sourceLabels": [
"__meta_kubernetes_pod_container_port_name"
]
},
{
"action": "labelmap",
"regex": "__meta_kubernetes_pod_label_(.+)"
},
{
"action": "replace",
"sourceLabels": [
"__meta_kubernetes_namespace"
],
"targetLabel": "namespace"
},
{
"action": "replace",
"sourceLabels": [
"__meta_kubernetes_pod_name"
],
"targetLabel": "pod_name"
}
],
"targetPort": "http-envoy-prom"
}
],
"jobLabel": "envoy-stats",
"namespaceSelector": {
"any": true
},
"selector": {
"matchExpressions": [
{
"key": "istio-prometheus-ignore",
"operator": "DoesNotExist"
}
]
}
}
}
{
"apiVersion": "monitoring.coreos.com/v1",
"kind": "ServiceMonitor",
"metadata": {
"labels": {
"release": "prometheus"
},
"name": "prometheus-oper-istio-controlplane",
"namespace": "monitoring",
"resourceVersion": "1152559",
"uid": "6c4a1080-e2ff-456c-ae86-23caaf73fe73"
},
"spec": {
"endpoints": [
{
"interval": "15s",
"port": "http-monitoring"
},
{
"interval": "15s",
"port": "http-policy-monitoring"
}
],
"jobLabel": "istio",
"namespaceSelector": {
"any": true
},
"selector": {
"matchExpressions": [
{
"key": "istio",
"operator": "In",
"values": [
"mixer",
"pilot",
"galley",
"citadel",
"sidecar-injector"
]
}
]
}
}
}
Ответ или решение
Проблема, с которой вы столкнулись в Kiali с отсутствием трафика, отображаемого в "Passthrough cluster", является довольно распространенной среди пользователей Istio, особенно в контексте работы с AKS (Azure Kubernetes Service). Давайте детально рассмотрим возможные причины и способы решения данной проблемы.
1. Понимание концепции Passthrough Cluster
Passthrough Cluster в Istio используется для маршрутизации трафика к сервисам, которые не требуют мьютекса (matching) политики безопасности. Проще говоря, это означает, что трафик не проходит через Istio. В результате Kiali может не отображать статистику этого трафика, так как он не проходит через Envoy (прокси Istio).
2. Проверка конфигурации Istio
Поскольку вы упомянули, что у вас есть специфическая конфигурация для Istio в вашем AKS, необходимо убедиться, что ваши Service Entries настроены правильно. Вот несколько аспектов, на которые следует обратить внимание:
- Убедитесь, что ваши Service Entries корректно объявлены и соответствуют внешним сервисам, к которым вы хотите позволить доступ.
- Проверьте, что Service Entries имеют правильные настройки, такие как
ports
,addresses
, и что они включены в активное пространство имен. Неверные конфигурации могут привести к тому, что трафик будет считаться "Passthrough".
3. Настройка Prometheus
Вы упоминаете, что у вас могут быть проблемы с настройкой Prometheus. Для мониторинга трафика в Kiali важно, чтобы Prometheus правильно собирал метрики. Ваши ServiceMonitors выглядят неплохо, но есть несколько рекомендаций:
- Убедитесь, что ваши
ServiceMonitor
имеют правильные метки, чтобы они соответствовали вашим подам. Например, в вашем первом ServiceMonitor проверьте наличие меток в контейнере, чтобы исключить их из сбора данных. - Проверьте, что настройки путей и портов в ваших ServiceMonitor верны и соответствуют тем, что экспортирует Envoy Proxy (обычно это
/stats/prometheus
).
Например, если ваши поды не имеют аннотации prometheus.io/scrape
, они могут быть пропущены Prometheus:
metadata:
annotations:
prometheus.io/scrape: "true"
4. Настройка Kiali
Проверьте настройки Kiali, чтобы убедиться, что вы используете правильные разрешения и настройки подов для извлечения метрик маршрутов. Важные аспекты:
- Убедитесь, что Kiali настроен для доступа к Prometheus.
- Проверьте, правильно ли настроен отображение трафика для ваших сервисов в Kiali.
5. Диагностика и логирование
Если ничего из вышеуказанного не помогло, важно включить подробное логирование для Istio и Prometheus, чтобы выявить любые ошибки в маршрутизации или неправильно собранные метрики. Изучение логов поможет уточнить, куда именно уходит трафик и будь то ошибки в передаче данных.
Заключение
Отсутствие трафика в Kiali из "Passthrough cluster" можно исправить путем тщательной проверки конфигурации Istio, настройки Prometheus и Kiali, а также внимательного анализа логов для диагностики проблемы. Убедитесь, что все сервисы правильно настроены и что Prometheus правильно собирает метрики для анализа. Надеюсь, эти рекомендации помогут вам исправить ситуацию и увидеть нужный трафик в Kiali.