Сеть контейнер-контейнер Cloud Foundry через https

У нас есть два приложения, работающих на облачной основе ibm (appA и appB). appA обращается к appB через сеть контейнер-контейнер, в то время как appB также доступен извне по маршруту Gorouter. Дело в том, что пока это http-8080 наше приложение выставляет - все хорошо.

Теперь нам нужно создать сеть от контейнера к контейнеру через https. Мы настроили приложение для предоставления доступа к https-8080. 8080 используется, поскольку https://docs.cloudfoundry.org/devguide/custom-ports.html утверждает, что:

By default, apps only receive requests on port 8080 for both HTTP and TCP routing, 
and so must be configured, or hardcoded, to listen on this port

Сеть между контейнерами теперь работает, как и ожидалось, с использованием https. Но мы больше не можем использовать appB по внешнему маршруту Gorouter.

Как лучше всего запустить все, как мы ожидаем?

1 ответ

На этот вопрос нет хорошего ответа, по крайней мере, в то время, когда я это пишу.

Однако у вас есть несколько вариантов:

  1. Вручную настройте HTTPS для внутреннего маршрута. Для этого вам нужно будет использовать инструкции для вашего приложения / сервера по настройке HTTPS. Затем используйте любые функции, которые предоставляет ваш buildpack, чтобы внедрить это подтверждение в контейнер приложения. Это также потребует, чтобы вы связали и отправили сертификаты TLS с вашим приложением. Платформа не будет предоставлять вам сертификаты TLS, если вы выберете этот вариант.

    Уловка для того, чтобы заставить работать как внутренний, так и публичный маршрут, заключается в том, что вам нужно, чтобы ваше приложение прослушивало порт 8080 и порт, который вы выбираете для своего HTTPS-трафика. Пока вы продолжаете принимать HTTP-трафик на порт 8080, ваши общедоступные маршруты должны продолжать работать.

  2. Если вам нужно быстрое, но не идеальное решение, вы можете использовать порт 61001. В более новых версиях Cloud Foundry этот порт используется Envoy для приема трафика в ваше приложение по HTTPS. Затем Envoy передает запрос в ваше приложение через HTTP через порт 8080. Вы также можете использовать этот порт для своего контейнера для трафика контейнера, однако настроенное имя субъекта в сертификате TLS не будет соответствовать вашему маршруту.

    Вот пример того, как будет выглядеть название темы.

     subject: OU=organization:639f74aa-5d97-4a47-a6b3-e9c2613729d8 + OU=space:10180e2b-33b9-44ee-9f8f-da96da17ac1a + OU=app:10a4752e-be17-41f5-bfb2-d858d49165f2; CN=b7520259-6428-4a52-60d4-5f25
    

    Поскольку он использует этот формат, вам нужно, чтобы ваши клиенты игнорировали ошибки сопоставления имени субъекта сертификата (не идеально, поскольку это ослабляет HTTPS) или, возможно, создать настраиваемый сопоставитель имени хоста.


Как бы то ни было, я не думаю, что вам нужно или нужно менять порт. Обычно это используется, если ваше приложение не гибкое и не может прослушивать порт 8080. Оно меняет порт для входящего трафика. Поскольку вы используете только сеть C2C, эта опция вам не нужна.

Насколько я понимаю, вам нужен HTTPS для трафика C2C. В этом случае общественный трафик не имеет значения. Он по-прежнему может проходить через Горутер к порту 8080. Для трафика "контейнер-контейнер" вы можете выбрать любой порт. Вам просто нужно убедиться, что для выбранного порта настроена сетевая политика, разрешающая этот трафик (по умолчанию весь трафик C2C блокируется). После установки сетевой политики вы можете подключаться напрямую через любой назначенный порт.

Другие вопросы по тегам