【问题标题】:Allow traffic to rabbitMQ service from Istio允许从 Istio 到 rabbitMQ 服务的流量
【发布时间】:2023-10-13 10:56:02
【问题描述】:

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

有一个负载均衡器类型的服务 rabbitmq-rabbitmq-svc(在 rabbitmq 命名空间中)。 当我没有运行特使时,我尝试了一个简单的busybox,然后我可以毫无问题地远程登录到rabbitmq(端口5672),但是一旦我尝试使用自动特使注入,特使就会阻止流量。 我尝试添加 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 上启用了 istio 吗? rabbitmq 部署的“istio-proxy”容器说明了什么?
  • 不,RabbitMQ 在 Istio 之外运行。原来是主机名中的一个简单错误。 ??????

标签: kubernetes rabbitmq google-kubernetes-engine istio envoyproxy


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    要让 RabbitMQ 集群在 Istio 中工作,我唯一需要做的就是对 RabbitMQ pod 进行如下注释:

    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 配置由公司中的另一个团队控制,因此在尝试使用排除端口注释时可能会发生冲突。

    【讨论】:

      【解决方案3】:

      我以前可能遇到过同样的问题。但是我的应用在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
      

      【讨论】: