首页 > 解决方案 > 如何在 Istio 中的一个服务边车与 NATS 集群之间连接

问题描述

我创建了一个没有注入 Istio 的 NATS 集群。

apiVersion: nats.io/v1alpha2
kind: NatsCluster
metadata:
  name: nats
spec:
  size: 2
pod:
  annotations:
    sidecar.istio.io/inject: "false"
version: "2.0.0"

现在我有一个 sidecar istio,连接到上面的 Nats 集群,但似乎 istio 断开了连接。我的应用程序上的 nats 客户端关闭,并且 Nats 服务器通知:“客户端解析器错误,状态 = 0 ...”原因是 nats 集群和 sidecar 之间没有 mtls?我该如何解决这个问题?

标签: istionats.ionats-streaming-server

解决方案


对于 istio 1.8

nats 和 nats 流媒体 ymal 可以在

https://github.com/nats-io/nats-operator

https://github.com/nats-io/nats-streaming-operator

如果您不通过 kubernetes 集群外部的节点端口进行连接。您只需使用默认的 istio 设置并为 nats pod 注入 sidecar。有用。但是如果你想从外部通过节点端口连接 nats。您需要禁用 mtls。我的设置是默认的 mtls,nats 和 nats 流注入边车的 pod。并且 nats 只接受纯文本的流量,而 nats 只发送纯文本的流量。

添加以下对等身份验证:

    apiVersion: "security.istio.io/v1beta1"
    kind: "PeerAuthentication"
    metadata:
      name: "nats"
    spec:
      selector:
        matchLabels:
          app: nats
      mtls:
        mode: DISABLE
    ---
    apiVersion: "security.istio.io/v1beta1"
    kind: "PeerAuthentication"
    metadata:
      name: "nats-streaming"
    spec:
      selector:
        matchLabels:
          app: nats-streaming
      mtls:
        mode: DISABLE

添加以下目标规则:

    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      name: nats
    spec:
      host: "nats-server.acm.svc.cluster.local"
      trafficPolicy:
        tls:
          mode: DISABLE
    ---
    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      name: nats-server-nodeport
    spec:
      host: "nats-server-nodeport.acm.svc.cluster.local"
      trafficPolicy:
        tls:
          mode: DISABLE
    ---
    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      name: nats-server-mgmt
    spec:
      host: "nats-server-mgmt.acm.svc.cluster.local"
      trafficPolicy:
        tls:
          mode: DISABLE

推荐阅读