gpt4 book ai didi

kubernetes - 如何从 Minikube 连接到本地主机上运行的 MongoDB

转载 作者:行者123 更新时间:2023-12-03 08:47:20 24 4
gpt4 key购买 nike

我正在学习 Kubernetes,正在尝试从 docker-compose 迁移到使用 Kubernetes,但在连接到本地主机上运行的 MongoDB 时遇到问题。

通过使用 'network_mode: "host"'' 使用以下 docker-compose.yaml 连接没有任何问题

//docker-compose.yaml
version: '3'
services:

eureka:
image: sage-eureka
ports:
- "8080:8080"
network_mode: "host"

但是我在 Kubernetes 中遇到了问题。我用过Kompose转换 docker-compose。

//application.properties
spring.data.mongodb.host=localhost (tried adding mongo instead of localhost when used ExternalName and ClusterIP)
spring.data.mongodb.port=27017
spring.data.mongodb.database=MyMongo

// eureka-service.yaml
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.cmd: kompose convert
kompose.version: 1.21.0 (992df58d8)
creationTimestamp: null
labels:
io.kompose.service: eureka
name: eureka
spec:
ports:
- name: "8080"
port: 8080
targetPort: 8080
- name: "27017"
port: 27017
targetPort: 27017
selector:
io.kompose.service: eureka
status:
loadBalancer: {}

//eureka-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
kompose.cmd: kompose convert
kompose.version: 1.21.0 (992df58d8)
creationTimestamp: null
labels:
io.kompose.service: eureka
name: eureka
spec:
replicas: 1
selector:
matchLabels:
io.kompose.service: eureka
strategy: {}
template:
metadata:
annotations:
kompose.cmd: kompose convert
kompose.version: 1.21.0 (992df58d8)
creationTimestamp: null
labels:
io.kompose.service: eureka
spec:
hostNetwork: true
dnsPolicy: Default
containers:
- args:
- --spring.profiles.active=local
image: sage-eureka
imagePullPolicy: Never
name: sageeureka
ports:
- containerPort: 8080
- containerPort: 27017
resources: {}
restartPolicy: Always
serviceAccountName: ""
volumes: null
status: {}

当我向 LoadBalencer 添加类型时,我也获得了外部 IP 地址,并且我还尝试为 Mongo 创建服务类型ExternalName 和 NodePort,如 Kubernetes best practices: mapping external services 所示。 :

eureka       ClusterIP      10.102.22.91   <none>                 8080/TCP,27017/TCP   45h
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4d2h
mongo ExternalName <none> host.docker.internal <none> 45h

我在这里提到了类似的帖子,但我不知道到底需要做什么,并且遵循这些帖子对我来说也不起作用,因为我不知道我做错了什么:

我还尝试创建 mongo-serivce,如第二篇文章中所示:

kind: Service
apiVersion: v1
metadata:
name: mongo
spec:
type: ExternalName
externalName: host.docker.internal

请帮忙!谢谢。

最佳答案

Connect to local database from inside minikube cluster 类似的解决方案

问题是 host.minikube.internal (不是 host.docker.internal - 这是针对 docker 桌面上的 kubernetes 主机)在 kubernetes 容器中不可见不知何故。看这个issue 。它仅在 minikube ssh 实例中可见。

因此需要一种解决方法来将此主机附加到 k8s 内的容器。

或者只是将 k8s 容器中的 IP 地址硬编码为主机。从命令 minikube ssh 'grep host.minikube.internal/etc/hosts | 查找 IP 地址剪切-f1'

例如,如果 IP 为 192.168.65.2。然后使用这个ip作为k8s容器中的服务主机,而不是127.0.0.1/localhost

关于kubernetes - 如何从 Minikube 连接到本地主机上运行的 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60882006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com