You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes Pod无法通过服务名称解析地址问题求助

问题:Kubernetes中Service名称无法解析,仅能通过Endpoint IP连接RabbitMQ

本地minikube集群运行两个Pod:RabbitMQ和依赖它的Python微服务。已为RabbitMQ创建Service,但微服务无法通过服务名称rmqserver连接,改用Service Endpoint IP则能正常连接。目前暂不想用Helm部署RabbitMQ,希望先解决DNS解析问题。这套服务在docker-compose中可正常运行,正在迁移至K8s。

RabbitMQ部署YAML

apiVersion: apps/v1
kind: Deployment
metadata:
  name: rabbitmq3
spec:
  replicas: 1
  selector:
    matchLabels:
      app: rabbitmq3
  template:
    metadata:
      labels:
        app: rabbitmq3
    spec:
      containers:
      - name: rabbitmq
        image: rabbitmq:3.11.10-management-alpine
        imagePullPolicy: IfNotPresent
        resources:
          limits:
            memory: "256Mi"
            cpu: "500m"
        ports:
          - containerPort: 5672
            name: amqp
          - containerPort: 15672
            name: discovery
      restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: rabbitmq3
  name: rmqserver-ui
spec:
  type: NodePort
  ports:
    - name: discovery
      port: 15672
      targetPort: 15672
  selector:
    app: rabbitmq3
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: rabbitmq3
  name: rmqserver
spec:
  type: ClusterIP
  ports:
    - name: amqp
      port: 5672
      targetPort: 5672
  selector:
    app: rabbitmq3

Python微服务连接代码

# self._rmqusername 和 self._rmqpassword 为 guest/guest
credentials = pika.PlainCredentials(self._rmqusername, self._rmqpassword)
connection = pika.BlockingConnection(pika.ConnectionParameters(host=rmqserver, credentials=credentials))

错误日志

2023-03-03 19:54:26,572 [ERROR] Address resolution failed: gaierror(-3, 'Try again')
2023-03-03 19:54:26,573 [ERROR] getaddrinfo failed: gaierror(-3, 'Try again').
2023-03-03 19:54:26,573 [ERROR] AMQP connection workflow failed: AMQPConnectionWorkflowFailed: 1 exceptions in all; last exception - gaierror(-3, 'Try again'); first exception - None.
2023-03-03 19:54:26,573 [ERROR] AMQPConnectionWorkflow - reporting failure: AMQPConnectionWorkflowFailed: 1 exceptions in all; last exception - gaierror(-3, 'Try again'); first exception - None
2023-03-03 19:54:26,574 [ERROR] Connection workflow failed: AMQPConnectionWorkflowFailed: 1 exceptions in all; last exception - gaierror(-3, 'Try again'); first exception - None
2023-03-03 19:54:26,574 [ERROR] Error in _create_connection().
Traceback (most recent call last):
  File "/usr/lib/python3.8/site-packages/pika/adapters/blocking_connection.py", line 451, in _create_connection
    raise self._reap_last_connection_workflow_error(error)
  File "/usr/lib/python3.8/site-packages/pika/adapters/utils/selector_ioloop_adapter.py", line 565, in _resolve
    result = socket.getaddrinfo(self._host, self._port, self._family,
  File "/usr/lib/python3.8/socket.py", line 918, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -3] Try again

初步判断

问题出在DNS名称解析环节,可能缺少必要配置步骤。


解决方案

1. 检查命名空间一致性

确认RabbitMQ的Service与Python微服务Pod是否在同一命名空间:

  • 执行kubectl get pods -A查看所有Pod的命名空间
  • 执行kubectl get services -A查看rmqserver所在命名空间

若不在同一命名空间,连接时需使用完整服务DNS名称:rmqserver.<命名空间>.svc.cluster.local

2. 验证DNS服务状态

minikube默认部署coredns,检查其运行状态:

kubectl get pods -n kube-system -l k8s-app=kube-dns

若coredns Pod未正常运行,重启部署:

kubectl rollout restart deployment coredns -n kube-system

3. 在微服务Pod内测试DNS解析

进入Python微服务Pod,手动测试rmqserver解析:

kubectl exec -it <微服务Pod名称> -- nslookup rmqserver

若解析失败,检查Pod的DNS配置:

kubectl exec -it <微服务Pod名称> -- cat /etc/resolv.conf

正常配置应包含nameserver 10.96.0.10(Kubernetes DNS服务的ClusterIP),以及search <命名空间>.svc.cluster.local svc.cluster.local cluster.local

4. 检查代码中的服务名称正确性

确保代码中使用的服务名称是rmqserver,注意大小写敏感,Kubernetes Service名称为小写,避免拼写错误。

5. 确认Service关联的Endpoint正常

检查rmqserver的Endpoint是否正确关联到RabbitMQ Pod:

kubectl describe service rmqserver

查看Endpoints字段,应显示RabbitMQ Pod的IP和端口5672

内容的提问来源于stack exchange,提问作者Rabellino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 23:32:25