Сервис Откройте для себя с помощью облачных kubernetes Spring
Я делаю POC на простой архитектуре микросервисов с использованием типичного стека облачных вычислений Spring, но вместо сервера Eureka обнаружение служб выполняется с использованием Spring-cloud-kubernetes, который не работает.
Весь POC здесь - https://github.com/dhananjay12/spring-microservices-using-spring-kubernetes
Шлюз в качестве пограничного сервера и 2 нисходящих сервисов - сервис пользователя и контакт-сервис.
Настройка k8 находится в папке k8 s.
Нижестоящие сервисы имеют следующие зависимости:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
application.yml
server:
port: 8100
management:
endpoints:
web:
exposure:
include: '*'
spring:
cloud:
kubernetes:
enabled: true
reload:
enabled: true
eureka:
client:
enabled: false
bootstrap.yml:
spring:
application:
name: user-service
и аннотация @EnableDiscoveryClient
в основном классе.
Служба шлюза имеет слишком важные зависимости kubernetes:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes-ribbon</artifactId>
</dependency>
application.yml
server:
port: 8050
spring:
application:
name: gateway
cloud:
kubernetes:
enabled: true
reload:
enabled: true
gateway:
discovery:
locator:
lowerCaseServiceId: true
enabled: true
eureka:
client:
enabled: false
logging:
level:
root: DEBUG
org.springframework.gateway: TRACE
org.springframework.cloud.gateway: TRACE
org.springframework.cloud.loadbalancer: TRACE
management:
endpoints:
web:
exposure:
include: '*'
bootstrap.yml
spring:
application:
name: gateway
и аннотация @EnableDiscoveryClient
в основном классе.
Пожалуйста, ознакомьтесь с информацией о развертывании и обслуживании здесь - https://github.com/dhananjay12/spring-microservices-using-spring-kubernetes/tree/master/k8 s
Я могу добраться до шлюза, но это не маршрутизация к нисходящему сервису, такому как пользовательский сервис:
Например - /user-service/users/getPublicMailingAddress
выдает страницу ошибки Whitable
а логи в шлюзе показывают:
2019-07-07 06:40:30.017 TRACE 1 --- [or-http-epoll-2] o.s.c.g.h.p.RoutePredicateFactory : Pattern "[/my-nginx-nginx-ingress-controller/**]" does not match against value "/user-service/users/getPublicMailingAddress"
2 ответа
Spring Cloud Kubernetes требуется доступ к API Kubernetes, чтобы можно было получить список адресов для модулей, работающих для одной службы. Если вы используете Kubernetes, вам нужно просто выполнить следующую команду:
kubectl create clusterrolebinding admin --clusterrole=cluster-admin --serviceaccount=default:default
Ваш кластер работает в режиме RBAC? В таком случае вам, вероятно, придется создать учетную запись службы, назначить ей подходящую роль кластера и настроить развертывания для использования этой конкретной учетной записи службы.
В случае, если вы не хотите раскрывать все привилегии для модулей, следующие права доступа / ресурсы должны быть достаточными:
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: custom-role
rules:
- apiGroups: [""]
resources:
- endpoints
- namespaces
- pods
- services
verbs:
- get
- watch
- list