0

我现在正在尝试设置使用 spring config server / spring config client 和 eureka server 一起进行服务发现。当我使用本地文件系统保存配置时,一切都很好,但是当我更改为 gitHub 保存配置时,我无法启动 spring config 客户端,并收到以下错误消息:

com.netflix.discovery.DiscoveryClient : Can't get a response from http://user :{cipher}AQBdTe9vjgOqANyfi+Ke5HYmhFJnuvsGJ+8FOqLgdMdFInJkVRzy9XngylNp9KlX2lwPI13jT7ceDjBs9w4B6A15akQTHHP1q9rWwMcLtVCCKGFgvXSgQF+WWIItxBmIDGG4bSgDYZ6XQWl66T84PxjTBygErpmAjn+X2BWdtWtVmjXzpMQMaHGpiyLPoGIQYF4j9ZGpl16Jx79+j6et6LStksrT3WxQuanhZwIkqZ827+2mlUB3kd5ocW7R0vC3JMGVZlGNfqYQwJIhSJ19lrq4gxm/zbGroYonW3QSHTiRlhlvOdovEua/0dCl6+s0iEHYZCBllr7jikEWmS5Px7U2TG8/eQkjR8pUbSN6OE+OI2ZZUCNOT+mi75ZeeN1OtdQ= @localhost:8761/eureka/null

无法联系任何 eureka 节点 - 可能是安全组问题?

java.lang.IllegalArgumentException: Illegal character in authority at index 7: http://user :{cipher}AQBdTe9vjgOqANyfi+Ke5HYmhFJnuvsGJ+8FOqLgdMdFInJkVRzy9XngylNp9KlX2lwPI13jT7ceDjBs9w4B6A15akQTHHP1q9rWwMcLtVCCKGFgvXSgQF+WWIItxBmIDGG4bSgDYZ6XQWl66T84PxjTBygErpmAjn+X2BWdtWtVmjXzpMQMaHGpiyLPoGIQYF4j9ZGpl16Jx79+j6et6LStksrT3WxQuanhZwIkqZ827+2mlUB3kd5ocW7R0vC3JMGVZlGNfqYQwJIhSJ19lrq4gxm/zbGroYonW3QSHTiRlhlvOdovEua/0dCl6+s0iEHYZCBllr7jikEWmS5Px7U2TG8/eQkjR8pUbSN6OE+OI2ZZUCNOT+mi75ZeeN1OtdQ=@本地主机:8761/eureka/ 在 java.net.URI.create(URI.java:852)

这就是我所拥有的:

  1. 在 cofig 服务器 application.yml 中:
 spring:
      application:
        name: spirent-config-server
      cloud:
        config:
          server:
            git:
              uri:  https://github.com/spring-cloud-samples/config-repo
              #searchPaths: foo,bar*

    server:
      port: 8888
  1. 在配置客户端中:

引导程序属性:

spring.application.name= foo
spring.profiles.active= development
spring.cloud.config.uri= http://localhost:8888

和 application.yml

eureka:
  instance:
    hostname: ${host.instance.name:frank1}
    nonSecurePort: ${host.instance.port:8080}
    metadataMap:
      instanceId: ${host.instance.instanceid:frank_123}
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

server:
  port: ${host.instance.port:8080}
  1. 尤里卡服务器:

应用程序.yml

server:
  port: 8761

eureka:
  client:
    registerWithEureka: false
    fetchRegistry: false
  server:
    waitTimeInMsWhenSyncEmpty: 0

引导程序.yml:

spring:
  application:
    name: eureka
  cloud:
    config:
      uri: ${CONFIG_SERVER_URL:http://localhost:8888}

从异常来看,似乎是因为discoverClient不工作,配置有什么特别的吗?但是如果我从 gitHub 更改为本地文件存储进行配置,一切都很好。

提前感谢您的建议。

基于spring cloud文档,我是这样做的:

在配置服务器的 application.yml 中:

spring:
  application:
    name: spirent-config-server
  cloud:
    config:
      server:
        git:
          uri:  https://github.com/spring-cloud-samples/config-repo
          #searchPaths: foo,bar*
encrypt:
  key: abc

server:
  port: 8888

在 Eureka Server 的 application.yml 中:

server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

  server:
    waitTimeInMsWhenSyncEmpty: 0

encrypt:
  key: abc

在配置客户端的 application.yml 中:

eureka:
  instance:
    hostname: ${host.instance.name:frank1}
    nonSecurePort: ${host.instance.port:8080}
    leaseRenewalIntervalInSeconds: 5 #default is 30, recommended to keep default
    metadataMap:
      #instanceId: ${host.instance.instanceid:frank_123}
      instanceId: ${spring.application.name}:${spring.application.instance_id:${random.value}}
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

server:
  port: ${host.instance.port:8080}

encrypt:
  key: abc

但是,问题是在我启动 Eureka 配置服务器后,它很好,没有异常,但是在我启动配置客户端后,我得到了同样的异常:

Can't contact any eureka nodes - possibly a security group issue?

java.lang.IllegalArgumentException: Illegal character in authority at index 7: http://user:{cipher}AQBdTe9vjgOqANyfi+Ke5HYmhFJnuvsGJ+8FOqLgdMdFInJkVRzy9XngylNp9KlX2lwPI13jT7ceDjBs9w4B6A15akQTHHP1q9rWwMcLtVCCKGFgvXSgQF+WWIItxBmIDGG4bSgDYZ6XQWl66T84PxjTBygErpmAjn+X2BWdtWtVmjXzpMQMaHGpiyLPoGIQYF4j9ZGpl16Jx79+j6et6LStksrT3WxQuanhZwIkqZ827+2mlUB3kd5ocW7R0vC3JMGVZlGNfqYQwJIhSJ19lrq4gxm/zbGroYonW3QSHTiRlhlvOdovEua/0dCl6+s0iEHYZCBllr7jikEWmS5Px7U2TG8/eQkjR8pUbSN6OE+OI2ZZUCNOT+mi75ZeeN1OtdQ=@localhost:8761/eureka/
    at java.net.URI.create(URI.java:852)
    at com.sun.jersey.api.client.Client.resource(Client.java:433)
    at com.netflix.discovery.DiscoveryClient.makeRemoteCall(DiscoveryClient.java:1091)
    at com.netflix.discovery.DiscoveryClient.makeRemoteCall(DiscoveryClient.java:1060)
    at com.netflix.discovery.DiscoveryClient.getAndStoreFullRegistry(DiscoveryClient.java:835)

谁能告诉我我的错误在哪里?这只发生在使用 GIT 作为配置服务器数据源时,但在本地文件数据源中,没有发生错误。

谢谢

这些是我尝试解决关键问题的步骤,但又失败了:

  1. 从 Oracle 下载“Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files”,然后按照说明进行安装(基本上将 JRE lib/security 目录中的 2 个策略文件替换为您下载的文件)。

  2. 现在如果我运行 spring encrypt mysecret --key foo ,它是成功的,这意味着 JCE 安装正确;

  3. 创建用于测试的密钥库:使用此: https ://github.com/spring-cloud/spring-cloud-config/blob/master/docs/src/main/asciidoc/spring-cloud-config.adoc#creating-用于测试的密钥存储

  4. 在我的配置服务器中更新 application.yml 后,application.yml 是这样的:

spring:
  application:
    name: spirent-config-server
  cloud:
    config:
      server:
        git:
          uri:  https://github.com/spring-cloud-samples/config-repo
          #searchPaths: foo,bar*
encrypt:
  keyStore:
    location: classpath:/server.jks
    password: letmein
    alias: abc
    secret: changeme
  key: abc

server:
  port: 8888

  1. 将此添加到 eureka 服务器和配置客户端 application.yml:

    加密:密钥:abc

  2. 运行一切:结果是同样令人讨厌的错误

那么我的测试出了什么问题?谢谢你的帮助

这是我的错:将 application.yml 更改为:

spring:
  application:
    name: configserver
encrypt:
  failOnError: false
  keyStore:
    #location: classpath:keystore.jks
    #password: ${KEYSTORE_PASSWORD:foobar} # don't use a default in production
    #alias: test
    location: classpath:server.jks
    password: letmein
    alias: mytestkey
    secret: changeme

然后使用此命令生成完全解决问题的文件:

keytool -genkeypair -alias mytestkey -keyalg RSA \ -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" \ -keypass changeme -keystore server.jks -storepass letmein

谢谢

4

0 回答 0