无法正确连接到Kubernetes中的Redis

在我的macOS上(不使用Minikube),我已经在这个例子之后对我的Kubernetes集群进行了build模,这意味着我已经按照这个顺序执行了这个逐字logging:

# Adding my own service to redix-proxy kubectl create -f ./redis/redis-service.yaml # Create a bootstrap master kubectl create -f examples/storage/redis/redis-master.yaml # Create a service to track the sentinels kubectl create -f examples/storage/redis/redis-sentinel-service.yaml # Create a replication controller for redis servers kubectl create -f examples/storage/redis/redis-controller.yaml # Create a replication controller for redis sentinels kubectl create -f examples/storage/redis/redis-sentinel-controller.yaml # Scale both replication controllers kubectl scale rc redis --replicas=3 kubectl scale rc redis-sentinel --replicas=3 # Adding my own NodeJS web client server kubectl create -f web-deployment.yaml 

唯一的区别是在redis-proxy.yaml我使用了映像image: kubernetes/redis-proxy而不是image: kubernetes/redis-proxy:v2因为我无法image: kubernetes/redis-proxy:v2

这些是我传递给ioredis创build我的Redis实例的对象(一个用于会话,一个用于主要):

config.js

 main: { host: 'redis', port: 6379, db: 5 }, session: { host: 'redis', port: 6379, db: 6 } 

错误日志:

在我的web客户端web-3448218364-sf1q0 pod中,我在日志中得到了这个重复:

 INFO: ctn/53 on web-3448218364-sf1q0: Connected to Redis event WARN: ctn/53 on web-3448218364-sf1q0: Redis Connection Error: { [Error: read ECONNRESET] code: 'ECONNRESET', errno: 'ECONNRESET', syscall: 'read' } INFO: ctn/53 on web-3448218364-sf1q0: Connected to Redis event WARN: ctn/53 on web-3448218364-sf1q0: Redis Connection Error: { [Error: read ECONNRESET] code: 'ECONNRESET', errno: 'ECONNRESET', syscall: 'read' } INFO: ctn/53 on web-3448218364-sf1q0: Connected to Redis event WARN: ctn/53 on web-3448218364-sf1q0: Redis Connection Error: { [Error: read ECONNRESET] code: 'ECONNRESET', errno: 'ECONNRESET', syscall: 'read' } WARN: ctn/53 on web-3448218364-sf1q0: Redis Connection Error: { [Error: connect ETIMEDOUT] errorno: 'ETIMEDOUT', code: 'ETIMEDOUT', syscall: 'connect' } WARN: ctn/53 on web-3448218364-sf1q0: Redis Connection Error: { [Error: connect ETIMEDOUT] errorno: 'ETIMEDOUT', code: 'ETIMEDOUT', syscall: 'connect' } WARN: ctn/53 on web-3448218364-sf1q0: Redis Connection Error: { [Error: connect ETIMEDOUT] errorno: 'ETIMEDOUT', code: 'ETIMEDOUT', syscall: 'connect' } WARN: ctn/53 on web-3448218364-sf1q0: Redis Connection Error: { [Error: connect ETIMEDOUT] errorno: 'ETIMEDOUT', code: 'ETIMEDOUT', syscall: 'connect' } INFO: ctn/53 on web-3448218364-sf1q0: Connected to Redis event WARN: ctn/53 on web-3448218364-sf1q0: Redis Connection Error: { [Error: read ECONNRESET] code: 'ECONNRESET', errno: 'ECONNRESET', syscall: 'read' } INFO: ctn/53 on web-3448218364-sf1q0: Connected to Redis event 

在我的Redis redis-proxy pod中,我在日志中重复了这一点:

 Error connecting to read: dial tcp :0: connection refused 

群集信息:

 $ kubectl get svc NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes 10.91.240.1 <none> 443/TCP 2d redis 10.91.251.170 <none> 6379/TCP 31m redis-sentinel 10.91.250.118 <none> 26379/TCP 31m web 10.91.240.16 <none> 80/TCP 31m $ kubectl get po NAME READY STATUS RESTARTS AGE redis-2frd0 1/1 Running 0 34m redis-master 2/2 Running 0 34m redis-n4x6f 1/1 Running 0 34m redis-proxy 1/1 Running 0 34m redis-sentinel-k8tbl 1/1 Running 0 34m redis-sentinel-kzd66 1/1 Running 0 34m redis-sentinel-wlzsb 1/1 Running 0 34m web-3448218364-sf1q0 1/1 Running 0 34m $ kubectl get deploy NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE web 1 1 1 1 39m 

问题1 )现在,我需要将我的应用程序连接到Redis窗格。 我应该连接到redis-proxy权利? 所以,我创build了这个redis-service.yaml服务:

 apiVersion: v1 kind: Service metadata: name: redis spec: ports: - port: 6379 targetPort: 6379 selector: name: redis-proxy role: proxy 

我相信我已经在端口6379连接到redis ,因为如果是这样,我通常会得到另一个错误消息。 进入我的web容器web-3448218364-sf1q0的bash shell,我看到了REDIS_SERVICE_PORT=6379REDIS_SERVICE_HOST=10.91.251.170printenvvariables。

问题2 )在我的错误日志中,通过dial tcp :0:是什么意思? 在我的交互式Kubernetes控制台下的服务和内部端点列,我看到这个redis服务:

 redis:6379 TCP redis:0 TCP 

这是0 TCP与此有关? 我所有的服务都在控制台中列出了0个TCP,但是正如你所看到的,不是从kubectl get svc的CLI kubectl get svc