Получите список всех работающих подов для собственного сервиса - PullRequest
0 голосов
/ 16 июня 2020

Ситуация

  • У меня запущена служба Spring Boot внутри Kubernetes
  • Работает несколько экземпляров (в развертывании kubernetes настроено несколько реплик)
  • У меня есть входящий HTTP извне кластера, который попадает в один из экземпляров
  • Я хочу передать этот факт всем другим экземплярам

Вопрос

Есть ли простой, никаких внешних вещей не требуется, решение найти список «всех модулей моей службы»? Я думаю, что помню, что это могло быть возможно через разрешение DNS, но мой Google-Fu кажется слабым, чтобы что-то найти. так как мне это нужно только для одноразовой функции, я бы хотел не вводить какие-либо движущиеся части и сделать это как можно проще.

Ответы [ 2 ]

3 голосов
/ 16 июня 2020

Внутренний DNS K8s предоставит вам только IP-адрес службы. К счастью, существует ресурс Endpoints именно для того, чтобы получить модули, которые поддерживают службу.

С помощью kubectl вы можете проверить конечные точки следующим образом:

kubectl get endpoints nginx -o yaml

С помощью этой команды вы получите удержание имен Pod:

kubectl get endpoints nginx -o=jsonpath='{.subsets[*].addresses[*].targetRef.name}'

Чтобы выполнить то же самое из приложения Spring Boot, вы можете попробовать использовать официальную клиентскую библиотеку Kubernetes Java.

1 голос
/ 16 июня 2020

Вы можете перечислить все модули, стоящие за сервисом, запустив

$ kubectl get endpoints <service-name> -o=jsonpath='{.subsets[*].addresses[*].ip}' | tr ' ' '\n' | xargs -I % kubectl get pods --field-selector=status.podIP=%
...