Прошло много времени с тех пор, как вы спросили, а хорошего ответа пока нет. Я столкнулся с той же проблемой, и я не смог найти ничего лучше, чем упомянутое вами предложение.
Для протокола мне удалось скрыть нежелательные услуги, используя эту стратегию. В моем сценарии у меня есть Spring Cloud Gateway, использующий Spring Cloud Kubernetes. Таким образом, шлюз обнаруживает все службы K8s в одном пространстве имен.
Прежде всего, я добавил метку expose: "true"
к тем сервисам, которые будут доступны миру через шлюз:
kind: Service
apiVersion: v1
metadata:
name: microservice-spring-boot
namespace: my-namespace
labels:
expose: "true"
Затем я использовал метку как условие в include-expression
из локатора:
spring:
cloud:
gateway:
discovery:
locator:
enabled: true # Create routes for the discovered services
include-expression: metadata['expose'] == 'true'
Spring Cloud Kubernetes автоматически добавляет значения из меток сервиса K8s в обнаруженные метаданные сервиса. Это настраивается в этом свойстве, которое по умолчанию равно true
:
spring.cloud.kubernetes.discovery.metadata.labels-prefix
Шлюз будет иметь маршруты только для сервисов K8s, соответствующих этой метке, таким образом, открывая только их и скрывая любые другие.
person
Angel Pinazo Perpiñán
schedule
05.02.2021