在我的集群中,我有一个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
我已经尝试了针对类似问题的其他答案,但在我看来,它们似乎不起作用。
答案 0 :(得分:2)
根本原因是您的服务selector
定义与豆荚的标签不匹配。
来自Kubernetes服务文档的报价:
“服务”选择器的控制器连续扫描与其选择器匹配的Pod,然后将所有更新发布到也称为“ my-service”的Endpoint对象。
有关完整文档,请参见this link。
简而言之,通过遵循this Kubernetes official example,您应该部署deployment
“ redis-master-deployment.yaml”而不是裸盒。