从同一集群中的另一个Pod连接到Redis Pod

时间:2020-06-09 13:57:24

标签: kubernetes redis

在我的集群中,我有一个nodejs应用程序容器和一个redis容器,并且我试图从nodejs连接到redis,但出现以下错误:

[ioredis] Unhandled error event: Error: getaddrinfo ENOTFOUND redis at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:60:26)

值得注意的是,在我的nodejs应用程序中,我指向redis:6379,如果将指针更改为localhost:6379,则会出现ECONNREFUSED错误。

我的redis部署Yaml如下:

apiVersion: v1
kind: Pod
metadata:
  name: redis
spec:
  containers:
    - name: redis
      image: redis:5.0.4
      command:
        - redis-server
        - '/redis-master/redis.conf'
      env:
        - name: MASTER
          value: 'true'
      ports:
        - containerPort: 6379
      resources:
        limits:
          cpu: '0.1'
      volumeMounts:
        - mountPath: /redis-master-data
          name: data
        - mountPath: /redis-master
          name: config
  volumes:
    - name: data
      emptyDir: {}
    - name: config
      configMap:
        name: redis-config
        items:
          - key: redis-config
            path: redis.conf

Mu redis服务Yaml是:

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

我的应用程序的服务如下:

apiVersion: v1
kind: Service
metadata:
  name: bff
  annotations:
    prometheus.io/scrape: 'true'
    prometheus.io/port: '8080'
  labels:
    app: bff
spec:
  ports:
    - name: external
      port: 80
      targetPort: web
      protocol: TCP
    - name: metrics
      port: 8080
      targetPort: metrics
      protocol: TCP
  selector:
    app: bff

我已经尝试了针对类似问题的其他答案,但在我看来,它们似乎不起作用。

1 个答案:

答案 0 :(得分:2)

根本原因是您的服务selector定义与豆荚的标签不匹配。

来自Kubernetes服务文档的报价:

“服务”选择器的控制器连续扫描与其选择器匹配的Pod,然后将所有更新发布到也称为“ my-service”的Endpoint对象。

有关完整文档,请参见this link

简而言之,通过遵循this Kubernetes official example,您应该部署deployment“ redis-master-deployment.yaml”而不是裸盒。