0

Kubernetes 内でステートフルな Mongo を実行しようとしていますが、Istio の外部でこれらの構成を使用して動作します。

  mongodb: {
    uri: "mongodb://mongo-0.mongo,mongo-1.mongo,mongo-2.mongo",
    dbName: "app"
  }

しかし、Istio 内でノード アプリケーションを実行すると、mongo に接続できなくなります。不足しているものはありますか、それとも Istio でステートフル セットをまだ使用できないためですか?


以下のステートフル mongo 設定。

apiVersion: v1
kind: Service
metadata:
  labels:
    service: mongo
  name: mongo
spec:
  ports:
  - name: tcp
    port: 27017
    targetPort: 27017
  clusterIP: None
  selector:
    service: mongo
    role: mongo
***********
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: mongo
spec:
  serviceName: "mongo"
  replicas: 3
  template:
    metadata:
      labels:
        role: mongo
        environment: test
        service: mongo
    spec:
      terminationGracePeriodSeconds: 10
      containers:
        - name: mongo
          image: mongo:3.4.6
          resources:
            requests:
              cpu: "10m"
          command:
            - mongod
            - "--replSet"
            - rs0
            - "--smallfiles"
            - "--noprealloc"
          ports:
            - containerPort: 27017
          volumeMounts:
            - name: mongo-persistent-storage
              mountPath: /data/db
        - name: mongo-sidecar
          image: cvallance/mongo-k8s-sidecar
          resources:
            requests:
              cpu: "10m"
          env:
            - name: MONGO_SIDECAR_POD_LABELS
              value: "role=mongo,environment=test"

私が受け取っているエラーは

[2017-07-25 12:01:11] ERROR Mongoose MonboDB connection error: {
  "message": "write EPIPE",
  "name": "MongoError",
  "stack": "Error: write EPIPE\n    at exports._errnoException (util.js:1024:11)\n    at WriteWrap.afterWrite [as oncomplete] (net.js:851:14)"
}
[2017-07-25 12:01:11] ERROR ... retrying createConnection in 5 seconds... 
[2017-07-25 12:01:16] ERROR Mongoose MonboDB connection error: {
  "message": "read ECONNRESET",
  "name": "MongoError",
  "stack": "Error: read ECONNRESET\n    at exports._errnoException (util.js:1024:11)\n    at TCP.onread (net.js:610:25)"
}
4

2 に答える 2

0

手動インジェクションで istio でこのようなエラーが発生している場合:

デプロイメントにプロキシを挿入すると、 istio-proxy が構成されている間、ネットワークがドロップされます:

kubectl apply -f kubernetes-configs/
istioctl kube-inject -f kubernetes-configs/deployment.yml | kubectl -n foo apply -f -

その際、次のものを受け取ります。

Error: write EPIPE

この質問のように、初期化の前に一時停止を追加して問題を解決しました: Node.js (Javascript) で待機するにはどうすればよいですか? 一定期間一時停止する必要があります


アップデート

これが別の方法です。nodejs アプリを再起動するだけです。process.exit(137)接続に失敗した任意の場所で呼び出すことで、 Docker コンテナーが強制終了され、再起動されます。その間に istio-proxy はネットワーク構成を完了し、アプリは正常に DB に接続します。

于 2018-12-14T21:34:33.987 に答える