gpt4 book ai didi

redis - Kubernetes - 无法从同一集群上的另一个 pod 连接到 redis pod

转载 作者:IT王子 更新时间:2023-10-29 06:12:43 26 4
gpt4 key购买 nike

同一集群上的 pod 之间的连接失败。

据我了解,默认情况下,pods 暴露在 yaml 文件中指定的端口上。例如,我为 redis 配置了我的部署文件,如下所示:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: redis
labels:
app: myapp
spec:
replicas: 1
template:
metadata:
labels:
app: myapp
spec:
containers:
- env:
- name: REDIS_PASS
value: '**None**'
image: tutum/redis
ports:
- containerPort: 6379
name: redis
restartPolicy: Always

下面是容器尝试访问redis的pod的部署文件:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: jks
labels:
app: myapp
spec:
replicas: 1
template:
metadata:
labels:
app: myapp
spec:
imagePullSecrets:
- name: myappsecret
containers:
- env:
- name: JOBQUEUE
value: vae_jobqueue
- name: PORT
value: "80"
image: repo.url
name: jks
ports:
- containerPort: 80
volumeMounts:
- name: config-vol
mountPath: /etc/sys0
volumes:
- name: config-vol
configMap:
name: config

restartPolicy: Always

我还没有创建任何服务。但这是必需的吗?该 pod 将被属于同一 helm chart 的另一个 pod 访问。使用此设置,第二个 pod 尝试访问 redis 时出现错误:

2018-11-21T16:12:31.939Z - [33mwarn[39m:  Error: Redis connection to redis:6379 failed - getaddrinfo ENOTFOUND redis redis:6379
at errnoException (dns.js:27:10)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:78:26)

如何确保我的 pod 能够连接到端口 6379 上的 redis pod?

----更新----

这是我的图表现在的样子:

# Source: mychartv2/templates/redis-service.yaml
apiVersion: v1
kind: Service
metadata:
name: redis
spec:
selector:
app: myapp-redis
clusterIP: None
ports:
- name: redis
port: 6379
targetPort: 6379
---
# Source: mychartv2/templates/redis-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: redis
labels:
app: myapp-redis
spec:
replicas: 1
template:
metadata:
labels:
app: myapp-redis
spec:
containers:
- env:
- name: REDIS_PASS
value: '**None**'
image: tutum/redis
ports:
- containerPort: 6379
name: redis
restartPolicy: Always
---
# Source: mychartv2/templates/jks-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: jks
labels:
app: myapp-jks
spec:
replicas: 1
template:
metadata:
labels:
app: myapp-jks
spec:
imagePullSecrets:
- name: jkssecret
containers:
- env:
- name: JOBQUEUE
value: jks_jobqueue
- name: PORT
value: "80"
image: repo.url
name: jks
ports:
- containerPort: 80
volumeMounts:
- name: config-vol
mountPath: /etc/sys0
volumes:
- name: config-vol
configMap:
name: jksconfig

restartPolicy: Always

注意:我使用 minikube 作为我的 kubernetes 集群

最佳答案

你需要一个 Service访问 Redis pod。使用您当前的资源 redis:6379 根本不存在,具有 metadata.name: redis 和适当的 spec.selector 的服务将使它成为现实可用。

请注意,您发布的 2 个部署具有与 myapp 相同的 metadata.labels.app 值,因此您必须更改一个为 myapp-例如 redis,因此该服务将针对正确的 pod(在该示例中使用 metadata.name: myapp-redis),而不是来自您的 HTTP 应用程序的 pod。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: redis
labels:
app: myapp
spec:
replicas: 1
template:
metadata:
labels:
app: myapp-redis
spec:
containers:
- env:
- name: REDIS_PASS
value: '**None**'
image: tutum/redis
ports:
- containerPort: 6379
name: redis
restartPolicy: Always

apiVersion: v1
kind: Service
metadata:
name: redis
spec:
selector:
app: myapp-redis
ports:
- protocol: TCP
port: 6379

此外,您在问题中添加了标签 kubernetes-helm,因此如果您使用的是 Helm,我强烈推荐 this stable chart : 只需使用 helm install stable/redis 安装它,您就可以使用 redis-master:6379 访问您的 Redis master 并使用 访问任何只读从属服务器>redis-slave:6379。如果你不需要/想要奴隶,你可以避免拥有奴隶,只需通过 the configuration知道怎么做。

关于redis - Kubernetes - 无法从同一集群上的另一个 pod 连接到 redis pod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53416642/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com