Доступ к портам проверки работоспособности сервиса после настройки istio - PullRequest
0 голосов
/ 16 октября 2018

Итак, мы внедряем istio 1.0.2 с глобальными mtls, и пока все прошло хорошо.Для проверки работоспособности мы добавили отдельные порты к сервисам и настроили их в соответствии с документацией:

https://istio.io/docs/tasks/traffic-management/app-health-check/#mutual-tls-is-enabled

Наши порты приложений теперь на 8080, а порты проверок работоспособности на 8081.После этого Kubernetes может выполнять проверки работоспособности, и службы работают нормально.

Однако наше решение для мониторинга не может подключиться к порту проверки работоспособности.

Приложение мониторинга также находится в kubernetes и в настоящее время находится за пределами меша.В приведенном выше документе указано следующее:

Поскольку прокси-сервер Istio перехватывает только порты, явно объявленные в поле containerPort, трафик на порт 8002 обходит прокси-сервер Istio независимо от того, включен ли взаимный TLS Istio.e

Вот так мы его настроили.Таким образом, в нашем случае 8081 должен быть вне меша:

livenessProbe:
  failureThreshold: 3
  httpGet:
    path: /manage/health
    port: 8081
    scheme: HTTP
  initialDelaySeconds: 180
  periodSeconds: 10
  successThreshold: 1
  timeoutSeconds: 1
name: <our-service>
ports:
- containerPort: 8080
  name: http
  protocol: TCP
readinessProbe:
  failureThreshold: 3
  httpGet:
    path: /manage/health
    port: 8081
    scheme: HTTP
  initialDelaySeconds: 10
  periodSeconds: 10
  successThreshold: 1
  timeoutSeconds: 1

Однако мы не можем получить доступ к 8081 из другого модуля, который находится за пределами меша.

Например:

curl http://<our-service>:8081/manage/health
curl: (7) Failed connect to <our-service>:8081; Connection timed out

Если мы попробуем из другого модуля внутри меша, то istio выбрасывает 404, что, возможно, и ожидается.

Я попытался поиграться с правилами назначения, такими как:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: <our-service>-health
spec:
  host: <our-service>.namepspace.svc.cluster.local
  trafficPolicy:
    portLevelSettings:
    - port:
        number: 8081
      tls:
        mode: DISABLE

Но это просто убивает все возможности подключения к сервису, как внутри, так и через входной шлюз.

1 Ответ

0 голосов
/ 17 октября 2018

Согласно официальной документации Istio порт 8081 не будет проходить через Посланник Istio , следовательно, не будет доступен для других модулей вне вашей сервисной сетки, поскольку прокси-сервер Istio определяет толькозначение containerPort, передаваемое через сервис Pod.

Если вы строите сетку службы Istio без аутентификации TLS между модулями, есть возможность использовать один и тот же порт для базового сетевого маршрута к службе модуля и для проверки готовности / готовности.

Однако, если вы используете порт 8001 как для обычного трафика, так и для тестов живучести, проверка работоспособности завершится неудачно, когда включен взаимный TLS, поскольку HTTP-запрос отправляется из Kubelet, который не отправляет сертификат клиента в службу liveness-http.

Предполагая, что Istio Mixer предоставляет три конечных точки Prometheus , вы можете рассмотреть возможность использования Prometheus в качестве основного инструмента мониторинга для сбораи проанализируйте метрики сетки.

...