【问题标题】:Deploying a Spring boot Application with Redis in Kubernetes--Jedis Connection Refused Error在 Kubernetes 中使用 Redis 部署 Spring Boot 应用程序--Jedis Connection Refused 错误
【发布时间】:2019-04-01 12:04:39
【问题描述】:

部署到kubernetes时,redis连接无法建立连接,因为jedis连接被拒绝错误。

"message": "Cannot get Jedis connection; nested exception is 
redis.clients.jedis.exceptions.JedisConnectionException: 
java.net.ConnectException: Connection refused (Connection refused)",

部署yaml文件:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: redis-master
spec:
  selector:
    matchLabels:
      app: redis
  replicas: 1
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
      - name: redis-master
        image: gcr.io/google_containers/redis:e2e

        ports:
        - containerPort: 6379

        volumeMounts:
        - name: redis-storage
          mountPath: /data/redis

      volumes:
      - name: redis-storage
---
apiVersion: v1
kind: Service
metadata:
  name: redis-master
  labels:
    app: redis
spec:
  ports:
    - port: 6379
  selector:
    app: redis

---项目中使用的Jedis示例代码:

JedisConnectionFactory jedisConnectionFactoryUpdated() {

        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
        redisStandaloneConfiguration.setHostName("redis-master");
        redisStandaloneConfiguration.setPort(6379);

        JedisClientConfigurationBuilder jedisClientConfiguration = JedisClientConfiguration.builder();
        jedisClientConfiguration.connectTimeout(Duration.ofSeconds(60));// 60s connection timeout

        JedisConnectionFactory jedisConFactory = new JedisConnectionFactory(redisStandaloneConfiguration,
                jedisClientConfiguration.build());

        return jedisConFactory;
    }

有人能解决这个问题吗? TIA。

【问题讨论】:

  • 您是否尝试过使用“redis-master..svc.cluster.local”作为主机名?
  • @AlexanderPankin 我没试过。 TIA,我会检查这个。

标签: spring spring-boot kubernetes jedis spring-data-redis


【解决方案1】:

您需要先更新您的服务以反映:

apiVersion: v1
kind: Service
metadata:
  name: redis-master
  labels:
    app: redis
spec:
  ports:
    - port: 6379
      targetPort: 6379
  selector:
    app: redis

完成后,您可以使用 nmap 检查您的 redis 服务是否启动并响应。这是一个使用我的 nmap 图像的示例:

kubectl run --image=appsoa/docker-alpine-nmap --rm -i -t nm -- -Pn 6379 redis-master

另外,请确保 redis 和您的 Spring Boot 应用程序都部署到相同的命名空间。如果没有,您需要使用明确定义您的主机名。 (即:“redis-master.mynamespace”)。

【讨论】:

  • 谢谢ymateo !这就是答案。我犯了这个错误:)
猜你喜欢
  • 1970-01-01
  • 2022-10-01
  • 1970-01-01
  • 2020-01-16
  • 2018-08-29
  • 1970-01-01
  • 2017-09-30
  • 1970-01-01
  • 2014-09-10
相关资源
最近更新 更多