Spring引导应用程序pod在Kubernetes群集上找不到mongodb pod

Spring引导应用程序pod在Kubernetes群集上找不到mongodb pod,mongodb,spring-boot,kubernetes,Mongodb,Spring Boot,Kubernetes,我有一个由MongoDB支持的Spring Boot应用程序。两者都部署在Azure上的Kubernetes群集上。我的应用程序在尝试连接到MongoDB时抛出“起因:java.net.UnknownHostException:mongo-dev-0(pod):名称或服务未知” 我能够连接到mongo-dev-0pod并在MongoDB上运行查询,因此mongo本身没有问题,Spring boot似乎能够连接到mongo服务并发现服务背后的pod 如何确保我的Spring Boot应用程序可以发

我有一个由MongoDB支持的Spring Boot应用程序。两者都部署在Azure上的Kubernetes群集上。我的应用程序在尝试连接到MongoDB时抛出“起因:java.net.UnknownHostException:mongo-dev-0(pod):名称或服务未知”

我能够连接到mongo-dev-0pod并在MongoDB上运行查询,因此mongo本身没有问题,Spring boot似乎能够连接到mongo服务并发现服务背后的pod

如何确保我的Spring Boot应用程序可以发现这些POD? 如何调试此问题

感谢您的帮助。提前谢谢

这是我的配置:

---
apiVersion: v1
kind: Service
metadata:
  name: mongo-dev
  labels:
    name: mongo-dev
spec:
  ports:
  - port: 27017
    targetPort: 27017
  clusterIP: None
  selector:
    role: mongo-dev
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: mongo-dev
spec:
  serviceName: "mongo-dev"
  replicas: 3
  template:
    metadata:
      labels:
        role: mongo-dev
        environment: dev
    spec:
      terminationGracePeriodSeconds: 10
      containers:
        - name: mongo-dev
          image: mongo:3.4
          command:
            - mongod
            - "--replSet"
            - rs0
            - "--smallfiles"
            - "--noprealloc"
            - "--auth"
            - "--bind_ip"
            - 0.0.0.0
          ports:
            - containerPort: 27017
          volumeMounts:
            - name: mongo-dev-persistent-storage
              mountPath: /data/db
        - name: mongo-sidecar
          image: cvallance/mongo-k8s-sidecar
          env:
            - name: MONGO_SIDECAR_POD_LABELS
              value: "role=mongo-dev,environment=dev"
            - name: KUBERNETES_MONGO_SERVICE_NAME
              value: "mongo-dev"
  volumeClaimTemplates:
  - metadata:
      name: mongo-dev-persistent-storage
      annotations:
        volume.beta.kubernetes.io/storage-class: "devdisk"
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 100Gi
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: devdisk
provisioner: kubernetes.io/azure-disk
parameters:
  skuName: Premium_LRS
  location: abc
  storageAccount: xyz

mongo-dev-0.mongo-dev.default.svc.cluster.local怎么样

<pod-id>.<service name>.<namespace>.svc.cluster.local
…svc.cluster.local

与中一样。

为了能够从spring boot应用程序通过其服务访问mongodb pod,您必须首先启动mongodb pod和相应的服务,然后启动spring boot应用程序pod(我们将其命名为sb pod)

您可以通过在sb pod中使用initContainer来强制执行此命令;在启动之前等待数据库服务可用。比如:

initContainers:
  - name: init-mongo-dev
    image: busybox
    command: ['sh', '-c', 'until nslookup mongo-dev; do echo waiting for mongo-dev; sleep 2; done;'] 
如果您使用以下方式连接到sb吊舱:

kubectl exec -it sb-pod bash
然后键入env命令,确保可以看到环境变量


MONGO_DEV_SERVICE_主机和MONGO_DEV_SERVICE_端口

Hi@mon谢谢。让我试试,然后再打给你。你发现问题了吗?你能分享解决方案吗?谢谢