繁体   English   中英

Minikube/kubernetes pod 无法连接到 Mongodb Atlas

[英]Minikube/kubernetes pod cant connect to Mongodb Atlas

我有一个 Spring 引导应用程序,我正在尝试在 Minkube 中进行测试,它应该连接到 MongoDb Atlas。

它在我的电脑上运行应用程序时连接到我的数据库,它还在创建并作为 Docker 映像运行后连接,在我的 PC 上的 Ubuntu 虚拟机上运行。 在 Minikube 上作为 Kubernetes 部署运行时,它不会连接到 Mongodb Atlas。

我必须缺少一个配置步骤,但我只是不知道是什么。 我想我的问题是“我需要做一些特别的事情来让 Minikube/Kubernetes 找到外部 URL”吗?

我将在下面发布我的错误和当前的调查路线,如果有人有任何建议,他们将不胜感激。


在 Kubernetes 中运行时出现嵌套错误(它是一个很长的错误消息,所以只是相关位 - 我认为),因为您可以看到它无法找到我的数据库 URL,并抱怨“找不到 DNS 名称”。 可以通过在 Intelij 中本地运行程序并稍微修改 URL 来复制这一点

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.mongodb.client.MongoClient]: Factory method 'mongo' threw exception; nested exception is com.mongodb.MongoConfigurationException: Unable to look up TXT record for host xxxxxx-erble.gcp.mongodb.net
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:651) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
        ... 128 common frames omitted
Caused by: com.mongodb.MongoConfigurationException: Unable to look up TXT record for host xxxxxx-erble.gcp.mongodb.net
        at com.mongodb.internal.dns.DefaultDnsResolver.resolveAdditionalQueryParametersFromTxtRecords(DefaultDnsResolver.java:131) ~[mongodb-driver-core-4.0.1.jar:na]
        at com.mongodb.ConnectionString.<init>(ConnectionString.java:378) ~[mongodb-driver-core-4.0.1.jar:na]
        at org.springframework.boot.autoconfigure.mongo.MongoClientFactorySupport.applyHostAndPort(MongoClientFactorySupport.java:101) ~[spring-boot-autoconfigure-2.3.0.M4.jar:2.3.0.M4]
        at org.springframework.boot.autoconfigure.mongo.MongoClientFactorySupport.computeClientSettings(MongoClientFactorySupport.java:69) ~[spring-boot-autoconfigure-2.3.0.M4.jar:2.3.0.M4]
        at org.springframework.boot.autoconfigure.mongo.MongoClientFactorySupport.createMongoClient(MongoClientFactorySupport.java:60) ~[spring-boot-autoconfigure-2.3.0.M4.jar:2.3.0.M4]
        at org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration.mongo(MongoAutoConfiguration.java:57) ~[spring-boot-autoconfigure-2.3.0.M4.jar:2.3.0.M4]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
        ... 129 common frames omitted
Caused by: javax.naming.NameNotFoundException: DNS name not found [response code 3]
        at jdk.naming.dns/com.sun.jndi.dns.DnsClient.checkResponseCode(DnsClient.java:664) ~[jdk.naming.dns:na]
        at jdk.naming.dns/com.sun.jndi.dns.DnsClient.isMatchResponse(DnsClient.java:582) ~[jdk.naming.dns:na]
        at jdk.naming.dns/com.sun.jndi.dns.DnsClient.doUdpQuery(DnsClient.java:430) ~[jdk.naming.dns:na]
        at jdk.naming.dns/com.sun.jndi.dns.DnsClient.query(DnsClient.java:214) ~[jdk.naming.dns:na]
        at jdk.naming.dns/com.sun.jndi.dns.Resolver.query(Resolver.java:81) ~[jdk.naming.dns:na]
        at jdk.naming.dns/com.sun.jndi.dns.DnsContext.c_getAttributes(DnsContext.java:434) ~[jdk.naming.dns:na]
        at java.naming/com.sun.jndi.toolkit.ctx.ComponentDirContext.p_getAttributes(ComponentDirContext.java:235) ~[na:na]
        at java.naming/com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:141) ~[na:na]
        at java.naming/com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:129) ~[na:na]
        at java.naming/javax.naming.directory.InitialDirContext.getAttributes(InitialDirContext.java:171) ~[na:na]
        at com.mongodb.internal.dns.DefaultDnsResolver.resolveAdditionalQueryParametersFromTxtRecords(DefaultDnsResolver.java:114) ~[mongodb-driver-core-4.0.1.jar:na]
        ... 139 common frames omitted

我尝试过的事情:

  • 在我的部署中。yaml:将 dnsPolicy 设置为默认值(加上所有其他可能的值)
  • 创建外部服务,并使用 externalName 代替我的 URL
kind: Service
apiVersion: v1
metadata:
  name: mongodbatlas
spec:
  type: ExternalName
  externalName: xxxxx-erble.gcp.mongodb.net
  • 创建一个允许所有出口网络策略:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all-egress
spec:
  podSelector: {}
  egress:
    - {}
  policyTypes:
    - Egress

以下是我的部署和服务 YAML,删除了个人用户名/密码/存储库详细信息:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend
  labels:
    app: frontend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: frontend
  template:
    metadata:
      labels:
        app: frontend
    spec:
      dnsPolicy: Default
      containers:
        - name: frontend
          image: <DOCKERRPO>/<REPO>:front
          imagePullPolicy: Always
          env:
            - name: MONGODB_ATLAS
              value: mongodb+srv://<USERNAME>:<PASSWORD>@xxxxxx-erble.gcp.mongodb.net/test?retryWrites=true&w=majority
            - name: FRONT_SERVER_PORT
              value: "8080"
            - name: spring_profiles_active
              value: dev
          ports:
            - containerPort: 8080
          resources:
            limits:
              memory: 512Mi
      imagePullSecrets:
        - name: <SECRET>
---
apiVersion: v1
kind: Service
metadata:
  name: frontend
spec:
  ports:
    - nodePort: 32000
      port: 80
      targetPort: 8080
  selector:
    app: frontend
  type: NodePort

找到了解决方案:

出于某种原因,我的设置的一个组件(spring boot/kubernetes/minikube/virtualbox 等)在解析 DNS SRV URI 时出现问题。 为连接到我的集群而提供的 MongoDB Atlas URI 失败,将其更改为 URI 的折旧样式似乎允许我的服务连接。

GAE 无法查找 mongodb 地图集实例的 SRV 记录

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM