尝试连接到有状态集 Mongodb Kubernetes 部署时没有连接错误

Ewa*_*ine 2 mongodb docker gcloud kubernetes

我有以下服务...

apiVersion: v1
kind: Service
metadata:
  name: mongo
  labels:
    app: mongo
spec:
  ports:
  - name: mongo
    port: 27017
  clusterIP: None
  selector:
    app: mongo
Run Code Online (Sandbox Code Playgroud)

以及以下有状态集...

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mongo
spec:
  serviceName: mongo
  selector:
    matchLabels:
      app: mongo
  replicas: 3
  template:
    metadata:
      labels:
        app: mongo
    spec:
      terminationGracePeriodSeconds: 10
      containers:
        - name: mongo
          image: mongo
          command:
            - mongod
            - "--replSet"
            - rs0
            - "--smallfiles"
            - "--noprealloc"
          ports:
            - name: mongo
              containerPort: 27017
        - name: mongo-sidecar
          image: cvallance/mongo-k8s-sidecar
          env:
            - name: "VERSION"
              value: "2"
            - name: MONGO_SIDECAR_POD_LABELS
              value: "role=mongo"
Run Code Online (Sandbox Code Playgroud)

但是,我的代码无法使用 url 建立连接mongo:27017。我试过连接到mongo, mongo-0.mongo:27017, 很多其他人。如果我执行到一个容器并运行$ nslookup mongo我得到...

Name:      mongo
Address 1: 10.1.0.80 mongo-0.mongo.default.svc.cluster.local
Address 2: 10.1.0.81 mongo-1.mongo.default.svc.cluster.local
Address 3: 10.1.0.82 mongo-2.mongo.default.svc.cluster.local
Run Code Online (Sandbox Code Playgroud)

击中$ curl mongo:27017$ telnet mongo 27017给我一个连接被拒绝的错误。

sta*_*cks 5

添加bind_ip到命令:

      command:
        - mongod
        - "--replSet"
        - rs0
        - "--smallfiles"
        - "--noprealloc"          
        - "--bind_ip"
        - "0.0.0.0"
Run Code Online (Sandbox Code Playgroud)

选项告诉 monogodb 守护程序侦听所有 IPv4 地址,而不是默认的localhost.