我有一个由MongoDB支持的Spring Boot应用程序。两者都部署在Azure上的Kubernetes集群上。我的应用程序在尝试连接到MongoDB时抛出“原因: java.net.UnknownHostException: mongo-dev-0 (pod):名称或服务未知”。
我能够连接到mongo-dev-0 pod并在MongoDB上运行查询,所以Mongo本身没有问题,看起来Spring boot能够连接到Mongo服务并发现服务背后的pod。
如何确保我的Spring Boot应用程序可以发现pods?我该如何调试这个问题?
任何帮助都是非常感谢的。提前谢谢。
下面是我的配置:
---
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发布于 2018-12-07 01:16:39
为了能够通过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
发布于 2018-04-09 19:33:17
那mongo-dev-0.mongo-dev.default.svc.cluster.local呢?
<pod-id>.<service name>.<namespace>.svc.cluster.local就像Stable Network ID一样。
https://stackoverflow.com/questions/49724115
复制相似问题