在 K3s 中使用 Kubernetes 服务端点的本地 Mongo DB 容器访问不起作用

Posted

技术标签:

【中文标题】在 K3s 中使用 Kubernetes 服务端点的本地 Mongo DB 容器访问不起作用【英文标题】:Local Mongo DB Container Access with Kubernetes Service Endpoint in K3s is not working 【发布时间】:2022-01-22 03:52:09 【问题描述】:

之前我使用早期的 kubeadm 从运行在 Docker 容器中的本地 MongoDB 创建端点,现在我们已经从 kubeadm 切换到 k3s,因为它更易于使用。现在我们无法使用 MongoDB 端点,它可以在 Kubernetes 集群内访问。我将为您分享必要的信息。如果有人可以帮助我,我会很高兴。

    这是在普通 Docker 中运行的 Mongo DB 容器:

    现在我想在我的 Kubernetes 集群中使用它,然后检查我是否能够在端口 27019 内访问它似乎没问题。

user@shell:~$ curl address-of-the-VM:27019
It looks like you are trying to access MongoDB over HTTP on the native driver port.
    添加下一个我创建的端点和服务文件
apiVersion: v1
kind: Service
metadata:
  name: mongo
  namespace: dev
spec:
  clusterIP: None
  ports:
  - port: 27019
    targetPort: 27019

apiVersion: v1
kind: Endpoints
metadata:
  name: mongo
  namespace: dev
subsets:
  - addresses:
      - ip: address-of-the-VM
    ports:
      - port: 27019
        name: mongo
        

接下来我将它们用作我的环境变量作为 ConfigMap:

kind: ConfigMap
apiVersion: v1
metadata:
  name: spring-profile
  namespace: dev
data:
  MONGODB_HOSTS: mongo.dev
  MONGODB_PORTS: "27019"
  spring.profiles.active: dev
  stage: dev

并在部署中将其绑定到我的 pod:

    containers:
      - name: dev-server
        image: localhost:5000/dev_dev-server 
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
        envFrom:
        - configMapRef:
            name: spring-profile    

现在我遇到了这个问题,所以数据库找不到。

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'maintenanceFeature': Unsatisfied dependency expressed through field 'systemSrvc'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'systemDAO': Unsatisfied dependency

正如我之前在我们的 kubeadm 架构中提到的,它工作得非常好,现在它不工作了。 我还检查了 MongoDB 是否在 K3s 的节点中,是的,是的。

【问题讨论】:

这个IP地址是托管MongoDB的VM的公网地址吗?默认情况下,k3s pod 可以访问公共 Internet(正如我测试的那样),因此它应该可以工作。您可以尝试to exec into running pod 并尝试运行curl mongo:27019 吗? MONGODB_HOSTS: mongo.dev 是正确的吗?在服务中,您使用名称mongo 【参考方案1】:

我找到了解决办法,你可以直接使用IP地址address-of-the-VM:27019

【讨论】:

以上是关于在 K3s 中使用 Kubernetes 服务端点的本地 Mongo DB 容器访问不起作用的主要内容,如果未能解决你的问题,请参考以下文章

KubeEdge vs K3S:Kubernetes在边缘计算场景的探索

再战 k8s(十六):k3s

使用 K3S 架构云边 Kubernetes 集群,运行边缘图像识别应用,并与云端 IoT 平台建立数据连接

Kubernetes (k3s):集群上的过期证书

入门实践丨如何在K3s上部署Web应用程序

入门实践丨如何在K3s上部署Web应用程序