Сервис Откройте для себя с помощью облачных kubernetes Spring - PullRequest
0 голосов
/ 07 июля 2019

Я делаю POC на простой архитектуре микросервисов с использованием типичного стека облачных вычислений Spring, но вместо сервера Eureka обнаружение служб выполняется с помощью spring-cloud-kubernetes, который не работает.

Весь POCздесь - https://github.com/dhananjay12/spring-microservices-using-spring-kubernetes

Шлюз в качестве пограничного сервера и 2 нисходящих сервисов - пользовательский сервис и контактный сервис.

Настройка k8 находится в папке k8s.

У последующих служб есть следующие зависимости:

<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 вmain class.

Служба шлюза имеет слишком важные зависимости 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 в основном классе.

Пожалуйста, ознакомьтесь с yaml развертывания и обслуживания здесь - https://github.com/dhananjay12/spring-microservices-using-spring-kubernetes/tree/master/k8s

Я могу добраться до шлюза, но он не маршрутизируется в нисходящий потоксервис как пользовательский сервис:

Например - / user-service / users / getPublicMailingAddress

выдает страницу ошибки Whitable

enter image description here

, а журналы в шлюзе показывают:


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 ]

0 голосов
/ 17 июля 2019

Spring Cloud Kubernetes требуется доступ к API Kubernetes, чтобы можно было получить список адресов для модулей, работающих для одной службы. Если вы используете Kubernetes, вам нужно просто выполнить следующую команду:

kubectl create clusterrolebinding admin --clusterrole=cluster-admin --serviceaccount=default:default
0 голосов
/ 08 июля 2019

Ваш кластер работает в режиме RBAC? В таком случае вам, вероятно, придется создать учетную запись службы, назначить ей подходящую роль кластера и настроить развертывания для использования этой конкретной учетной записи службы.

В случае, если вы не хотите раскрывать все привилегии для модулей, следующие права доступа / ресурсы должны быть достаточными:

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: custom-role
rules:
- apiGroups: [""]
  resources:
  - endpoints
  - namespaces
  - pods
  - services
  verbs:
  - get
  - watch
  - list
...