mongo-k8s-sidecar icon indicating copy to clipboard operation
mongo-k8s-sidecar copied to clipboard

Name conflict when I use `mongo` as StatefulSet's name

Open fredzqm opened this issue 7 years ago • 2 comments

Kubernets version:

Client Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.4", GitCommit:"9befc2b8928a9426501d3bf62f72849d5cbcd5a3", GitTreeState:"clean", BuildDate:"2017-11-20T05:28:34Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}

The following StatefulSet gave me a very quiky bug.

apiVersion: v1
kind: Service
metadata:
  name: mongo
  labels:
    app: mongo
spec:
  ports:
  - port: 27017
  selector:
    app: mongo
---
apiVersion: apps/v1beta2
kind: StatefulSet
metadata:
  name: mongo
spec:
  serviceName: mongo
  replicas: 1
  selector:
    matchLabels:
      app: mongo
  template:
    metadata:
      labels:
        app: mongo
    spec:
      containers:
        - name: mongo
          image: mongo
          command:
            - mongod
            - "--replSet"
            - rs0
            - "--bind_ip"
            - 0.0.0.0
            - "--smallfiles"
            - "--noprealloc"
          ports:
            - containerPort: 27017
          volumeMounts:
            - name: mongo-pv
              mountPath: /data/db
        - name: mongo-sidecar
          image: cvallance/mongo-k8s-sidecar:latest
          volumeMounts:
            - name: mongo-pv
              mountPath: /data/db
          env:
            - name: MONGO_SIDECAR_POD_LABELS
              value: "app=mongo"
            - name: KUBERNETES_MONGO_SERVICE_NAME 
              value: "mongo" 
  volumeClaimTemplates:
  - metadata:
      name: mongo-pv
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: mongo
      resources:
        requests:
          storage: 10Gi

Here is the error log from mongo-sidecar:

Error in workloop RangeError [ERR_SOCKET_BAD_PORT]: Port should be > 0 and < 65536. Received tcp://172.20.177.53:27017.
    at lookupAndConnect (net.js:1065:13)
    at Socket.connect (net.js:1034:5)
    at Object.connect (net.js:107:35)
    at Connection.connect (/opt/cvallance/mongo-k8s-sidecar/node_modules/mongodb-core/lib/connection/connection.js:412:25)
    at Pool.connect (/opt/cvallance/mongo-k8s-sidecar/node_modules/mongodb-core/lib/connection/pool.js:666:16)
    at Server.connect (/opt/cvallance/mongo-k8s-sidecar/node_modules/mongodb-core/lib/topologies/server.js:399:17)
    at Server.connect (/opt/cvallance/mongo-k8s-sidecar/node_modules/mongodb/lib/server.js:368:17)
    at open (/opt/cvallance/mongo-k8s-sidecar/node_modules/mongodb/lib/db.js:229:19)
    at Db.open (/opt/cvallance/mongo-k8s-sidecar/node_modules/mongodb/lib/db.js:252:44)
    at getDb (/opt/cvallance/mongo-k8s-sidecar/src/lib/mongo.js:32:11)

I digged into mongo-sidecar's image, and debugged its environment variable. It turns out that at https://github.com/cvallance/mongo-k8s-sidecar/blob/master/src/lib/config.js#L79 The process.env.MONGO_PORT has the value of tcp://172.20.177.53:27017. There is an environment variable name conflicts with kubernettes' default environment variable.

I would suggest giving each config file a prefix so that I won't accidentally run into name conflict, or put an note in the docs to remind everyone to avoid using mongo as the name of statefulset.

fredzqm avatar Dec 21 '17 10:12 fredzqm

Had the same conflict issue while trying to expose this mongo via LoadBalancer. Would anyone know how to expose properly this type of service? Thanks for this amazing project.

pvsousalima avatar May 10 '18 17:05 pvsousalima

i‘m have same mistake. i set the evn MONGO_PORT after the mongo cluster is health. kubectl exec the pods , enter command "mongo" "rs.status()" .i find the cluster is health. thank u very much .

cuisongliu avatar Sep 05 '18 00:09 cuisongliu