我有一个由MongoDB支持的Spring Boot应用程序。两者都部署在Azure上的Kubernetes集群上。我的应用程序在尝试连接到MongoDB时抛出“由:java.net.UnknownHostException:mongo-dev-0(pod):名称或服务未知”。
我能够连接到mongo-dev-0 pod并在MongoDB上运行查询,因此Mongo本身没有问题,看起来Spring引导能够连接到Mongo Service并发现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
答案 0 :(得分:1)
要想通过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-pod:
kubectl exec -it sb-pod bash
并输入env命令,确保您可以看到环境变量
MONGO_DEV_SERVICE_HOST和MONGO_DEV_SERVICE_PORT
答案 1 :(得分:0)
mongo-dev-0.mongo-dev.default.svc.cluster.local 怎么样?
Dim wdDoc as Word.Document
Set wdDoc = Documents.Add(path & filename)
'From outside Word: Set wdDoc = wdApplication.Documents.Add