小编Dan*_*ern的帖子

尝试使用SSL从Spring Data Couchbase连接到Couchbase存储桶时出现ConnectTimeoutException

我正在尝试使用Spring Data Couchbase使用SSL证书连接到Couchbase服务器。我相信证书配置正确,并且可以使用CertAuth登录到存储桶,但是随后我看到了一个奇怪的ConnectTimeoutException。

在我的应用程序中,我正在使用Spring Data Couchbase(v 3.1.4RELEASE)连接到在Mac OS上运行的Couchbase 6.0服务器。要配置CouchbaseEnvironment,我将重写AbstractCouchbaseConfiguration类以提供我自己的CouchbaseEnvironment bean定义:

@Override
  @Bean(destroyMethod = "shutdown", name = BeanNames.COUCHBASE_ENV)
  public CouchbaseEnvironment couchbaseEnvironment() {
    CouchbaseEnvironment environment = DefaultCouchbaseEnvironment
        .builder()
        .sslEnabled(true)
        .sslKeystoreFile("src/main/resources/third.keystore")
        .sslKeystorePassword("storepass")
        .certAuthEnabled(true)
        .build();
    return environment;
  }
Run Code Online (Sandbox Code Playgroud)

同样,集群bean被定义为:

@Bean(destroyMethod = "disconnect", name = BeanNames.COUCHBASE_CLUSTER)
  public Cluster couchbaseCluster() throws Exception {
    Cluster cluster = CouchbaseCluster.create(couchbaseEnvironment(), getBootstrapHosts());
    cluster.authenticate(CertAuthenticator.INSTANCE);
    return cluster;
  }
Run Code Online (Sandbox Code Playgroud)

我已按照此处给出的说明进行操作:https : //docs.couchbase.com/server/6.0/manage/manage-security/configure-server-certificates.html在Couchbase服务器上创建所需的密钥/证书。

然后,我按照此处的说明进行操作:https : //docs.couchbase.com/server/6.0/manage/manage-security/configure-client-certificates.html 来配置客户端证书,并创建密钥库。该密钥库就是上面代码中提到的那个。

证书包含一个CN = <>,它对应于在Couchbase服务器上为存储桶创建的用户。

当我启动该应用程序并尝试与Couchbase和存储桶建立连接时,我认为这可行,因为当我将Couchbase服务器上的用户名更改为与客户端证书的CN =不同时, ,但出现异常,指出登录凭据无效。当我改回用户名以匹配证书中的内容时,看不到此类异常。

但是问题是我在日志中看到了ConnectExceptions(下面给出了完整的日志):

2019-02-05 09:36:06.869  WARN [-,,,] 91111 --- [tionScheduler-3] c.c.client.core.endpoint.Endpoint …
Run Code Online (Sandbox Code Playgroud)

ssl couchbase spring-data-couchbase tls1.2

5
推荐指数
0
解决办法
461
查看次数

如何在 Kubernetes 集群中使用 grpc-java 让 GRPC 的重试机制发挥作用?

我一直在尝试让 GRPC 的负载平衡在部署到 Kubernetes 集群的 Java 应用程序中工作,但并没有取得太大成功。似乎没有太多关于此的文档,但从在线示例中我可以看到,我现在应该能够在设置 ManagedChannel 时使用 '.defaultLoadBalancingPolicy("round_robin")' (在更高版本的 GRPC Java lib 中) 。

更具体地说,我使用的是 GRPC Java 库的 1.34.1 版本。我创建了两个 Spring Boot (v2.3.4) 应用程序,一个名为 grpc-sender,另一个名为 grpc-receiver。

grpc-sender 充当 GRPC 客户端,并将 (Netty) ManagedChannel 定义为:

@Bean
public ManagedChannel greetingServiceManagedChannel() {
  String host = "grpc-receiver";
  int port = 6565;
  return NettyChannelBuilder.forAddress(host, port)
      .defaultLoadBalancingPolicy("round_robin")
      .usePlaintext().build();
}
Run Code Online (Sandbox Code Playgroud)

然后grpc-receiver充当GRPC服务器:

Server server = ServerBuilder.forPort(6565)
        .addService(new GreetingServiceImpl()).build();
Run Code Online (Sandbox Code Playgroud)

我正在将这些应用程序部署到 Kubernetes 集群(暂时在 minikube 本地运行),并且我为 grpc-receiver 应用程序创建了一个 Service 作为无头服务,这样就可以实现 GRPC 负载均衡。

为了测试失败的请求,我做了两件事:

  • 在执行测试运行期间杀死 grpc-receiver pod 之一 - 例如,当我请求 grpc-sender …

java kubernetes grpc grpc-java

3
推荐指数
1
解决办法
8343
查看次数