簡體   English   中英

Kubernetes(Istio)Mongodb 企業集群:HostUnreachable:對等方重置連接

[英]Kubernetes(Istio) Mongodb enterprise cluster: HostUnreachable: Connection reset by peer

我在我的 k8 集群中運行了 Istio1.6。 在集群中,我還部署了禁用 istio-injection 的分片 mongodb 集群。

而且我的應用程序有一個不同的命名空間,啟用了 istio-injection 如果我嘗試從 pod 連接到 mongo,我會通過對等錯誤重置此連接

root@mongo:/# mongo "mongodb://mongo-sharded-cluster-mongos-0.mongo-service.mongodb.svc.cluster.local:27017,mongo-sharded-cluster-mongos-1.mongo-service.mongodb.svc.cluster.local:27017/?ssl=false"
MongoDB shell version v4.2.8
connecting to: mongodb://mongo-sharded-cluster-mongos-0.mongo-service.mongodb.svc.cluster.local:27017,mongo-sharded-cluster-mongos-1.mongo-service.mongodb.svc.cluster.local:27017/?compressors=disabled&gssapiServiceName=mongodb&ssl=false
2020-06-18T19:59:14.342+0000 I  NETWORK  [js] DBClientConnection failed to receive message from mongo-sharded-cluster-mongos-0.mongo-service.mongodb.svc.cluster.local:27017 - HostUnreachable: Connection reset by peer
2020-06-18T19:59:14.358+0000 I  NETWORK  [js] DBClientConnection failed to receive message from mongo-sharded-cluster-mongos-1.mongo-service.mongodb.svc.cluster.local:27017 - HostUnreachable: Connection reset by peer
2020-06-18T19:59:14.358+0000 E  QUERY    [js] Error: network error while attempting to run command 'isMaster' on host 'mongo-sharded-cluster-mongos-1.mongo-service.mongodb.svc.cluster.local:27017'  :
connect@src/mongo/shell/mongo.js:341:17
@(connect):2:6
2020-06-18T19:59:14.362+0000 F  -        [main] exception: connect failed
2020-06-18T19:59:14.362+0000 E  -        [main] exiting with code 1

但是,如果我禁用對我的應用程序(pod)的 istio 注入,那么我可以成功連接並按預期使用 mongo。

有沒有辦法解決這個問題,我想將 istio-proxy 注入我的應用程序/pod 並使用 mongodb?

使用 istio 注入數據庫很復雜。


我將從檢查您的 mtls 開始,如果它是嚴格的,我會將其更改為允許並檢查它是否有效。 這里描述得很好。

您會看到請求仍然成功,除了那些從沒有代理的客戶端 sleep.legacy 到有代理的服務器 httpbin.foo 或 httpbin.bar 的請求。 這是意料之中的,因為現在嚴格要求雙向 TLS ,但是沒有 sidecar 的工作負載無法遵守。


有沒有辦法解決這個問題,我想將 istio-proxy 注入我的應用程序/pod 並使用 mongodb?

如果更改 mtls 不起作用,那么在 istio 中您可以在不注入的情況下設置數據庫,然后使用 ServiceEntry object 將其添加到 istio 注冊表,以便它能夠與 istio 服務的 rest 通信。

要將 mongodb 數據庫添加到 istio,您可以使用ServiceEntry

ServiceEntry 允許將其他條目添加到 Istio 的內部服務注冊表中,以便網格中自動發現的服務可以訪問/路由到這些手動指定的服務。 服務條目描述了服務的屬性(DNS 名稱、VIP、端口、協議、端點)。 這些服務可以在網格外部(例如,web API)或不屬於平台服務注冊表一部分的網格內部服務(例如,一組與 Kubernetes 中的服務通信的 VM)。 此外,還可以使用workloadSelector 字段動態選擇服務條目的端點。 這些端點可以是使用 WorkloadEntry object 或 Kubernetes pod 聲明的 VM 工作負載。 select 在單個服務下的 Pod 和 VM 的能力允許將服務從 VM 遷移到 Kubernetes,而無需更改與服務關聯的現有 DNS 名稱。

服務入口示例

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: external-svc-mongocluster
spec:
  hosts:
  - mymongodb.somedomain # not used
  addresses:
  - 192.192.192.192/24 # VIPs
  ports:
  - number: 27018
    name: mongodb
    protocol: MONGO
  location: MESH_INTERNAL
  resolution: STATIC
  endpoints:
  - address: 2.2.2.2
  - address: 3.3.3.3

如果您啟用了 mtls,您還需要 DestinationRule 來定義如何與外部服務通信。

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: mtls-mongocluster
spec:
  host: mymongodb.somedomain
  trafficPolicy:
    tls:
      mode: MUTUAL
      clientCertificate: /etc/certs/myclientcert.pem
      privateKey: /etc/certs/client_private_key.pem
      caCertificates: /etc/certs/rootcacerts.pem

另外看看這個文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM