Kubernetes连接到MongoDB Atlas问题解析URI:在10.96.0.10:53上查找:没有这样的主机

时间:2020-03-17 18:53:21

标签: kubernetes minikube mongodb-atlas

我将MongoDB地图集用作我的数据库服务,并且在简单的localhost中连接到它或使用docker镜像运行都没有问题。但是,当我尝试将其部署到kubernetes时,仍然遇到以下问题:

error parsing uri: lookup _mongodb._tcp.xxxxdb-tryqz.azure.mongodb.net on 10.96.0.10:53: no such host

经过研究,我知道需要更多配置(例如,pod设置上的 dnsPolicy ,公开具有 ExternalName 类型的服务...等)才能进行连接到外部dns / ip。但是,经过不同的审判,我仍然遇到同样的问题。

试用版1:dnsPolicy

我在我的deployment.yaml中添加了dnsPolicy,但仍然无法正常工作。

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-api-deployment
  labels:
    app: my-api
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-api
  template:
    metadata:
      labels:
        app: my-api
    spec:
      containers:
        - name: my-api
          image: xxx/my-api:v4
          ports:
            - containerPort: 2322
          env:
            - name: MONGODB_USERNAME
              value: userb
            - name: MONGODB_PASSWORD
              value: abc12345
            - name: MONGODB_HOST
              value: xxxxdb-tryqz.azure.mongodb.net
      dnsPolicy: Default

试用2:使用服务

service-deployment.yaml

kind: Service
apiVersion: v1
metadata:
  name: mongodns
spec:
  type: ExternalName
  externalName: xxxxdb-tryqz.azure.mongodb.net

deployment.yaml(与上面相同,但有以下更改)

  - name: MONGODB_HOST
          value: mongodns

使用试验2方法时,错误会相应更改:

error parsing uri: lookup _mongodb._tcp.mongodns on 10.96.0.10:53: no such host

还有一件令人担心的事情是,当我应用service-deployment.yaml时,该服务一直在minikube仪表板中加载。

enter image description here

这是我的GoLang脚本:

    dbHost      :=  os.Getenv("MONGODB_HOST")
    dbUserName  :=  os.Getenv("MONGODB_USERNAME")
    dbPassword  :=  os.Getenv("MONGODB_PASSWORD")

    ctx, _ := context.WithTimeout(context.Background(), 30*time.Second)
    mongoURI    :=  fmt.Sprintf("mongodb+srv://%s:%s@%s/test?retryWrites=true&w=majority", dbUserName, dbPassword, dbHost)
    clientOptions   :=  options.Client().ApplyURI(mongoURI)
    client, err := mongo.Connect(ctx, clientOptions)
    if err != nil {
        log.Println("NOT Connected to MongoDB!! (1)")
        log.Fatal(err)
    }

0 个答案:

没有答案