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