使用带有git的spring配置服务器导致安全组问题

时间:2015-06-07 00:19:45

标签: spring-cloud netflix-eureka spring-cloud-connectors

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

com.netflix.discovery.DiscoveryClient:无法获得从响应http://user:{密码} AQBdTe9vjgOqANyfi + Ke5HYmhFJnuvsGJ + 8FOqLgdMdFInJkVRzy9XngylNp9KlX2lwPI13jT7ceDjBs9w4B6A15akQTHHP1q9rWwMcLtVCCKGFgvXSgQF + WWIItxBmIDGG4bSgDYZ6XQWl66T84PxjTBygErpmAjn + X2BWdtWtVmjXzpMQMaHGpiyLPoGIQYF4j9ZGpl16Jx79 + j6et6LStksrT3WxQuanhZwIkqZ827 + 2mlUB3kd5ocW7R0vC3JMGVZlGNfqYQwJIhSJ19lrq4gxm / zbGroYonW3QSHTiRlhlvOdovEua / 0dCl6 + s0iEHYZCBllr7jikEWmS5Px7U2TG8 / eQkjR8pUbSN6OE + OI2ZZUCNOT + mi75ZeeN1OtdQ = @本地:8761 /尤里卡/空

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

java.lang.IllegalArgumentException异常:在索引7在权威非法字符:http://user:{密码} AQBdTe9vjgOqANyfi + Ke5HYmhFJnuvsGJ + 8FOqLgdMdFInJkVRzy9XngylNp9KlX2lwPI13jT7ceDjBs9w4B6A15akQTHHP1q9rWwMcLtVCCKGFgvXSgQF + WWIItxBmIDGG4bSgDYZ6XQWl66T84PxjTBygErpmAjn + X2BWdtWtVmjXzpMQMaHGpiyLPoGIQYF4j9ZGpl16Jx79 + j6et6LStksrT3WxQuanhZwIkqZ827 + 2mlUB3kd5ocW7R0vC3JMGVZlGNfqYQwJIhSJ19lrq4gxm / zbGroYonW3QSHTiRlhlvOdovEua / 0dCl6 + s0iEHYZCBllr7jikEWmS5Px7U2TG8 / eQkjR8pUbSN6OE + OI2ZZUCNOT + mi75ZeeN1OtdQ = @本地:8761 /尤里卡/     在java.net.URI.create(URI.java:852)

这就是我所拥有的:

  1. 在cofig服务器application.yml:
  2.  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. bootstrap.properties:

      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. Eureka Server:
      2. application.yml

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

        bootstrap.yml:

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

        从例外情况来看,似乎是因为discoverClient不起作用,配置有什么特别之处? 但是,如果我从gitHub更改为本地文件存储进行配置,一切都很好。

        提前感谢您的建议。

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

        在config server的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
        

        在config client的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密码术扩展(JCE)无限强度管辖权政策文件”,并按照安装说明进行操作(基本上将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-a-key-store-for-testing

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

        5. 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:

            加密:   key:abc

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

          3. 那我的测试有什么问题?谢谢你的帮助

            这是我的错: 将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服务器,OU =单位,O =组织,L =城市,S =州,C = US”   -keypass changeme -keystore server.jks -storepass letmein

            谢谢

0 个答案:

没有答案