IT序号网

kubernetes之redis名称解析暂时失败

telwanggs 2025年05月04日 编程语言 106 0

最近在学习Kubernetes。我正在尝试使用 redis,但出现以下错误:

Error:Error -3 connecting to redis:6379. Temporary failure in name resolution. 

我正在使用:
  conn = redis.StrictRedis(host='redis', port=6379) 

码头 Composer :
     redis:  
        image: redis:alpine  
        ports: 
          - "6379:6379"  

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 

服务redis:
apiVersion: v1 
kind: Service 
metadata: 
  labels: 
    app: redis 
  name: redis 
spec: 
  selector: 
    app: redis 
  type: NodePort 
  ports: 
  - port: 6379 
    protocol: TCP 

kubectl 获取 svc
redis            NodePort    10.152.183.209   <none>        6379:32649/TCP   7m31s 

编辑:图像是从 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 

请您参考如下方法:

发生的事情是您正在使用 NodePort 公开您的 Redis 实例。 . Kubernetes 保留了一个非常具体的范围 high-numbered NodePorts 的网络端口,以避免与常用端口(如 22 或在本例中为 6379(如 Redis)发生冲突)。

当你跑 kubectl get svc返回的服务表明 Redis 正在 port-forwarded到端口 32649 上的主机.因此,当您对 Redis 执行连接尝试时,您应该使用此端口而不是 6379。(还要确保您的防火墙和网络拓扑也正确配置)。

那么,我们该何去何从?嗯,我很难说。我缺乏信息来说明您的客户端连接来自何处以及您的集群在哪里运行。如果您的客户端在您的集群中(又名另一个 Pod),您应该考虑配置 ClusterIP服务而不是 NodePort 服务。

如果您的客户端在集群外部,我给您的建议是研究如何配置 LoadBalancer服务类型和Ingress Kubernetes 中的资源。

这将允许您启动专用 IP。从中您可以在任何端口、主机名或子目录上为您的应用程序提供服务,而不会出现任何问题。但是,要做到这一点,您需要同时拥有 LoadBalancer 和 Ingress Controller安装为 Kubernetes API Server 时两者都没有。

如果您使用的是 Cloud Provider,则很可能您已经拥有 LoadBalancer Controller。只需简单地请求一个然后 kubectl get svc并查看它是否从 Pending 状态前进。如果您在裸机上运行,​​则可以使用物理负载均衡器,例如 F5 Big IP。或者您可以使用虚拟负载均衡器 Controller ,例如 MetalLB .

两个流行的入口 Controller 是 NGINXIstio . NGINX Controller 专门处理入口管理,而 Istio 处理入口管理以及高度可配置的网络和增强的安全性。

如果您需要更多信息或帮助解决此问题,请告诉我。总是乐于助人!


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!