Может ли приложение Cloud Foundry взаимодействовать со службой, работающей на узле ячейки Diego?
Можно ли разрешить процессу, работающему внутри контейнера приложения Cloud Foundry, создавать TCP-соединение с портом, открытым процессом, запущенным в ячейке Diego, на которой размещен контейнер? Если да, то существуют ли различия между контейнерами приложений на основе пакетов сборки и контейнерами приложений на основе образов Docker?
Наш вариант использования — передача следов агенту, развернутому в ячейке Диего.
Я пробовал использовать адрес CF_INSTANCE_IP и различные альтернативы в сочетании с подходящими группами безопасности, но не смог заставить это работать. Честно говоря, я даже не знаю, как лучше всего обратиться к хозяину «Diego Cell». Внутри контейнеров я вижу запросы на очистку метрик, которые агент запускает в отношении контейнера. Сообщается, что они поступают с IP 169.254.0.1 (который, насколько я понимаю, является адресом виртуального маршрутизатора, который Cloud Foundry помещает в каждый контейнер). Журналы агента для тех же запросов сообщают, что агент связывается с контейнером, используя CF_INSTANCE_INTERNAL_IP.
Что меня действительно удивляет, так это то, что приложения могут открывать TCP-соединения с соответствующим портом на всех других ячейках Diego в кластере при использовании IP-адреса, сообщаемого CF_INSTANCE_IP в контейнерах, работающих в этих других ячейках. Единственное соединение, которое НЕ работает, — это соединение с портом агента на собственной ячейке Diego Cell.
Любые указатели/помощь приветствуются. Мы используем собственную установку CF на основе версии с открытым исходным кодом.
1 ответ
Оказалось, что это возможно с помощью следующих шагов:
- Настройте задания Garden в ячейках Diego с помощью
allow_host_access: true
* Настройте задания Silk-daemon в ячейках Diego с помощьюhost_tcp_access: [10.0.0.0/16:<targetPort>]
- Настройте подходящую группу безопасности приложения, чтобы разрешить доступ из контейнеров к целевому порту.