允许从 Istio 到 rabbitMQ 服务的流量

Allow traffic to rabbitMQ service from Istio

我已经在 GKE 中设置了一个 K8S 集群并安装了 RabbitMQ(来自市场)和 Istio(通过 Helm)。我可以从 pods 访问 rabbitMQ,直到我启用 envoy 代理注入这些 pods,但之后流量将无法到达 rabbitMQ,我不知道如何启用流量到rabbitmq 服务。

有一个类型为 LoadBalancer 的服务 rabbitmq-rabbitmq-svc(在 rabbitmq 命名空间中)。 当我没有 envoy 运行 时,我尝试了一个简单的 busybox,然后我可以毫无问题地远程登录到 rabbitmq(端口 5672),但是一旦我尝试使用自动 envoy 注入,envoy 就会阻止流量。 我尝试添加 DestinationRule 失败。 (我添加了一条规则,但没有任何区别)

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: rabbitmq-rabbitmq-svc
spec:
  host: rabbitmq.rabbitmq.svc.cluster.local
  trafficPolicy:
    loadBalancer:
      simple: LEAST_CONN

看起来应该是一个简单的解决方案,但我想不通...:/

更新 原来这是主机名中的一个简单错误,最终使用了这个并且它有效:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: rabbitmq-rabbitmq-svc
spec:
  host: rabbitmq-rabbitmq-svc.rabbitmq.svc.cluster.local

原来这是一个简单的主机名错误,正确的是 rabbitmq-rabbitmq-svc.rabbitmq.svc.cluster.local

我以前可能遇到过和你一样的问题。但是我的应用程序在 rabbitmq 服务中声明了 4369 端口的 epmd 后可以通过 envoy 连接 rabbitmq。

apiVersion: v1
kind: Service
metadata:
  name: rabbitmq
  labels:
    app: rabbitmq
spec:
  type: ClusterIP
  ports:
  - port: 5672
    targetPort: 5672
    name: message
  - port: 4369
    targetPort: 4369
    name: epmd
  - port: 15672
    targetPort: 15672
    name: management
  selector:
    app: rabbitmq

要让 RabbitMQ 集群在 Istio 中工作,我唯一需要做的就是将 RabbitMQ pods 注释为这样:

apiVersion: rabbitmq.com/v1beta1
kind: RabbitmqCluster
metadata:
spec:
  override:
  statefulSet:
    spec:
      template:
        metadata:
          annotations:
            #annotate rabbitMQ pods to only redirect traffic on ports 15672 and 5672 to Envoy proxy sidecars.
            traffic.sidecar.istio.io/includeInboundPorts: "15672, 5672"          
            traffic.sidecar.istio.io/includeOutboundPorts: "15672, 5672"

出于某种原因,排除端口注释不起作用,所以我只是通过使用包含端口注释来翻转它。就我而言,全局 Istio 配置由公司的另一个团队控制,因此在尝试使用排除端口注释时可能会发生冲突。