Проверка работоспособности Kubernetes на защищенной конечной точке проверки работоспособности mTLS

Мне нужна помощь в решении конкретной проблемы.

Как заставить проверку работоспособности Kubernetes работать на защищенной конечной точке проверки работоспособности mTLS по протоколу https, пожалуйста?

Мое приложение - это веб-приложение, в котором конечная точка проверки работоспособности отображается через определенный порт, тот же порт, что и другие конечные точки бизнеса.

Для проверки безопасности, аудита и соответствия я должен защитить все свои конечные точки через mTLS, даже простую и невинную конечную точку проверки работоспособности.

Согласно проверке безопасности, аудита и соответствия, я не могу открыть какие-либо другие порты, например, для моих рабочих конечных точек на https-порту 1, но работоспособность на http-порте 2.

Следовательно, это не работает и мое приложение помечается как неработающее.

          livenessProbe:
            httpGet:
              path: /health
              port: 8080
              scheme: HTTP
            initialDelaySeconds: 10
            periodSeconds: 10

Просто чтобы подтвердить во время теста, мы отключили https и mTLS, включив старый добрый http, все работает отлично, но мы просто не можем этого сделать.

Как решить эту проблему, пожалуйста?

Спасибо.


person PatPatPat    schedule 23.09.2020    source источник
comment
Вы используете Istio в своем кластере? Вы проверили istio.io/latest/ документы / задачи / безопасность / аутентификация / authn-policy /   -  person Mariusz K.    schedule 24.09.2020
comment
Привет, Мариус, спасибо за комментарий. К сожалению, мы не используем Istio, и, надеюсь, я смогу найти решение, не добавляя слишком много зависимостей.   -  person PatPatPat    schedule 24.09.2020
comment
Боюсь, что Kubernetes не поддерживает его по умолчанию.   -  person Mariusz K.    schedule 06.10.2020
comment
: '(Спасибо, Мариус, за комментарий!   -  person PatPatPat    schedule 06.10.2020


Ответы (4)


Я ищу решение той же проблемы. Что я планирую сделать, так это иметь доверенный сертификат внутри модуля и вместо использования http-пробы использовать командный зонд и скрутить мою конечную точку проверки работоспособности изнутри модуля с помощью указанного сертификата.

person Rodolfo Damiani Albuquerque    schedule 10.04.2021

Вы можете использовать скрипт для проверки готовности. внутри этого сценария вы можете просто указать cURL на конечной точке, а также предоставить требуемый сертификат и сертификат CA.

Например:

curl -k https://<url>/health -v –key key.pem –cacert ca.pem –cert client.pem

Я предполагаю, что сертификат должен храниться в секрете в том же пространстве имен. Таким образом, вы можете смонтировать секрет с сертификатом в своем модуле, чтобы ваш сценарий мог использовать этот путь для доступа к сертификатам.

person Rakesh Singh Rana    schedule 11.04.2021
comment
Хотя это решение для использования сценария оболочки, я действительно надеялся на собственное решение, использующее уже существующий HTTP-зонд. Кроме того, наш базовый образ является проверенным и не может установить curl, wget и т. Д. Но да, я считаю, что это рабочее решение. - person PatPatPat; 12.04.2021
comment
вы можете попробовать изменить схему: http на https? livenessProbe: httpGet: путь: / здоровье порт: 8080 схема: HTTPS initialDelaySeconds: 10 periodSeconds: 10 - person Rakesh Singh Rana; 12.04.2021

Можете попробовать сменить схему с HTTP на HTTPS?

livenessProbe: httpGet: путь: / здоровье порт: 8080 схема: HTTPS initialDelaySeconds: 10 periodSeconds: 10

Если в поле схемы установлено значение HTTPS, кубелет отправляет HTTPS-запрос, пропуская проверку сертификата.

person Rakesh Singh Rana    schedule 12.04.2021

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

person Rakesh Singh Rana    schedule 12.04.2021
comment
Второй порт тоже будет https. Не думаю, что в рамках одной службы один порт можно открыть по http, один по https - person PatPatPat; 12.04.2021
comment
Это может быть сделано. Но здесь я говорю об открытии порта внутри вашего модуля. - person Rakesh Singh Rana; 12.04.2021