kubectl describe service the-load-balancer
命令返回:
Name: the-load-balancer
Namespace: default
Labels: app=the-app
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"the-app"},"name":"the-load-balancer","namespac...
Selector: app=the-app
Type: LoadBalancer
IP: 10.100.129.251
LoadBalancer Ingress: 1234567-1234567890.us-west-2.elb.amazonaws.com
Port: the-load-balancer 15672/TCP
TargetPort: 15672/TCP
NodePort: the-load-balancer 30080/TCP
Endpoints: 172.31.77.44:15672
Session Affinity: None
External Traffic Policy: Cluster
字符串
运行在负载均衡器后面的另一个容器上的RabbitMQ服务器可以通过负载均衡器的Endpoints 172.31.77.44:15672
从另一个容器访问。
但它无法使用the-load-balancer
主机名或通过其本地10.100.129.251
IP地址连接。
为了使RabbitMQ服务可以通过负载均衡器的the-load-balancer
主机名访问,需要做什么?
后期编辑:
从另一个容器运行简单的Python测试:
import socket
print(socket.gethostbyname('the-load-balancer'))
型
返回负载均衡器本地IP 10.100.129.251
。
使用'172.31.18.32'连接到RabbitMQ工作正常:
import pika
credentials = pika.PlainCredentials('guest', 'guest')
parameters = pika.ConnectionParameters(host='172.31.18.32', port=5672, credentials=credentials)
connection = pika.BlockingConnection(parameters)
channel = connection.channel()
print('...channel: %s' % channel)
型
但是在将host='172.31.18.32'
替换为host='the-load-balancer'
或host='10.100.129.251'
之后,客户端无法连接。
4条答案
按热度按时间iqjalb3h1#
当从负载均衡器后面为RabbitMQ服务时,需要打开端口5672和15672。如果配置正确,
kubectl describe service the-load-balancer
命令应该返回Map到本地IP地址的两个端口:字符串
下面是用于创建RabbitMQ服务的
the-load-balancer.yaml
文件:型
uqdfh47h2#
我注意到,在你的代码中,你使用端口5672直接与端点对话,而在服务定义中它是15672,这是Web控制台的端口?
vfh0ocws3#
确保负载均衡器服务和rabbitmq位于应用程序的同一命名空间中。
如果没有,你必须使用完整的dns记录
service-x.namespace-b.svc.cluster.local
,根据DNS for Services and Pods documentationn9vozmp44#
如果你想从web访问RabbitMQ UI,根据LB定义,它在
port#15672
上公开。尝试
curl -u$username:$password $LB_IP_OR_HOSTNAME:15672/api/overview
。每当您使用像pika
这样的客户端时,它都会使用5672
上的amqp
协议连接到RabbitMQ。我希望这能澄清
5672
amqp
,因此与15672
通信