我将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仪表板中加载。
这是我的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)
}