【发布时间】:2020-11-25 15:01:39
【问题描述】:
我正在 .NET 5.0 中开发一个由 EventStore 通道支持的开源云事件网关,但在连接 ProjectionsManager 服务时遇到了问题。
我在自己的命名空间中部署了一个 EventStore 服务,并且可以成功连接到它,并订阅流。但是,当我尝试连接 ProjectionsManager 时,出现以下异常:
连接被拒绝(eventstore.eventstore.svc.cluster.local:2113)
服务的完全限定名称“eventstore.eventstore.svc.cluster.local”是正确的,并且已被 IEventStoreConnection 成功使用。端口 2113 也是正确的,因为我可以通过使用 Kubectl 将端口转发到该端口上的 pod 来访问管理 UI。
发生了什么事?在我所有的本地和基于 docker-compose 的测试中,一切都按预期工作。只有在 Kubernetes 中我才会遇到这个问题。
这是我的 EventStore yaml 文件的内容:
apiVersion: v1
kind: Namespace
metadata:
name: eventstore
labels:
name: eventstore
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: eventstore
namespace: eventstore
labels:
app: eventstore
spec:
serviceName: eventstore
replicas: 1
selector:
matchLabels:
app: eventstore
template:
metadata:
labels:
app: eventstore
spec:
containers:
- name: eventstore
image: eventstore/eventstore:release-5.0.1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 1112
name: tcp-int
- containerPort: 1113
name: tcp-ext
- containerPort: 2112
name: http-int
- containerPort: 2113
name: http-ext
volumeMounts:
- name: data
mountPath: /var/lib/eventstore
env:
- name: EVENTSTORE_EXT_HTTP_PORT
value: "2113"
- name: EVENTSTORE_EXT_TCP_PORT
value: "1113"
- name: EVENTSTORE_INT_HTTP_PREFIXES
value: http://*:2112/
- name: EVENTSTORE_EXT_HTTP_PREFIXES
value: http://*:2113/
- name: EVENTSTORE_RUN_PROJECTIONS
value: All
- name: EVENTSTORE_START_STANDARD_PROJECTIONS
value: "true"
- name: EVENTSTORE_EXT_IP
value: "0.0.0.0"
- name: EVENTSTORE_ENABLE_ATOM_PUB_OVER_HTTP
value: "true"
- name: EVENTSTORE_ENABLE_EXTERNAL_TCP
value: "true"
volumes:
- name: data
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: eventstore
namespace: eventstore
labels:
app: eventstore
spec:
ports:
- port: 1112
name: tcp-int
- port: 1113
name: tcp-ext
- port: 2112
name: http-int
- port: 2113
name: http-ext
selector:
app: eventstore
这是用于实例化 ProjectionsManager 的 C# sn-p:
new ProjectionsManager(new ConsoleLogger(), new DnsEndPoint("eventstore.eventstore.svc.cluster.local", 2113), TimeSpan.FromMilliseconds(3000), httpSchema: "http");
顺便说一句,尝试连接 ProjectionsManager 的服务与 Istio sidecar 耦合,如果这很重要的话。
提前感谢您的宝贵帮助;)
编辑
似乎 Istio sidecar 注入是问题的原因。禁用它可以使其按预期工作。关于为什么会发生这种情况以及如何在启用注入的情况下解决它的任何想法?
【问题讨论】:
-
1.你的 istio 版本是多少? 2.如果你禁用了istio sidecar,你能检查它是否会工作吗?如果你启用了strict mtls,那么注入了 istio sidecar 的 pod 将无法与没有 istio sidecar 的 pod 通信。
-
1.我的 Istio 版本是 1.7.3。 Kubernetes 是 1.19.3。 2. 如果我禁用 sidecar 注入,一切都会按预期进行。 3. 未启用严格的 MTLS,一切都处于许可模式。关于如何使其在启用 sidecar 注入的情况下工作的任何想法?
-
您能否尝试为其添加destination rule,这将禁用此特定主机/命名空间的mtls?有一个example。
-
我创建了两个 DestinationRules,一个在 eventstore 命名空间中,一个在我的事件命名空间中,以确保它在两个命名空间中都应用。然而,它仍然不起作用。这是粘贴箱:pastebin.pl/view/6f6219b5
-
顺便说一句,如果没有这些目标规则,我在 Kiali 中看到 MTLS 无论如何都没有被强制执行。您不认为我的问题与 EventStore 不接受我的 sidecar 转发的请求有关吗?
标签: kubernetes istio .net-5 eventstoredb