最近在学习 Kubernetes。我正在尝试使用 redis 但出现以下错误:
Error:Error -3 connecting to redis:6379. Temporary failure in name resolution.
Run Code Online (Sandbox Code Playgroud)
我在用着:
conn = redis.StrictRedis(host='redis', port=6379)
Run Code Online (Sandbox Code Playgroud)
码头工人作曲家:
redis:
image: redis:alpine
ports:
- "6379:6379"
Run Code Online (Sandbox Code Playgroud)
redis-deploy.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-deploy
spec:
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: redis:alpine
ports:
- containerPort: 6379
Run Code Online (Sandbox Code Playgroud)
服务redis:
apiVersion: v1
kind: Service
metadata:
labels:
app: redis
name: redis
spec:
selector:
app: redis
type: NodePort
ports:
- port: 6379
protocol: TCP
Run Code Online (Sandbox Code Playgroud)
kubectl 获取 svc
redis NodePort 10.152.183.209 <none> 6379:32649/TCP 7m31s
Run Code Online (Sandbox Code Playgroud)
编辑:图像是从 docker 中提取的,这是部署文件之一。
apiVersion: apps/v1
kind: Deployment
metadata:
name: greeter-client-deploy
spec:
replicas: 10
selector:
matchLabels:
app: greeter-client
minReadySeconds: 10
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
template:
metadata:
labels:
app: greeter-client
spec:
containers:
- name: greeter-client
image: seancork92/greeter_client:latest
Run Code Online (Sandbox Code Playgroud)
发生的情况是您使用NodePort公开您的 Redis 实例。Kubernetes 为 NodePorts 保留了非常特定范围的高编号网络端口,以避免与常用端口(如 22 或本例中的 6379(如 Redis))发生冲突。
当您运行kubectl get svc返回的服务时,表明 Redis 正在端口转发到端口 上的主机32649。因此,当您尝试对 Redis 进行连接时,您应该使用此端口而不是 6379。(还要确保您的防火墙和网络拓扑也已正确配置)。
那么,我们该何去何从?嗯,我很难说。我缺乏信息来告诉您的客户端连接源自何处以及集群在何处运行。如果您的客户端位于集群(又名另一个 Pod)内,您应该考虑配置ClusterIP服务而不是 NodePort 服务。
如果您的客户端位于集群外部,我给您的建议是研究如何在 Kubernetes 中配置LoadBalancer服务类型和Ingress资源。
这将允许您启动专用 IP。您可以在任何端口、主机名或子目录上为您的应用程序提供服务,不会出现任何问题。然而,要做到这一点,您需要安装 LoadBalancer 和 Ingress Controller,因为 Kubernetes API Server 两者都没有安装。
如果您使用云提供商,则可能已经有一个 LoadBalancer 控制器。只需简单地请求一个,然后kubectl get svc看看它是否会从 Pending 状态前进。如果您在裸机上运行,则可以使用物理负载均衡器,例如 F5 Big IP。或者您可以使用虚拟负载均衡器控制器,例如MetalLB。
两种流行的 Ingress 控制器是NGINX和Istio。NGINX 控制器专门处理入口管理,而 Istio 则处理入口管理以及高度可配置的网络和增强的安全性。
如果您需要任何进一步的信息或帮助解决此问题,请告诉我。总是很乐意提供帮助!
| 归档时间: |
|
| 查看次数: |
13196 次 |
| 最近记录: |