istio - 如何在 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?我该如何解决这个问题?
解决方案
对于 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
推荐阅读
- c++ - 从 Eigen::Map 构造 Eigen::Array,它是如何工作的?
- spring - 我在spring + testng + mockito + powermock的单元测试中有问题
- javascript - 如果未连接到确定的网络,则阻止访问
- java - 如何在 Gson 中动态启用/禁用一个字段序列化
- mysql - 如何将相同的数据合并到水平表中
- python - 如何将函数作为参数传递给 lambda?
- javascript - 有没有办法防止大量图像破坏 iOS 浏览器中的幻灯片?
- python - 在aws中执行基于python的lambda函数时出现keyerror
- firebase - 如果我在 Firestore 安全规则中使用 resource.data 评估价值,我会被收费吗?
- vue.js - Vue - 获取数据后无法在子组件上接收道具数据