我们有一个依赖RabbitMQ的应用程序,它作为标准的有状态集/服务风格部署(使用helm stable / rabbitmq-ha)部署在kubernetes集群中。然后,我们在一个单独的命名空间中以类似样式的部署/服务布局部署了一个应用程序,但启用了istio(包括sidecar注入)。
打开istio sidecar注入后,部署将不再连接到kubernetes服务。
我尝试将istio ServiceEntry与每个RabbitMQ吊舱的FQDN一起放入,但这似乎没有任何作用。
---
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: rabbitmq
spec:
hosts:
- "rabbitmq-rabbitmq-ha-0.rabbitmq-rabbitmq-ha-discovery.rabbitmq.svc.cluster.local"
- "rabbitmq-rabbitmq-ha-1.rabbitmq-rabbitmq-ha-discovery.rabbitmq.svc.cluster.local"
- "rabbitmq-rabbitmq-ha-2.rabbitmq-rabbitmq-ha-discovery.rabbitmq.svc.cluster.local"
ports:
- number: 4369
name: epmd
protocol: TCP
- number: 5672
name: amqp
protocol: TCP
- number: 15672
name: http
protocol: HTTP
- number: 25672
name: inter-node
protocol: TCP
...
我可以看到流量进入RabbitMQ吊舱,但在Istio开启的情况下会引发以下错误:
2019-06-19 09:40:39.538 [info] <0.32110.48> accepting AMQP connection <0.32110.48> (10.233.122.234:47530 -> 10.233.122.85:5672)
2019-06-19 09:40:39.538 [error] <0.32110.48> closing AMQP connection <0.32110.48> (10.233.122.234:47530 -> 10.233.122.85:5672):
{bad_header,<<22,3,1,0,222,1,0,0>>}
我目前唯一的想法是RabbitMQ确实使用插件(rabbitmq_peer_discovery_k8s)将Kubernetes DNS解析到每个特定的pod中,这可能会干扰吗?
请明确一点,我对在应用程序和RabbitMQ之间启用Istio mTLS并没有兴趣,只是具有完全功能的基本连接。
我们正在使用: